OTA PROGRAMMING
Over The Air Device Updates
Over the Air (OTA) Programing is a method that allows to remotely send new firmware to IoT devices over the Internet, no matter where they are as it works with Thinger.io Cloud to deliver the new firrmware binaries.
This feature allow us to keep the devices updated with new security patches and code improvements in a fast and scalable way. It is an essential tool for the maintenance of IoT products that will prevent us from traveling to the location of the devices.
The update process is done over a Visual Studio Code extension that integrates with the Thinger.io cloud to upload new firmware binaries to the target device. So, it integrates with the IDE to streamline the development process, just compile and upload as if the device where connected to the computer.
IDE Configuration
Before working with this tool it is necessary to install and configure Visual Studio Code and the PlatformIO extension as explained on the SDK SETUP section of the documentation. Then it is required to install Thinger.io VSCode extension directly from the Extension manager. Search for "Thinger.io" or Checkout on Microsoft Marketplace.
This extension will manage the OTA processes with some interesting features such as:
OTA updates directly from the Internet over Thinger.io
Device switcher to search & select the target device for the update
Real-time device connection status
Compatible with multiple PlatformIO configuration environments inside a Project
Automatic build and upload over the Internet in a single click
OTA with compression support both on ESP8266 and ESP32
MD5 Checksum verification for firmware binaries
Extension Configuration
Before running the OTA it is necessary to configure the extension by accessing the VScode Extensions Manager and selecting the Extensions Settings option.
Thinger.io Host: Place here the URL of the Thinger.io Instance you are working with (if using a private instance, otherwise by default it will be backend.thinger.io).
Thinger.io Port: Specifies the connection port (443 by default).
Thinger.io Secure: Enable/disable SSL/TLS connection (enabled by default).
Thinger.io Token: Place here a Thinger.io
Access Token
with the following permissions:ListDevices
AccessDeviceResources
ReadDeviceStatistics
The following image provides a token configuration example with the required permissions.
Firmware Upload via OTA
The OTA feature is implemented on the default Thinger.io Arduino client libraries required for the connectivity with the Thinger.io cloud.
The boards that supports OTA updates over the Visual Studio Code extension are the following:
Espressif ESP8266
Espressif ESP32
Arduino Nano 33 IOT
Arduino MKR WiFi 1010
Arduino RPI2040 Connect
Arduino MKR NB 1500
The general requirement to start working with OTA updates for a specific device are:
Have a PlatformIO project on Visual Studio Code for the target device. More details here.
Have a basic Thinger.io firmware for your device, and ensure you it can connect to the cloud.
Modify the sketch to include the OTA functionality. More details in each specific device section.
Flash the initial firmware over a serial communication port on the computer.
Use the Thinger.io Visual Studio Code toolbar buttons to select your device and flash new firmware.
If everything is configured correctly it will be possible to start working with the Thinger.io extension via the new elements added to the bottom toolbar. There are two buttons that allow to select the target device to be flashed, and then compile and upload new firmware binaries.
Select Target Device 🚀
This button is a device selector, when you click it, it will prompt to search and select a target device from your Thinger.io account.
When the target device is disconnected, the target device button background color will be red.
Compile and Update ▶️
This button compiles and uploads the code to the selected device. In the process it will show a window with the OTA progress.
To update your device over OTA, the first time it must be flashed from a serial com port.
Clean Target Device 🗑️
It is possible to clean the selected target device accessing the Visual Studio command Palette with Ctrl
+ Shift
+ P
, and searching for Thinger.io
ESP32 OTA
To add OTA functionality for ESP32 it is only required to include the ThingerESP32OTA.h
header and create an instance of it. A complete example for a basic firmware with OTA support can be as the following:
ESP8266 OTA
To add OTA functionality for ESP8266 it is only required to include the ThingerESP8266OTA.h
header and create an instance of it. A complete example for a basic firmware with OTA support can be as the following:
Arduino Nano 33 IOT OTA
To add OTA functionality for Arduino Nano 33 IOT it is required to include the ThingerWiFiNINAOTA.h
header and create an instance of it. A complete example for a basic firmware with OTA support can be as the following:
Note: it is required to include lib_archive = no
to platformio.ini
configuration file.
Arduino MKR WiFi 1010 OTA
To add OTA functionality for Arduino MKR WiFi 1010 it is required to include the ThingerWiFiNINAOTA.h
header and create an instance of it. A complete example for a basic firmware with OTA support can be as the following:
Note: it is required to include lib_archive = no
to platformio.ini
configuration file.
Arduino RPI2040 Connect OTA
To add OTA functionality for Arduino RPI2040 Connect it is only required to include the ThingerMbedOTA.h
header and create an instance of it. A complete example for a basic firmware with OTA support can be as the following:
Arduino MKR NB 1500 OTA
To add OTA functionality for MKR NB 1500 it is only required to include the ThingerMKRNBOTA.h
header and create an instance of it. A complete example for a basic firmware with OTA support can be as the following:
Note: it is required to include lib_archive = no
to platformio.ini
configuration file.
At this moment, it seems that MKR NB 1500 requires pressing the reset button to apply the OTA update.
Last updated