The STM32WB55 SoC doesn't have a WiFi network controller so our STM laboratory stands have the WiFi module based on ESP32-C3 SoC connected by serial port and controlled with AT commands. In this scenario, you will learn how to use these commands.
To implement this scenario, it is necessary to get familiar with the LCD scenario first:
It is also possible to use other displays if you prefer. Please refer to the appropriate chapter to learn how to do it.
This introductory scenario shows how to use AT commands to control the ESP32-C3 WiFi module connected to the STM laboratory stand. In this scenario, we will use simple AT commands and try to display if their execution finished properly. We will use the LCD to observe the behaviour of the device. You can use this as the template for the single step of the procedure of establishing a WiFi connection.
Check if you can see a full LCD in your video stream. Book a device and create a dummy Arduino file with void setup()…
and void loop()…
.
In this scenario, we just send one command and display the result. In further scenarios, you will learn how to connect to the WiFi access point, connect to the MQTT broker, subscribe to the MQTT topic, and publish the message on a specific topic.
Include the LiquidCrystal library in your source code to control LCD:
#include "LiquidCrystal.h"
We will connect to the ESP32-C3 WiFi module with a hardware serial port. We need to instantiate the object of the HardwareSerial
class. The LiquidCrystal
object allows us to display data on LCD.
// Pins definition for Hardware Serial #define RxD_PIN PC_0 //STM numbering #define TxD_PIN PC_1 //STM numbering HardwareSerial WiFiSerial(RxD_PIN, TxD_PIN, NC, NC); // LCD class const int rs = PC5, en = PB11, d4 = PB12, d5 = PB13, d6 = PB14, d7 = PB15; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
We will also declare two strings for comparison with the responses from the WiFi module
String compOK; String compERROR;
In the setup();
function we need to initialise both devices:
WiFiSerial.begin(115200); lcd.begin(16, 2);
And set the two strings for comparison:
compOK = "OK"; compERROR = "ERROR";
The AT commands are sent via a serial port connected to the ESP32-C3 module. At the beginning, we can send an empty command - “AT”. The module should respond “OK” if everything works properly or “ERROR” if something goes wrong.
// Display the message that the software has started lcd.setCursor(0,0); lcd.print("Started"); delay(1000); // Send the "AT" command to the module WiFiSerial.println("AT"); // Display the command on 1-st line of LCD lcd.setCursor(0,0); lcd.print("AT "); do { // Read the response till the LF character response = WiFiSerial.readStringUntil(0x0A); // Display the response on 2-nd line of LCD lcd.setCursor(0,1); lcd.print(response); // Repeat until "OK" comes } while (!(response.startsWith(compOK)));
This code allows us to observe what AT command has been sent and all the responses. It waits until the “OK” comes which is the text sent by the module after every successful command. If something goes wrong we will see the AT command on the first line and “ERROR” on the second line of LCD, and the program stops. This can help with debugging.
You should be able to see the “AT” displayed on the upper line of the LCD, and “OK” on the lower line of the LCD. If any error in the communication with the ESP32-C3 module occurs the second line shows “ERROR”.
Do I need to write the program for the WiFi module? No you don't have to. The ESP32-C3 module is flashed with the firmware from Espressif which implements all functionality for WiFi and MQTT. There are other modules which offer similar functionality.
Can I use a similar WiFi module in my own IoT projects? Certainly! The universal serial port connects the module so the module can be used with almost every microcontroller as the WiFi network controller.
Are AT commands the same for all modules available? The basing AT command set is generally the same, but advanced functionality such as WiFi, MQTT and others can use different syntax for modules from different vendors. Always refer to the original documentation for details.