This is an old revision of the document!


[pczekalski]Dokończyć

IOT3: Connecting to the MQTT 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:

and obligatory:

[pczekalski]Tu trzeba dodać bibliotekę do MQTT, pewnie pub-sub client

Suggested Readings and Knowledge Resources

Hands-on Lab Scenario

Task to be implemented

Connect to the “internal IoT” WiFI access point as presented in the scenario IOT2: Reading IP address of the WiFi—present connection status on the display (for tracing). Once connected to the networking layer, connect to the MQTT broker and present the connection status on the display, then publish an MQTT message.

MQTT clients are identified by their name, so use a unique one, e.g., the end of the IP address assigned, your unique name, etc. It is essential because if you accidentally use someone else's name then you will mess with messages, and your MQTT client will be instantly disconnected when another one with the same name connects!

Start

Check if you can clearly see a full display (of your choice) in your video stream. Book a device and create a dummy Arduino file with void setup()… and void loop()….
Implement a connection to the “internal IoT” network as a client. Refer to the supervisor or the technical documentation on credentials (SSID, passphrase). We do not provide the exact code on how to connect to the WiFi as it is a part of IOT2: Reading IP address of the WiFi scenario.

Steps

Step 1

Include the WiFi management library in your source code:

#include <WiFi.h>

The WiFi library automatically initialises a singleton class, WiFi, which you can use to set up working mode, read MAC and IP, and perform many other operations.

Step 2

Declare some constants, including AP SSID and passphrase and a variable to store IP:

const char* ssid = "REPLACE_WITH_CORRECT_SSID";
const char* pass = "REPLACE_WITH_CORRENT_PASSPHRASE";
IPAddress localIP;

Both ssid and pass are to be obtained from the hardware reference, available here: SUT ESP32 Laboratory Node Hardware Reference.

Step 3

Set your device in the STA mode and connect to the WiFi AP:

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    //Drop some info on display about connecting
    delay(1000);
  }

The WiFi.begin(…) returns the following statuses (value, enumerator: meaning):

  • 0, WL_IDLE_STATUS: temporary status assigned when WiFi.begin() is called
  • 1, WL_NO_SSID_AVAIL: when no SSID are available
  • 2, WL_SCAN_COMPLETED: scan networks is completed
  • 3, WL_CONNECTED: when connected to a WiFi network
  • 4, WL_CONNECT_FAILED: when the connection fails for all the attempts
  • 5, WL_CONNECTION_LOST: when the connection is lost
  • 6, WL_DISCONNECTED: when disconnected from a network

Step 4

Reading the IP as a String is as easy as simply calling:

   localIP = WiFi.localIP();

The IPAddress class contains the toString() method that formats the IP and returns in standard, dot-separated, four-octet text format.

Step 5

Explicitly disconnect from the WiFi AP to free resources:

  WiFi.disconnect();  

Some useful WiFi functions are listed below:

  • WiFi.reconnect() - reconnects the connection that was dropped, note it uses ssid and pass previously specified in the WiFi.begin(…), here you do not provide one.
  • WiFi.RSSI() - once connected, you can get signal strength as int8_t integer.
  • WiFi.setHostname(const char * hostname) - set host name for the ESP32 chip. Remember to use this function before connecting to the AP.

Result validation

You should be able to connect to the WiFi and present the dynamically assigned IP address by the DHCP server.

Note that due to the dynamic nature of the lab, IP addresses can change both during connection (on lease refresh) or between consecutive connects.

FAQ

I set a hostname, but it does appear on the router level.: There are many possible reasons; one is an active registration in the router (AP) that keeps an old IP address, so you need to wait until it expires; other reason is you have changed the hostname when you were connected to the AP.
Can I use a manually configured IP?: Actually, you can, but we strongly discourage it. This is because you may accidentally overlap this IP address with some other device, router, or other infrastructure, blocking its operation.

Project information


This Intellectual Output was implemented under the Erasmus+ KA2.
Project IOT-OPEN.EU Reloaded – Education-based strengthening of the European universities, companies and labour force in the global IoT market.
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,2024.
The content is Copyrighted and distributed under CC BY-NC Creative Commons Licence, free for Non-Commercial use.

en/iot-open/practical/hardware/sut/esp32/iot_3.1713698841.txt.gz · Last modified: 2024/04/21 11:27 by pczekalski
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0