Tutorial ESP32 48/55 - Monitorizarea temperaturii de la distanță și controlul LED-ului MQTT | Kitul IoT ESP32 de la SunFounder
În acest tutorial, vom explora cum să utilizăm modulul ESP32 împreună cu placa de extensie ESP32 de la SunFounder pentru a monitoriza temperatura și umiditatea de la distanță folosind platforma Adafruit IO. În plus, vom implementa funcționalitatea de a controla un LED printr-o interfață web. La finalul acestui proiect, veți putea vizualiza datele de temperatură și umiditate în timp real și să comutați un LED pornit și oprit din browser.
Acest proiect utilizează protocolul MQTT pentru comunicarea eficientă între ESP32 și serviciul Adafruit IO. MQTT este ușor și potrivit pentru aplicații IoT, permițându-ne să publicăm cu ușurință datele senzorilor și să ne abonăm la comenzi pentru controlul LED-ului. Pentru clarificări suplimentare ale codului și cablajului, asigurați-vă că verificați videoclipul care însoțește acest tutorial (în videoclip la 00:00).
Hardware Explicat
Componentele principale pentru acest proiect includ microcontrolerul ESP32, un senzor de temperatură și umiditate DHT11 și un LED. ESP32 este un microcontroler puternic care are capacități integrate de Wi-Fi și Bluetooth, fiind o alegere ideală pentru proiecte IoT. Poate gestiona mai multe sarcini și se poate conecta la internet fără probleme.
Senzorul DHT11 este responsabil pentru măsurarea temperaturii și umidității. Emite semnale digitale care pot fi citite de ESP32. LED-ul servește ca indicator și poate fi controlat de la distanță pentru a demonstra eficacitatea protocolului MQTT în gestionarea dispozitivelor prin internet.
Detalii din Fișa Tehnică
| Producător | Adafruit |
|---|---|
| Număr de piesă | DHT11 |
| Tensiune logică/IO | 3,3 V |
| Tensiune de alimentare | 3,3 V |
| Curent de ieșire (pe canal) | 20 mA |
| Curent de vârf (pe canal) | 50 mA |
| Ghid de frecvență PWM | N/A |
| Praguri logice de intrare | 0,3 V (scăzut), 0,7 V (ridicat) |
| Cădere de tensiune / RDS(on) / saturație | N/A |
| Limite termice | 0 până la 50 °C |
| Pachet | 3 pini |
| Note / variante | Folosiți DHT22 pentru o precizie mai mare. |
- Asigurați-vă de cablarea corectă pentru a preveni deteriorarea.
- Folosiți un rezistor de 220 Ohmi cu LED-ul pentru limitarea curentului.
- Folosiți rezistențe de pull-up pentru pinul de date al DHT11 dacă este necesar.
- Verificați datele de conectare Wi-Fi pentru sensibilitatea la majuscule.
- Monitorizați ieșirea serială pentru depanarea problemelor de conectare.
- Păstrați subiectele MQTT unice pentru a evita conflictele.
- Testați citirile senzorului pentru a vă asigura că sunt valide.
- Fiți atenți la timpul de răspuns al DHT11; poate dura timp pentru a stabiliza citirile.
LED = control LED; temperature = publicare date temperatură; humidity = publicare date umiditate.
Instrucțiuni de Cablare
Pentru a cabla componentele, începeți prin conectarea senzorului DHT11. Conectați pinul stâng al DHT11 la linia de alimentare de 3,3V de pe breadboard folosind un fir roșu. Pinul din mijloc al DHT11 ar trebui conectat la pinul 13 al ESP32 folosind un fir galben. În final, conectați pinul drept al DHT11 la linia de masă folosind un fir albastru.
Apoi, pentru LED, conectați anodul (piciorul mai lung) la pinul 15 al ESP32 printr-un rezistor de 220 Ohmi. Conectați catodul (piciorul mai scurt) direct la linia de masă de pe breadboard. Asigurați-vă că toate conexiunile sunt sigure și verificați de două ori pentru orice fire slăbite.
Configurarea Panoului de Control
-
Vizitați Adafruit IO, apoi faceți clic pe Start for free pentru a crea un cont gratuit.

-
Completați formularul pentru a crea un cont.

-
După crearea contului Adafruit, va trebui să redeschideți Adafruit IO. Faceți clic pe Dashboards, apoi faceți clic pe New Dashboard.

-
Creați un New Dashboard.

-
Intrați în Dashboard-ul nou creat și creați un bloc nou.

-
Creați 1 bloc Toggle.

-
Apoi, va trebui să creați un feed nou aici. Acest toggle va fi folosit pentru a controla LED-ul, iar noi vom numi acest feed “LED”.

-
Bifați feed-ul LED, apoi treceți la pasul următor.

-
Completați setările blocului (în principal Block Title, On Text și Off Text), apoi faceți clic pe butonul Create block din dreapta jos pentru a finaliza.

-
De asemenea, trebuie să creăm două Text Blocks în continuare. Acestea vor fi folosite pentru a afișa temperatura și umiditatea. Așadar, creați două feed-uri numite temperature și humidity.

-
După creare, Dashboard-ul dvs. ar trebui să arate cam așa:

-
Puteți ajusta aspectul folosind opțiunea Edit Layout de pe Dashboard.

-
Faceți clic pe API KEY și veți vedea afișate numele de utilizator și API KEY-ul dvs. Notați-le, deoarece le veți avea nevoie pentru codul dvs.

Exemple de cod și explicații
Codul începe prin includerea bibliotecilor necesare, configurarea credențialelor Wi-Fi și definirea parametrilor MQTT. Identificatori cheie precum AIO_USERNAME și AIO_KEY sunt folosiți pentru autentificarea cu serviciul Adafruit IO.
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"
Aceste linii definesc numele de utilizator și cheia Adafruit IO, esențiale pentru conectarea la broker-ul MQTT. Asigurați-vă că aceste valori sunt corecte pentru a stabili o conexiune reușită.
În funcția setup(), conexiunea Wi-Fi este inițializată, iar clientul MQTT este configurat cu certificatul CA rădăcină pentru comunicare securizată.
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);
Acest cod conectează ESP32 la rețeaua Wi-Fi specificată și setează CA rădăcină pentru conexiuni MQTT securizate. Gestionarea corectă a acestor conexiuni este critică pentru transmiterea fiabilă a datelor.
În final, funcția loop() gestionează conexiunea MQTT și publică citirile de temperatură și umiditate la intervale regulate.
mqtt.processPackets(5000);
Această linie permite ESP32 să proceseze mesajele primite pentru subiectele abonate, asigurând că dispozitivul rămâne receptiv la comenzile trimise din interfața web.
Pentru codul complet, vă rugăm să consultați programul integral încărcat mai jos în articol.
Demonstrație / Ce să vă așteptați
După configurarea cu succes, ar trebui să vedeți actualizări în timp real ale temperaturii și umidității pe tabloul de bord Adafruit IO. De asemenea, puteți comanda LED-ul pornit/oprit prin interfața web. Dacă LED-ul nu răspunde conform așteptărilor, verificați conexiunile și asigurați-vă că numele subiectelor MQTT corespund celor definite în cod.
Fiți conștienți că pot apărea anumite erori de conexiune MQTT din cauza certificatelor expirate. Asigurați-vă că aveți cel mai recent certificat CA rădăcină în codul dvs. pentru a evita aceste probleme (în videoclip la 15:30).
Marcaje temporale video
- 00:00 Început
- 1:50 Introducere în proiect
- 3:16 Ce este MQTT
- 6:36 Configurare Adafruit IO
- 11:13 Conexiuni
- 13:38 Codul Arduino explicat
- 22:03 Selectarea plăcii ESP32 și a portului COM
- 23:44 Demonstrația proiectului
- 27:05 Actualizarea tabloului de bord
/***********************************************************************
Adafruit MQTT Library ESP32 Adafruit IO SSL/TLS example
Use the latest version of the ESP32 Arduino Core:
https://github.com/espressif/arduino-esp32
Works great with Adafruit Huzzah32 Feather and Breakout Board:
https://www.adafruit.com/product/3405
https://www.adafruit.com/products/4172
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Tony DiCola for Adafruit Industries.
Modified by Brent Rubell for Adafruit Industries
MIT license, all text above must be included in any redistribution
**********************************************************************/
/// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/************************* WiFi Access Point *********************************/
#define WLAN_SSID "SSID"
#define WLAN_PASS "PASSWORD"
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
// Using port 8883 for MQTTS
#define AIO_SERVERPORT 8883
// Adafruit IO Account Configuration
// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
// #define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
// #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "JimmyKernel"
#define AIO_KEY "aio_Mxiv12i74b5jKfKNSKLYjlhPmoHC"
/************ Global State (you don't need to change this!) ******************/
// WiFiFlientSecure for SSL/TLS support
WiFiClientSecure client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// io.adafruit.com root CA
const char* adafruitio_root_ca = \
"-----BEGIN CERTIFICATE-----\n"
"MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
"MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
"b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
"DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
"yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
"gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
"DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
"fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
"6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
"PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
"IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
"AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
"BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
"HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
"b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
"HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
"AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
"c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
"ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
"jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
"TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
"7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
"-----END CERTIFICATE-----\n";
/****************************** Feeds ***************************************/
// Setup a feed called 'test' for publishing and 'test2' for subscription.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
/*************************** Sketch Code ************************************/
// set pin numbers
const int ledPin = 15; // the number of the led pin
#include "DHT.h"
#define DHTPIN 13 // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
delay(10);
Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));
// Connect to WiFi access point.
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
delay(1000);
WiFi.begin(WLAN_SSID, WLAN_PASS);
delay(2000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set Adafruit IO's root CA
client.setCACert(adafruitio_root_ca);
// register callback for feed
LED.setCallback(ledCallback);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&LED);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
// Initialize the dht11
dht.begin();
}
// uint32_t x=0;
void loop() {
// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected). See the MQTT_connect
// function definition further below.
MQTT_connect();
indicatorPublish();
// wait 10 seconds for subscription messages
mqtt.processPackets(5000);
// wait a couple seconds to avoid rate limit
//delay(2000);
}
void ledCallback(char* message, uint16_t len) {
char messageBuffer[40];
snprintf(messageBuffer, sizeof(messageBuffer), "LED status is :: %s, len :: %u", message, len);
Serial.println(messageBuffer);
if (strcmp(message, "ON") == 0) {
Serial.println("Turning ON LED");
digitalWrite(ledPin, HIGH);
} else {
Serial.println("Turning OFF LED");
digitalWrite(ledPin, LOW);
}
}
void indicatorPublish() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
float humValue = dht.readHumidity();
float tempValue = dht.readTemperature();
if (isnan(humValue) || isnan(tempValue)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
if (!temperature.publish(tempValue)) {
Serial.println(F("Failed"));
} else {
Serial.print("Temperature: ");
Serial.println(tempValue);
}
if (!humidity.publish(humValue)) {
Serial.println(F("Failed"));
} else {
Serial.print("Humidity: ");
Serial.println(humValue);
}
}
// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1)
;
}
}
Serial.println("MQTT Connected!");
}
/***********************************************************************
Adafruit MQTT Basic lesson 1
Watch video instruction for this code on YouTube https://youtu.be/M9BQweAsHJM
Resource page for this lesson and code:
📚⬇️ Download and resource page https://robojax.com/RJT670
Tutoril by https://youTube.com/@robojax
Adafruit MQTT Library ESP32 Adafruit IO SSL/TLS example
Use the latest version of the ESP32 Arduino Core:
https://github.com/espressif/arduino-esp32
Works great with Adafruit Huzzah32 Feather and Breakout Board:
https://www.adafruit.com/product/3405
https://www.adafruit.com/products/4172
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Tony DiCola for Adafruit Industries.
Modified by Brent Rubell for Adafruit Industries
MIT license, all text above must be included in any redistribution
**********************************************************************/
/// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/************************* WiFi Access Point *********************************/
#define WLAN_SSID "dars"
#define WLAN_PASS "5152535455"
/************************* Adafruit.io Setup *********************************/
#define AIO_SERVER "io.adafruit.com"
// Using port 8883 for MQTTS
#define AIO_SERVERPORT 8883
// Adafruit IO Account Configuration
// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
// #define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
// #define AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_wCyL33EVKLcGoAotGNEQ4dGQYOLZ"
/************ Global State (you don't need to change this!) ******************/
// WiFiFlientSecure for SSL/TLS support
WiFiClientSecure client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
// io.adafruit.com root CA
const char* adafruitio_root_ca =
"-----BEGIN CERTIFICATE-----\n"
"MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
"MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
"d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
"QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
"MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
"b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
"9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
"CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
"nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
"43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
"T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
"gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
"BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
"TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
"DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
"hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
"06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
"PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
"YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
"CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
"-----END CERTIFICATE-----\n";
/****************************** Feeds ***************************************/
// Setup a feed called 'test' for publishing and 'test2' for subscription.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
//Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
//Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
/*************************** Sketch Code ************************************/
// set pin numbers
const int ledPin = 15; // the number of the led pin
void setup() {
Serial.begin(115200);
delay(10);
Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));
// Connect to WiFi access point.
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
delay(1000);
WiFi.begin(WLAN_SSID, WLAN_PASS);
delay(2000);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set Adafruit IO's root CA
client.setCACert(adafruitio_root_ca);
// register callback for feed
LED.setCallback(ledCallback);
// Setup MQTT subscription for time feed.
mqtt.subscribe(&LED);
// initialize the LED pin as an output
pinMode(ledPin, OUTPUT);
}
// uint32_t x=0;
void loop() {
// Ensure the connection to the MQTT server is alive (this will make the first
// connection and automatically reconnect when disconnected). See the MQTT_connect
// function definition further below.
MQTT_connect();
// indicatorPublish();
// wait 10 seconds for subscription messages
mqtt.processPackets(10000);
// wait a couple seconds to avoid rate limit
//delay(2000);
}
void ledCallback(char* message, uint16_t len) {
char messageBuffer[40];
snprintf(messageBuffer, sizeof(messageBuffer), "LED status is :: %s, len :: %u", message, len);
Serial.println(messageBuffer);
if (strcmp(message, "ON") == 0) {
Serial.println("Turning ON LED");
digitalWrite(ledPin, LOW);
} else {
Serial.println("Turning OFF LED");
digitalWrite(ledPin, HIGH);
}
}
// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1)
;
}
}
Serial.println("MQTT Connected!");
}
Common Course Links
Common Course Files
Resurse și referințe
-
Documentație
Fișiere📁
Nu sunt disponibile fișiere.