HTTP Get request with WIO terminal

WIO terminal comes with Realtek RTL8720DN which supports both WiFi and BLE 5.0. We can use the WiFi support to connect the WIO terminal to a WLAN and make a HTTP request. In this post we will see how to make a GET request from WIO terminal.

HTTP Get request with WIO terminal

What will we learn

  • how to setup WIO terminal development environment in Arduino IDE
  • how to connect WIO terminal to WiFi network (WLAN)
  • how to make a HTTP GET request using WIO terminal

what do we need

  • WIO Terminal hardware
  • Arduino IDE

Adding WIO terminal support to Arduino IDE

Go to File -> preference and place the following link in “additional boards” text box

https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json

Then go to Tools -> Board -> Boards manger and search for WIO terminal. You will “Seed SAMD Boards” in the search results, install it (select latest version).

Installing WIO Terminal

Once installed, there will be new section in boards selector, select WIO terminal

selecting WIO Terminal

We also need to get few libraries that are not part of the WIO core. Download the following libraries and add them to Arduino IDE. You can add a library to Arduino IDE by going to Sketch -> Include Library -> Add .ZIP library. You need to choose one zip file at a time.

https://github.com/Seeed-Studio/Seeed_Arduino_rpcWiFi/releases
https://github.com/Seeed-Studio/Seeed_Arduino_rpcUnified/releases
https://github.com/Seeed-Studio/Seeed_Arduino_mbedtls/archive/dev.zip
https://github.com/Seeed-Studio/Seeed_Arduino_FS/releases
https://github.com/Seeed-Studio/Seeed_Arduino_SFUD/releases

Updating RTL8720 firmware

before we can use the WiFi libraries we need update the WiFi chip firmware to the latest version.

Arduino drive

Put the WIO in bootloader mode (slide the power switch of wio twice to put the board into boot-loader mode), and place this bridge program in the “Arduino” drive that is available now. Once the bridge program is placed in the “Arduino” drive, WIO terminal will show “Burn RT8720 fw” message on its display.

RTL8720 firmware download

Download the latest firmware and flashing tool. The firmware folder contains three files, copy the path of the folder that contains the three bin files.

RTL8720 firmware files

If we run the flashing tool “ambd_flash_tool.exe” with out any arguments, it will print the usage instructions as follows.

firmware flasher tool

First we need to erase old firmware and then load the new one. Run the following two commands to erase and load the new firmware.

ambd_flash_tool.exe erase
ambd_flash_tool.exe flash -d <path-to-firmware>
flashing RTL8720 firmware

Connecting WIO to WiFi network

You need to get SSID and passphrase of your WiFi network and put them in below script. Once the WIO is connected to WiFi network it will print the IP address on display.

We need to provide SSID and password to the begin method and use status method to verify connection status. I also added the logic to print a dot on LCD every time we make call to begin method. The loop breaks once WIO is connected to WiFi and prints the IP address on LCD. We can get the IP address using localIP method.

include "TFT_eSPI.h"
include "rpcWiFi.h" 
const char *ssid = "SSID";
const char *password = "PASSWORD";
TFT_eSPI tft;
void setupLCD(){
   tft.begin();
   digitalWrite(LCD_BACKLIGHT, HIGH); // turn on the backlight
   tft.setRotation(3);
   tft.fillScreen(TFT_BLACK); //Black background
   tft.setFreeFont(&FreeSansOblique12pt7b); //select Free, Sans, Oblique, 12pt.  
 }
 void setup()
 {
     Serial.begin(115200);
     delay(10);
     Serial.println();
     Serial.print("Connecting to ");
     Serial.println(ssid);
     setupLCD();    
     int dotCounter = 0;
     while (WiFi.status() != WL_CONNECTED)
     {
         if(dotCounter%10 == 0){
          tft.fillScreen(TFT_BLACK);
          tft.setCursor(100,110);
         }
         tft.print(".");
         dotCounter ++;
         WiFi.begin(ssid, password);
     }
     tft.fillScreen(TFT_BLACK); 
     tft.setCursor(100,110);
     tft.print("IP:");
     tft.print(WiFi.localIP());
     Serial.println("");
     Serial.println("WiFi connected");
     Serial.println("IP address: ");
     Serial.println(WiFi.localIP());
}
void loop(){}

Making a HTTP GET Request with WIO

We are using HTTPClient library to make a GET request. The following script will connect to the provided WiFi network and prints the ascii art available here.

making a HTTP Get request with WIO terminal

The script will check if the WIO is connected to a network before making the request. If the network is available it will make the GET request and print the status code on LCD. The ascii art will be printed on serial console.

 include "TFT_eSPI.h"
 include "rpcWiFi.h"
 include "HTTPClient.h"
 const char *ssid = "SSID";
 const char *password = " PASSWORD";
 TFT_eSPI tft;
 void setupLCD(){
   tft.begin();
   digitalWrite(LCD_BACKLIGHT, HIGH); // turn on the backlight
   tft.setRotation(3);
   tft.fillScreen(TFT_BLACK); //Black background
   tft.setFreeFont(&FreeSansOblique12pt7b); //select Free, Sans, Oblique, 12pt.  
 }
 void checkWiFi(){
     if(WiFi.status() == WL_CONNECTED){
       return;
     }
     int dotCounter = 0;
     while (WiFi.status() != WL_CONNECTED)
     {
         if(dotCounter%10 == 0){
          tft.fillScreen(TFT_BLACK);
          tft.setCursor(100,110);
         }
         tft.print(".");
         dotCounter ++;
         WiFi.begin(ssid, password);
     }
     Serial.println("");
     Serial.println("WiFi connected");
     Serial.println("IP address: ");
     Serial.println(WiFi.localIP());
 }
 void setup()
 {
     Serial.begin(115200);
     delay(10);
     Serial.println();
     Serial.print("Connecting to ");
     Serial.println(ssid);
     setupLCD(); 
 }
 void loop(){
   checkWiFi();
   tft.fillScreen(TFT_BLACK); //Black background
   tft.setCursor(0,20);
   tft.println("Connecting…");
   HTTPClient client;
   client.begin("http://www.arduino.cc/asciilogo.txt"); // Make HTTP GET request
   int httpCode = client.GET();
   tft.print("StatusCode: ");
   tft.println(httpCode);
   if(httpCode!=0){
     Serial.print(client.getString());
   }
   client.end();
   delay(10000);
 }

Add a Comment

Your email address will not be published. Required fields are marked *