{"id":41463,"date":"2021-03-18T18:19:44","date_gmt":"2021-03-18T10:19:44","guid":{"rendered":"\/blog\/?p=41463"},"modified":"2024-02-18T07:22:43","modified_gmt":"2024-02-18T07:22:43","slug":"learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data","status":"publish","type":"post","link":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/","title":{"rendered":"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data"},"content":{"rendered":"\n<p><strong>Updated on Feb 28th, 2024<\/strong><\/p>\n\n\n\n<p>In today\u2019s article we\u2019re going to use Wio Terminal and Tensorflow Lite for Microcontrollers to create an <strong>intelligent meteostation<\/strong>, able to predict the weather and precipitation for next 24 hours based on local data from BME280 environmental sensor. <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"530\" height=\"397\" data-id=\"41465\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/BME280.jpg\" alt=\"\" class=\"wp-image-41465\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/BME280.jpg 530w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/BME280-300x225.jpg 300w\" sizes=\"(max-width: 530px) 100vw, 530px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1030\" height=\"773\" data-id=\"41466\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Raspberry-Pi-Daten-auf-dem-Wio-Terminal-LCD-Screen-anzeigen-1030x773.png\" alt=\"\" class=\"wp-image-41466\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Raspberry-Pi-Daten-auf-dem-Wio-Terminal-LCD-Screen-anzeigen-1030x773.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Raspberry-Pi-Daten-auf-dem-Wio-Terminal-LCD-Screen-anzeigen-300x225.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Raspberry-Pi-Daten-auf-dem-Wio-Terminal-LCD-Screen-anzeigen-768x576.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Raspberry-Pi-Daten-auf-dem-Wio-Terminal-LCD-Screen-anzeigen-1024x768.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Raspberry-Pi-Daten-auf-dem-Wio-Terminal-LCD-Screen-anzeigen.png 1400w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>For more details and visuals, watch the corresponding video!<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Can we predict the weather on a microcontroller?\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/qbpVltzvL6Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">And there is a lot of data in this article to like<\/figcaption><\/figure>\n\n\n\n<p>I will tell you how to apply model optimization techniques, that will allow not only to run medium-sized Convolutional neural network, but also to have this sleeky GUI and WiFi connection all running at the same time for days and month at the time! &nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"640\" height=\"360\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/03\/result.gif\" alt=\"\" class=\"wp-image-41600\"\/><\/figure>\n\n\n\n<p>This is the end result, you can see there are current temperature, humidity and atmospheric pressure values displayed on the screen, together with city name, predicted weather type and predicted precipitation chance &#8211; and in the bottom of the screen there is a log output field, which you can easily re-purpose for displaying extreme weather information, AI jokes or <a href=\"https:\/\/twitter.com\/HardwareAi\" target=\"_blank\" aria-label=\"undefined (opens in a new tab)\" rel=\"noreferrer noopener\">tweets from me<\/a>. While it looks good and useful as it is, there is a lot of things you can add yourself &#8211; for example above mentioned news\/tweets output on the screen or using deep sleep mode to conserve energy and make it battery powered and so on.<\/p>\n\n\n\n<p>This project expands on an <a href=\"https:\/\/blog.seeedstudio.com\/blog\/2021\/02\/23\/build-a-tinyml-smart-weather-station-with-wio-terminal\/\" target=\"_blank\" aria-label=\"undefined (opens in a new tab)\" rel=\"noreferrer noopener\">article about weather prediction from my colleague<\/a>, Jonathan Tan. Most notably, we will improve a few things from basic implementation in that article:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>We\u2019ll use BME280 sensor, that will allow use to get atmospheric pressure information, together with temperature and humidity.<\/li>\n\n\n\n<li>The neural network model in the original project is trained to predict weather for next half an hour, based on data points from previous 3 hours, one measurement every half an hour. So, it is more of a weather descriptor, than a weather predictor really. We will utilize more advanced data processing and model architecture to predict weather type and precipitation chance for next 24 hours, based on previous 24 hours measurements.<\/li>\n\n\n\n<li>We will also utilize model optimizations, which will allow us to get smaller model and fit more things in Wio Terminal memory, for example, a web server and pretty LVGL interface with dark\/light material themes.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Data processing and model training<\/h2>\n\n\n\n<p>So, where shall we begin? It all starts with data of course. For this tutorial we will use a readily available weather dataset from Kaggle, <a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/www.kaggle.com\/selfishgene\/historical-hourly-weather-data\" target=\"_blank\" rel=\"noreferrer noopener\">Historical Hourly Weather Data 2012-2017<\/a>. I live in Shenzhen, a city in Southern China &#8211; and that city is absent from the dataset, so I picked a city that is located on the similar latitude and also has a subtropical climate &#8211; Miami. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"717\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/03\/Capture1-1030x717.png\" alt=\"\" class=\"wp-image-41470\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Capture1-1030x717.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Capture1-300x209.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Capture1-768x535.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Capture1-1024x713.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Capture1.png 1206w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<p>You\u2019ll need to pick a city that at least resembles the climate where you live \u2013 it goes without saying that the model trained on data from Miami and then deployed in Chicago in winter is going to be Confused Beyond All Reason.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/03\/EcXxYFPXgAEDo6Z-822x1030.jpg\" alt=\"\" class=\"wp-image-41469\" width=\"268\" height=\"336\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/EcXxYFPXgAEDo6Z-822x1030.jpg 822w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/EcXxYFPXgAEDo6Z-240x300.jpg 240w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/EcXxYFPXgAEDo6Z-768x962.jpg 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/EcXxYFPXgAEDo6Z.jpg 958w\" sizes=\"(max-width: 268px) 100vw, 268px\" \/><\/figure><\/div>\n\n\n<p>For data processing and model training step, let\u2019s open <a href=\"https:\/\/github.com\/AIWintermuteAI\/Seeed_Arduino_Sketchbook\/blob\/master\/examples\/WioTerminal_TinyML_4_Weather_Prediction\/weather_prediction_final.ipynb\" target=\"_blank\" aria-label=\"undefined (opens in a new tab)\" rel=\"noreferrer noopener\">Colab Notebook I prepared and shared<\/a> in Github repository for this project. Jupyter Notebooks are great way to explore and present data, since they allow having both text and executable code in the same environment. The general workflow is explained in the video and Colab Notebook text sections.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prepare the environment<\/h2>\n\n\n\n<p>Once you get the trained model it is time to deploy it to Wio Terminal. As I mentioned before, we are going to use Tensorflow Lite for Microcontrollers, which I will call Tensorflow Micro, since Tensorflow Lite for Microcontrollers is a mouthful.<\/p>\n\n\n\n<p>Tensorflow Micro is relatively young framework, so we\u2019ll have to jump through quite a few hoops to deploy our model to Wio Terminal. It got much better however, since when it was unveiled &#8211; just look at this video of Pete Warden, Tensorflow maintainer, doing a first live demo on stage and being noticeably nervous a few years ago.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"TensorFlow Lite (TF Dev Summit \u201819)\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/DKosV_-4pdQ?start=1930&#038;feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>If you are making this project on Windows, <strong>first thing<\/strong> you\u2019ll need to do is to download nightly version of Arduino IDE, since current stable version 1.18.3 will not compile sketches with a lot of library dependencies (the issue is that linker command during compilation exceeds maximum length on Windows).<\/p>\n\n\n\n<p><strong>Second<\/strong>, you need to replace the content of cmsis_gcc.h file with a newer version in order to avoid <code>`__SXTB16_RORn`<\/code> not being defined. You will find the newer version of the file in <a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/github.com\/AIWintermuteAI\/Seeed_Arduino_Sketchbook\/tree\/master\/examples\/WioTerminal_TinyML_4_Weather_Prediction\" target=\"_blank\" rel=\"noreferrer noopener\">Github repository for this project<\/a>. Then just copy it to <code>C:\\Users\\[your_user_name]\\AppData\\Local\\Arduino15\\packages\\Seeeduino\\tools\\CMSIS\\5.4.0\\CMSIS\\Core\\Include<\/code> on Windows and <code>\/home\/[your_user_name]\/.arduino15\/packages\/Seeeduino\/tools\/CMSIS\/5.4.0\/CMSIS\/Core\/Include<\/code> on Linux.<\/p>\n\n\n\n<p><strong>Finally<\/strong>, since we\u2019re using a Convolutional neural network and build it with Keras API, it contains an operation not supported by current stable version of Tensorflow Micro. Browsing Tensorflow issues on Github I found that there is a <a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/github.com\/tensorflow\/tensorflow\/pull\/47385\" target=\"_blank\" rel=\"noreferrer noopener\">pull request for adding this op (EXPAND_DIMS)<\/a> to list of available ops, but it was not merged into master at the time of making this video. You can git clone the Tensorflow repository, switch to PR branch and <a aria-label=\"undefined (opens in a new tab)\" href=\"https:\/\/www.tensorflow.org\/lite\/microcontrollers\/library#generate_the_arduino_library\" target=\"_blank\" rel=\"noreferrer noopener\">compile Arduino library<\/a> by executing .\/tensorflow\/lite\/micro\/tools\/ci_build\/test_arduino.sh on Linux machine &#8211; the resulting library can be found in tensorflow\/lite\/micro\/tools\/make\/gen\/arduino_x86_64\/prj\/tensorflow_lite.zip. <strong>Alternatively<\/strong>, you can download already compiled library from this project Github repository and place it into your Arduino sketches libraries folder &#8211; just make sure you only have one Tensorflow lite library at the time!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Test with dummy data<\/h2>\n\n\n\n<p>Once this is all done, create an empty sketch and save it. Then copy the model you trained to the sketch folder and re-open the sketch. Change the variable name of model and model length to something shorter. Then use  the code from wio_terminal_tfmicro_weather_prediction_static.ino for testing:<\/p>\n\n\n\n<p>Let\u2019s go over the main steps we have in C++ code<\/p>\n\n\n\n<p>We include the headers for Tensorflow library and the file with model flatbuffer<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;TensorFlowLite.h&gt;\n\/\/#include \"tensorflow\/lite\/micro\/micro_mutable_op_resolver.h\"\n#include \"tensorflow\/lite\/micro\/all_ops_resolver.h\"\n#include \"tensorflow\/lite\/micro\/micro_error_reporter.h\"\n#include \"tensorflow\/lite\/micro\/system_setup.h\"\n#include \"tensorflow\/lite\/micro\/micro_interpreter.h\"\n#include \"tensorflow\/lite\/schema\/schema_generated.h\"\n\n#include \"model_Conv1D.h\"<\/code><\/pre>\n\n\n\n<p>Notice how I have micro_mutable_op_resolver.h commented out and all_ops_resolver.h enabled &#8211; all_ops_resolver.h header compiles all the operations currently present in Tensorflow Micro and convenient for testing, but once you finished testing it is much better to switch to micro_mutable_op_resolver.h to save devices memory &#8211; it does make a big difference.<\/p>\n\n\n\n<p>Next we define the pointers for error reporter, model, input and output tensors and interpreter. Notice how our model has two outputs &#8211; one for precipitation amount and another one for weather type. We also define tensor arena, which you can think of as a scratch board, holding input, output, and intermediate arrays &#8211; size required will depend on the model you are using, and may need to be determined by experimentation.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Globals, used for compatibility with Arduino-style sketches.\nnamespace {\ntflite::ErrorReporter* error_reporter = nullptr;\nconst tflite::Model* model = nullptr;\ntflite::MicroInterpreter* interpreter = nullptr;\nTfLiteTensor* input = nullptr;\nTfLiteTensor* output_type = nullptr;\nTfLiteTensor* output_precip = nullptr;\n\nconstexpr int kTensorArenaSize = 1024*25;\nuint8_t tensor_arena&#91;kTensorArenaSize];\n}  \/\/ namespace<\/code><\/pre>\n\n\n\n<p>Then in setup function, there is more boilerplate stuff, such as instantiating error reporter, op resolver, interpreter, mapping the model, allocating tensors and finally checking the tensor shapes after allocation. Here is when code might throw an error during runtime, if some of model operations are not supported by current version of Tensorflow Micro library. In case you have unsupported operations, you can either changed the model architecture or add the support for the operator yourself, usually by porting it from Tensorflow Lite.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void setup() {\n  Serial.begin(115200);\n  while (!Serial) {delay(10);}\n  \n  \/\/ Set up logging. Google style is to avoid globals or statics because of\n  \/\/ lifetime uncertainty, but since this has a trivial destructor it's okay.\n  \/\/ NOLINTNEXTLINE(runtime-global-variables)\n  static tflite::MicroErrorReporter micro_error_reporter;\n  error_reporter = &amp;micro_error_reporter;\n\n  \/\/ Map the model into a usable data structure. This doesn't involve any\n  \/\/ copying or parsing, it's a very lightweight operation.\n  model = tflite::GetModel(Conv1D_tflite);\n  if (model-&gt;version() != TFLITE_SCHEMA_VERSION) {\n    TF_LITE_REPORT_ERROR(error_reporter,\n                         \"Model provided is schema version %d not equal \"\n                         \"to supported version %d.\",\n                         model-&gt;version(), TFLITE_SCHEMA_VERSION);\n    return;\n  }\n\n  \/\/ This pulls in all the operation implementations we need.\n  \/\/ NOLINTNEXTLINE(runtime-global-variables)\n  \/\/static tflite::MicroMutableOpResolver&lt;1&gt; resolver;\n  static tflite::AllOpsResolver resolver;\n  \/\/ Build an interpreter to run the model with.\n  static tflite::MicroInterpreter static_interpreter(model, resolver, tensor_arena, kTensorArenaSize, error_reporter);\n  interpreter = &amp;static_interpreter;\n\n  \/\/ Allocate memory from the tensor_arena for the model's tensors.\n  TfLiteStatus allocate_status = interpreter-&gt;AllocateTensors();\n  if (allocate_status != kTfLiteOk) {\n    TF_LITE_REPORT_ERROR(error_reporter, \"AllocateTensors() failed\");\n    return;\n  }\n\n  \/\/ Obtain pointers to the model's input and output tensors.\n  input = interpreter-&gt;input(0);\n  output_type = interpreter-&gt;output(1);\n  output_precip = interpreter-&gt;output(0);\n  \n  Serial.println(input-&gt;dims-&gt;size);\n  Serial.println(input-&gt;dims-&gt;data&#91;1]);\n  Serial.println(input-&gt;dims-&gt;data&#91;2]);\n  Serial.println(input-&gt;type);\n\n  Serial.println(output_type-&gt;dims-&gt;size);\n  Serial.println(output_type-&gt;dims-&gt;data&#91;1]);\n  Serial.println(output_type-&gt;type);\n\n  Serial.println(output_precip-&gt;dims-&gt;size);\n  Serial.println(output_precip-&gt;dims-&gt;data&#91;1]);\n  Serial.println(output_precip-&gt;type);\n}<\/code><\/pre>\n\n\n\n<p>Finally in the loop function we define a placeholder for quantized INT8 values and an array with float values, which you can copy paste from Colab notebook for comparison of model inference on device vs. in Colab.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void loop() {\n\n  int8_t x_quantized&#91;72];\n  float x&#91;72] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n       0, 0, 0, 0, 0, 0};        \n<\/code><\/pre>\n\n\n\n<p>We quantize the float values to INT8 in for loop and place them in the input tensor one by one:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  for (byte i = 0; i &lt; 72; i = i + 1) {\n        input-&gt;data.int8&#91;i] = x&#91;i] \/ input-&gt;params.scale + input-&gt;params.zero_point;\n  }<\/code><\/pre>\n\n\n\n<p>Then inference is performed by Tensorflow Micro interpreter and if no errors are reported, values are placed in the output tensors.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>  \/\/ Run inference, and report any error\n  TfLiteStatus invoke_status = interpreter-&gt;Invoke();\n  \n  if (invoke_status != kTfLiteOk) {\n    TF_LITE_REPORT_ERROR(error_reporter, \"Invoke failed\");\n    return;\n  }<\/code><\/pre>\n\n\n\n<p>Similar to input, the output of the model is also quantized, so we need to perform the reverse operation and convert it from INT8 to float.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> \/\/ Obtain the quantized output from model's output tensor\n  float y_type&#91;4];\n\n  \/\/ Dequantize the output from integer to floating-point\n  int8_t y_precip_q = output_precip-&gt;data.int8&#91;0];\n  Serial.println(y_precip_q);\n  float y_precip = (y_precip_q - output_precip-&gt;params.zero_point) * output_precip-&gt;params.scale;  \n  Serial.print(\"Precip: \");\n  Serial.print(y_precip);\n  Serial.print(\"\\t\");\n  Serial.print(\"Type: \");\n  for (byte i = 0; i &lt; 4; i = i + 1) {\n    y_type&#91;i] = (output_type-&gt;data.int8&#91;i] - output_type-&gt;params.zero_point) * output_type-&gt;params.scale;\n    Serial.print(y_type&#91;i]);\n    Serial.print(\" \");\n  }\n  Serial.print(\"\\n\");\n}<\/code><\/pre>\n\n\n\n<p>Check and compare the values for the same data point, they should be the same for quantized Tensorflow Lite model in Colab notebook and Tensorflow Micro model running on your Wio Terminal.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"blob:https:\/\/blog.seeedstudio.com\/58f038d8-ce48-4a92-9da9-a760a29aa87a\" alt=\"\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Explore and try full version of the sketch<\/h2>\n\n\n\n<p>Cool! So it does work, now the next step is to make it from a demo into actually useful project. Open the sketch from Seeed Arduino sketchbook repository and have a look at its content. <\/p>\n\n\n\n<p>I have divided the code into main sketch, get_historical_data and GUI parts. Since our model requires the data for past 24 hours we would need to wait 24 hours to perform the first inference, which is a lot &#8211; to solve this problem we get the weather for past 24 hours from openweathermap.com API and can perform the first inference immediately after device boots up and then replace the values in the circular buffer with temperature, humidity and pressure from BME280 sensor connected to Wio Terminal I2C Grove socket. For GUI I used LVGL, a Little and Versatile Graphics Library &#8211; it is also a rapidly developing project, and using it is not super easy, but the functionality is well worth it! <\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"330\" data-id=\"41474\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/home_banner-1030x330.jpg\" alt=\"\" class=\"wp-image-41474\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/home_banner-1030x330.jpg 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/home_banner-300x96.jpg 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/home_banner-768x246.jpg 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/home_banner-1024x328.jpg 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/home_banner.jpg 1366w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Follow the instructions in Github repository to install the necessary libraries and configure LVGL to run the demo.<\/p>\n\n\n\n<p>We made it &#8211; we trained and deployed medium-sized Convolutional neural network on Wio Terminal with all the blows and whistles and optimizations to allow device run stable for long periods of time and look sharp! Do try making this project yourself and <strong>possibly improving it<\/strong>! It\u2019s always a pleasure to see my videos and tutorials are helpful and inspiring for other people.<\/p>\n\n\n\n<p>Until the next time!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Choose the best tool for your TinyML project<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><a href=\"https:\/\/www.seeedstudio.com\/Grove-Vision-AI-V2-Kit-p-5852.html\">Grove \u2013 Vision AI Module V2<\/a><\/strong><\/h3>\n\n\n\n<p>It\u2019s an MCU-based vision AI module powered by Himax WiseEye2 HX6538 processor, featuring rm Cortex-M55 and Ethos-U55. It integrates Arm Helium technology, which is finely optimized for&nbsp;<strong>vector data processing<\/strong>, enables:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Award-winning low power consumption<\/li>\n\n\n\n<li>Significant uplift in DSP and ML capabilities<\/li>\n\n\n\n<li>Designed for battery-powered endpoint AI applications<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/5-101021112-Grove-Vision-AI-Module-V2-feature-1030x773.jpg\" alt=\"\" class=\"wp-image-91983\" width=\"463\" height=\"347\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/5-101021112-Grove-Vision-AI-Module-V2-feature-1030x773.jpg 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/5-101021112-Grove-Vision-AI-Module-V2-feature-300x225.jpg 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/5-101021112-Grove-Vision-AI-Module-V2-feature-768x576.jpg 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/5-101021112-Grove-Vision-AI-Module-V2-feature-1024x768.jpg 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/5-101021112-Grove-Vision-AI-Module-V2-feature.jpg 1400w\" sizes=\"(max-width: 463px) 100vw, 463px\" \/><\/figure><\/div>\n\n\n<p>With support for&nbsp;<strong>Tensorflow&nbsp;<\/strong>and&nbsp;<strong>Pytorch&nbsp;<\/strong>frameworks, it allows users to deploy both off-the-shelf and custom AI models from Seeed Studio&nbsp;<a href=\"https:\/\/sensecraft.seeed.cc\/ai\/#\/model\">SenseCraft AI<\/a>. Additionally, the module features a range of interfaces, including IIC, UART, SPI, and Type-C, allowing easy integration with popular products like Seeed Studio XIAO, Grove, Raspberry Pi, BeagleBoard, and ESP-based products for further development.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><a href=\"https:\/\/www.seeedstudio.com\/XIAO-ESP32S3-Sense-p-5639.html\">Seeed Studio XIAO ESP32S3 Sense<\/a><\/strong>&nbsp;&amp;&nbsp;<strong><a href=\"https:\/\/www.seeedstudio.com\/Seeed-XIAO-BLE-Sense-nRF52840-p-5253.html\">Seeed Studio XIAO nRF52840 Sense<\/a><\/strong><\/h3>\n\n\n\n<p>Seeed Studio XIAO Series are diminutive development boards, sharing a similar hardware structure, where the size is literally thumb-sized. The code name \u201cXIAO\u201d here represents its half feature \u201cTiny\u201d, and the other half will be \u201cPuissant\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"773\" data-id=\"91985\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072058195881-1030x773.png\" alt=\"\" class=\"wp-image-91985\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072058195881-1030x773.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072058195881-300x225.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072058195881-768x576.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072058195881-1024x768.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072058195881.png 1400w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1030\" height=\"773\" data-id=\"91984\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072046576630-1030x773.png\" alt=\"\" class=\"wp-image-91984\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072046576630-1030x773.png 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072046576630-300x225.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072046576630-768x576.png 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072046576630-1024x768.png 1024w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2024\/02\/\u4f01\u4e1a\u5fae\u4fe1\u622a\u56fe_17072046576630.png 1400w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Seeed Studio XIAO ESP32S3 Sense integrates an OV2640 camera sensor, digital microphone, and SD card support. Combining embedded ML computing power and photography capability, this development board can be your great tool to get started with intelligent voice and vision AI.<\/p>\n\n\n\n<p>Seeed Studio XIAO nRF52840 Sense is carrying Bluetooth 5.0 wireless capability and is able to operate with low power consumption. Featuring onboard IMU and PDM, it can be your best tool for embedded Machine Learning projects.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.seeedstudio.com\/catalogsearch\/result\/?q=XIAO+\">Click here<\/a>&nbsp;to learn more about the&nbsp;<a href=\"https:\/\/www.seeedstudio.com\/xiao-series-page\">XIAO family<\/a>!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>SenseCraft AI<\/strong><\/h3>\n\n\n\n<p><a href=\"https:\/\/sensecraft.seeed.cc\/ai\/#\/model\" target=\"_blank\" rel=\"noreferrer noopener\">SenseCraft AI<\/a>&nbsp;is a platform that enables easy AI model training and deployment with no-code\/low-code. It supports Seeed products natively, ensuring complete adaptability of the trained models to Seeed products. Moreover, deploying models through this platform offers immediate visualization of identification results on the website, enabling prompt assessment of model performance.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/06\/%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_17072049675606-1030x637.png\" alt=\"\" class=\"wp-image-91977\" width=\"573\" height=\"354\"\/><\/figure><\/div>\n\n\n<p>Ideal for tinyML applications, it allows you to effortlessly deploy off-the-shelf or custom AI models by connecting the device, selecting a model, and viewing identification results.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Updated on Feb 28th, 2024 In today\u2019s article we\u2019re going to use Wio Terminal and<\/p>\n","protected":false},"author":3505,"featured_media":41479,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[1608,1771,3647,3411,3003,3678],"class_list":["post-41463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-machine-learning","tag-tensorflow-lite","tag-weather-sensor","tag-weather-station","tag-wio-terminal","tag-wio-terminal-project"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data - Latest News from Seeed Studio<\/title>\n<meta name=\"description\" content=\"In today\u2019s article we\u2019re going to use Wio Terminal and Tensorflow Lite for Microcontrollers to create an intelligent meteostation, able to predict the weather and precipitation for next 24 hours based on local data from BME280 environmental sensor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data - Latest News from Seeed Studio\" \/>\n<meta property=\"og:description\" content=\"In today\u2019s article we\u2019re going to use Wio Terminal and Tensorflow Lite for Microcontrollers to create an intelligent meteostation, able to predict the weather and precipitation for next 24 hours based on local data from BME280 environmental sensor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/\" \/>\n<meta property=\"og:site_name\" content=\"Latest News from Seeed Studio\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-18T10:19:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-18T07:22:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1082\" \/>\n\t<meta property=\"og:image:height\" content=\"838\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Dmitry Maslov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dmitry Maslov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/\",\"name\":\"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data - Latest News from Seeed Studio\",\"isPartOf\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png\",\"datePublished\":\"2021-03-18T10:19:44+00:00\",\"dateModified\":\"2024-02-18T07:22:43+00:00\",\"author\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/be44021cef50367de429a4d5f613ed2f\"},\"description\":\"In today\u2019s article we\u2019re going to use Wio Terminal and Tensorflow Lite for Microcontrollers to create an intelligent meteostation, able to predict the weather and precipitation for next 24 hours based on local data from BME280 environmental sensor.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#primaryimage\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png\",\"contentUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png\",\"width\":1082,\"height\":838},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.seeedstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/\",\"name\":\"Latest News from Seeed Studio\",\"description\":\"Emerging IoT, AI and Autonomous Applications on the Edge\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/be44021cef50367de429a4d5f613ed2f\",\"name\":\"Dmitry Maslov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b60714970fdc7dfa4a5d9915477bdd24?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b60714970fdc7dfa4a5d9915477bdd24?s=96&r=g\",\"caption\":\"Dmitry Maslov\"},\"url\":\"https:\/\/www.seeedstudio.com\/blog\/author\/dmitry-maslov\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data - Latest News from Seeed Studio","description":"In today\u2019s article we\u2019re going to use Wio Terminal and Tensorflow Lite for Microcontrollers to create an intelligent meteostation, able to predict the weather and precipitation for next 24 hours based on local data from BME280 environmental sensor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/","og_locale":"en_US","og_type":"article","og_title":"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data - Latest News from Seeed Studio","og_description":"In today\u2019s article we\u2019re going to use Wio Terminal and Tensorflow Lite for Microcontrollers to create an intelligent meteostation, able to predict the weather and precipitation for next 24 hours based on local data from BME280 environmental sensor.","og_url":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/","og_site_name":"Latest News from Seeed Studio","article_published_time":"2021-03-18T10:19:44+00:00","article_modified_time":"2024-02-18T07:22:43+00:00","og_image":[{"width":1082,"height":838,"url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png","type":"image\/png"}],"author":"Dmitry Maslov","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Dmitry Maslov","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/","url":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/","name":"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data - Latest News from Seeed Studio","isPartOf":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#primaryimage"},"image":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png","datePublished":"2021-03-18T10:19:44+00:00","dateModified":"2024-02-18T07:22:43+00:00","author":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/be44021cef50367de429a4d5f613ed2f"},"description":"In today\u2019s article we\u2019re going to use Wio Terminal and Tensorflow Lite for Microcontrollers to create an intelligent meteostation, able to predict the weather and precipitation for next 24 hours based on local data from BME280 environmental sensor.","breadcrumb":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#primaryimage","url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png","contentUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png","width":1082,"height":838},{"@type":"BreadcrumbList","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/03\/18\/learn-tinyml-using-wio-terminal-and-arduino-ide-4-weather-prediction-with-tensorflow-lite-for-microcontrollers-a-k-a-i-just-like-data\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.seeedstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Learn TinyML using Wio Terminal and Arduino IDE #4 Weather prediction with Tensorflow Lite for Microcontrollers a.k.a. I just like data"}]},{"@type":"WebSite","@id":"https:\/\/www.seeedstudio.com\/blog\/#website","url":"https:\/\/www.seeedstudio.com\/blog\/","name":"Latest News from Seeed Studio","description":"Emerging IoT, AI and Autonomous Applications on the Edge","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/be44021cef50367de429a4d5f613ed2f","name":"Dmitry Maslov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b60714970fdc7dfa4a5d9915477bdd24?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b60714970fdc7dfa4a5d9915477bdd24?s=96&r=g","caption":"Dmitry Maslov"},"url":"https:\/\/www.seeedstudio.com\/blog\/author\/dmitry-maslov\/"}]}},"modified_by":"Sue Guan","views":7431,"featured_image_urls":{"full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png",1082,838,false],"thumbnail":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-80x80.png",80,80,true],"medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-300x232.png",300,232,true],"medium_large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-768x595.png",640,496,true],"large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-1030x798.png",640,496,true],"1536x1536":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png",1082,838,false],"2048x2048":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png",1082,838,false],"visody_icon":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png",32,25,false],"magazine-7-slider-full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04.png",1082,838,false],"magazine-7-slider-center":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-936x838.png",936,838,true],"magazine-7-featured":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-1024x793.png",1024,793,true],"magazine-7-medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-720x380.png",720,380,true],"magazine-7-medium-square":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/wio-04-675x450.png",675,450,true]},"author_info":{"display_name":"Dmitry Maslov","author_link":"https:\/\/www.seeedstudio.com\/blog\/author\/dmitry-maslov\/"},"category_info":"<a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/news\/\" rel=\"category tag\">News<\/a>","tag_info":"News","comment_count":"0","_links":{"self":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/41463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/users\/3505"}],"replies":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=41463"}],"version-history":[{"count":10,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/41463\/revisions"}],"predecessor-version":[{"id":92231,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/41463\/revisions\/92231"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media\/41479"}],"wp:attachment":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=41463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=41463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=41463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}