This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| en:iot-open:practical:hardware:sut:stm32:iot_3 [2024/04/27 10:35] – [Steps] ktokarz | en:iot-open:practical:hardware:sut:stm32:iot_3 [2024/04/27 12:42] (current) – ktokarz | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== STM_IoT_3: Connecting to the MQTT broker and publishing data ===== | ||
| + | In the following scenario, you will learn how to connect to the MQTT broker and publish a message. | ||
| + | |||
| + | ===== Prerequisites ===== | ||
| + | To implement this scenario, it is necessary to get familiar with at least one of the following scenarios first: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | |||
| + | The requirement is to pass the scenarios | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | |||
| + | To be able to connect to the WiFi network. | ||
| + | |||
| + | ===== Suggested Readings and Knowledge Resources ===== | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | |||
| + | ===== Hands-on Lab Scenario ===== | ||
| + | Note - this scenario can be used in pair with [[[en: | ||
| + | ==== Task to be implemented ==== | ||
| + | Connect to the " | ||
| + | |||
| + | <note warning> | ||
| + | |||
| + | The steps below show the principles of the software operation. How to implement the full software please refer to the previous scenarios: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | * [[en: | ||
| + | |||
| + | ==== Start ==== | ||
| + | Check if you can see a full LCD in your video stream. Book a device and create a dummy Arduino file with '' | ||
| + | |||
| + | ==== Steps ==== | ||
| + | |||
| + | === Step 1 === | ||
| + | The beginning of the code is the same as in the previous scenario, so make a copy of it: | ||
| + | * [[en: | ||
| + | |||
| + | We will use the code template from [[en: | ||
| + | <code c> | ||
| + | WiFiSerial.println(" | ||
| + | lcd.setCursor(0, | ||
| + | lcd.print(" | ||
| + | do { | ||
| + | response = WiFiSerial.readStringUntil(0x0A); | ||
| + | lcd.setCursor(0, | ||
| + | lcd.print(response); | ||
| + | } while (!(response.startsWith(compOK))); | ||
| + | |||
| + | delay(1000); | ||
| + | </ | ||
| + | |||
| + | === Step 2 === | ||
| + | In the firmware for the ESP32-C3 board, there are AT commands to work with the MQTT protocol. In this scenario we will use three of them: | ||
| + | |||
| + | * " | ||
| + | * " | ||
| + | * " | ||
| + | |||
| + | Below we briefly describe the commands mentioning only the parameters important to us. Please refer to the Espressif documentation((https:// | ||
| + | < | ||
| + | If the parameter is taken within quotation marks it should be in such a form sent in a command.\\ | ||
| + | Please refer to the MQTT description chapter for the meaning of some protocol details. | ||
| + | </ | ||
| + | **AT+MQTTUSERCFG** | ||
| + | This command accepts the list of parameters: | ||
| + | < | ||
| + | AT+MQTTUSERCFG=< | ||
| + | </ | ||
| + | * LinkID - currently should be 0 | ||
| + | * scheme - 1 (MQTT over TCP) | ||
| + | * " | ||
| + | * " | ||
| + | * " | ||
| + | * cert_key-ID - should be 0 | ||
| + | * CA_ID - should be 0 | ||
| + | * " | ||
| + | |||
| + | In our case, the command can look like this: | ||
| + | < | ||
| + | AT+MQTTUSERCFG=0, | ||
| + | </ | ||
| + | |||
| + | **AT+MQTTCONN** | ||
| + | This command accepts the list of parameters: | ||
| + | < | ||
| + | AT+MQTTCONN=< | ||
| + | </ | ||
| + | * LinkID - currently should be 0 | ||
| + | * " | ||
| + | * port - the TCP port number, 1883 for most of the brokers | ||
| + | * reconnect - 1 for automatic reconnection (recommended in our case) | ||
| + | |||
| + | The command can look like this: | ||
| + | < | ||
| + | AT+MQTTCONN=0, | ||
| + | </ | ||
| + | |||
| + | **AT+MQTTPUB** | ||
| + | < | ||
| + | AT+MQTTPUB=< | ||
| + | </ | ||
| + | |||
| + | The list of parameters: | ||
| + | * LinkID - currently should be 0 | ||
| + | * " | ||
| + | * " | ||
| + | * qos - mode of the quality of service, 0, 1 or 2, default 0. | ||
| + | * retain - retain flag, 0 or 1. | ||
| + | |||
| + | === Step 3 === | ||
| + | Implement the MQTT configuration and connection to the broker. Use the template for the " | ||
| + | |||
| + | === Step 4 === | ||
| + | Implement publishing of the MQTT message. You can do it just once in the " | ||
| + | |||
| + | ==== Result validation ==== | ||
| + | You should be able to connect to the WiFi and MQTT broker (verified by the status present on the selected display) and then publish a message (once or periodically). Depending on whether you're fully remote or able to access our networks with an additional device, you need to implement a subscriber (as present in the scenario [[[en: | ||
| + | <note info> | ||
| + | Because LCD can't properly display some non-visible characters the presented code sometimes shows additional, non-letter characters. It is out of the scope of this scenario to filter these characters out. We leave the task of making visual improvements to your invention. | ||
| + | </ | ||
| + | |||
| + | ===== FAQ ===== | ||
| + | **Can I publish messages on different topics?**: Certainly you can. You can publish the readings of the temperature sensor with one topic, and readings of the humidity with another. The limit of the number of different topics comes only from the available resources of the MQTT broker.\\ | ||
| + | **My MQTT client disconnects randomly**: The most common reason is you're using a non-unique MQTT client name. Please change it to some other (even random generated) and give it another try.\\ | ||
| + | **Do I need to authorise to publish and subscribe? | ||
| + | |||
| + | <WRAP noprint> | ||
| + | ===== Project information ===== | ||
| + | {{: | ||
| + | This Intellectual Output was implemented under the Erasmus+ KA2.\\ | ||
| + | Project IOT-OPEN.EU Reloaded – Education-based strengthening of the European universities, | ||
| + | Project number: 2022-1-PL01-KA220-HED-000085090. | ||
| + | |||
| + | **__Erasmus+ Disclaimer__**\\ | ||
| + | This project has been funded with support from the European Commission. \\ | ||
| + | This publication reflects the views of only the author, and the Commission cannot be held responsible for any use that may be made of the information contained therein. | ||
| + | |||
| + | **__Copyright Notice__**\\ | ||
| + | This content was created by the IOT-OPEN.EU Reloaded consortium, 2022, | ||
| + | The content is Copyrighted and distributed under CC BY-NC [[https:// | ||
| + | <figure label> | ||
| + | {{: | ||
| + | </ | ||
| + | |||
| + | </ | ||