Mafunzo ya ESP32 48/55 - Ufuatiliaji wa Joto kwa Mbali na Udhibiti wa LED MQTT | Kifurushi cha IoT cha ESP32 cha SunFounder
Katika mafunzo haya, tutachunguza jinsi ya kutumia moduli ya ESP32 pamoja na bodi ya upanuzi ya ESP32 ya SunFounder kufuatilia joto na unyevu kwa mbali kwa kutumia jukwaa la Adafruit IO. Zaidi ya hayo, tutatekeleza utendaji wa kudhibiti LED kupitia kiolesura cha wavuti. Kufikia mwisho wa mradi huu, utaweza kuona data ya joto na unyevu kwa wakati halisi na kuwasha na kuzima LED kutoka kwenye kivinjari chako.
Mradi huu unatumia itifaki ya MQTT kwa mawasiliano bora kati ya ESP32 na huduma ya Adafruit IO. MQTT ni nyepesi na inafaa kwa programu za IoT, ikituruhusu kuchapisha data ya vitambuzi kwa urahisi na kujisajili kwa amri za udhibiti wa LED. Kwa ufafanuzi zaidi wa msimbo na uunganishaji wa nyaya, hakikisha unatazama video inayoambatana na mafunzo haya (katika video saa 00:00).
Vifaa Vimeelezwa
Vipengele vikuu vya mradi huu vinajumuisha kidhibiti kidogo cha ESP32, kitambuzi cha joto na unyevu cha DHT11, na LED. ESP32 ni kidhibiti kidogo chenye nguvu ambacho kina Wi-Fi iliyojengewa ndani na uwezo wa Bluetooth, na kuifanya kuwa chaguo bora kwa miradi ya IoT. Inaweza kushughulikia kazi nyingi na kuunganishwa kwenye intaneti kwa urahisi.
Kitambuzi cha DHT11 kinawajibika kupima joto na unyevu. Kinatoa mawimbi ya dijitali ambayo yanaweza kusomwa na ESP32. LED hutumika kama kiashiria na inaweza kudhibitiwa kwa mbali kuonyesha ufanisi wa itifaki ya MQTT katika kusimamia vifaa kwenye intaneti.
Maelezo ya Datasheet
| Mtengenezaji | Adafruit |
|---|---|
| Nambari ya sehemu | DHT11 |
| Voltage ya Logic/IO | 3.3 V |
| Voltage ya usambazaji | 3.3 V |
| Mkondo wa pato (kwa kila chaneli) | 20 mA |
| Mkondo wa kilele (kwa kila chaneli) | 50 mA |
| Mwongozo wa mzunguko wa PWM | Haipatikani |
| Viwango vya kizingiti cha mantiki ya ingizo | 0.3 V (chini), 0.7 V (juu) |
| Kushuka kwa voltage / RDS(on) / kueneza | Haipatikani |
| Mipaka ya joto | 0 hadi 50 °C |
| Kifurushi | Pini 3 |
| Vidokezo / lahaja | Tumia DHT22 kwa usahihi wa juu zaidi. |
- Hakikisha uunganishaji sahihi wa nyaya ili kuzuia uharibifu.
- Tumia kipingamizi cha Ohm 220 na LED kwa kudhibiti mkondo.
- Tumia vipingamizi vya kuvuta-juu kwa pini ya data ya DHT11 ikiwa ni lazima.
- Angalia hati za Wi-Fi kwa usikivu wa herufi kubwa na ndogo.
- Fuatilia pato la serial kwa kutatua matatizo ya muunganisho.
- Weka mada za MQTT kuwa za kipekee ili kuepuka migongano.
- Jaribu usomaji wa kitambuzi ili kuhakikisha ni sahihi.
- Kuwa makini na muda wa majibu wa DHT11; inaweza kuchukua muda kusawazisha usomaji.
LED = dhibiti LED; temperature = chapisha data ya joto; humidity = chapisha data ya unyevu.
Maagizo ya Uunganishaji wa Nyaya
Ili kuunganisha vifaa, anza kwa kuunganisha kitambuzi cha DHT11. Unganisha pini ya kushoto ya DHT11 kwenye reli ya nguvu ya 3.3V kwenye bodi ya mkate kwa kutumia waya nyekundu. Pini ya kati ya DHT11 inapaswa kuunganishwa kwenye pini 13 kwenye ESP32 kwa kutumia waya ya njano. Hatimaye, unganisha pini ya kulia ya DHT11 kwenye reli ya ardhi kwa kutumia waya ya bluu.
Kisha, kwa LED, unganisha anode (mguu mrefu) kwenye pini 15 ya ESP32 kupitia kipingamizi cha Ohm 220. Unganisha cathode (mguu mfupi) moja kwa moja kwenye reli ya ardhi kwenye bodi ya mkate. Hakikisha miunganisho yote ni thabiti na angalia mara mbili kwa nyaya zozote zisizo imara.
Kusanidi Dashibodi
-
Tembelea Adafruit IO, kisha bonyeza Anza Bure kuunda akaunti ya bure.

-
Jaza fomu kuunda akaunti.

-
Baada ya kuunda akaunti ya Adafruit, utahitaji kufungua tena Adafruit IO. Bonyeza Dashboards, kisha bonyeza Dashboard Mpya.

-
Unda Dashboard Mpya.

-
Ingia kwenye Dashboard mpya iliyoundwa na uunde kizuizi kipya.

-
Unda kizuizi 1 cha Toggle.

-
Ifuatayo, utahitaji kuunda feed mpya hapa. Toggle hii itatumika kudhibiti LED, na tutaiita feed hii “LED”.

-
Angalia feed ya LED, kisha endelea hatua inayofuata.

-
Kamilisha mipangilio ya kizuizi (hasa Kichwa cha Kizuizi, Maandishi ya Washa, na Maandishi ya Zima), kisha bonyeza kitufe cha Unda kizuizi chini kulia kumaliza.

-
Pia tunahitaji kuunda Vizuizi vya Maandishi viwili vinavyofuata. Vitatumika kuonyesha joto na unyevu. Kwa hivyo, unda feed mbili zinazoitwa temperature na humidity.

-
Baada ya kuunda, Dashboard yako inapaswa kuonekana kama hii:

-
Unaweza kurekebisha mpangilio kwa kutumia chaguo la Hariri Mpangilio kwenye Dashboard.

-
Bonyeza API KEY, na utaona jina lako la mtumiaji na API KEY vikionyeshwa. Andika hizi kwa sababu utazihitaji kwa msimbo wako.

Mifano ya Msimbo na Maelekezo
Msimbo huanza kwa kujumuisha maktaba muhimu, kuweka vitambulisho vya Wi-Fi, na kufafanua vigezo vya MQTT. Vitambulisho muhimu kama AIO_USERNAME na AIO_KEY vinatumika kuthibitisha na huduma ya Adafruit IO.
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"
Mistari hii inafafanua jina lako la mtumiaji na ufunguo wa Adafruit IO, ambavyo ni muhimu kwa kuunganisha kwenye broker ya MQTT. Hakikisha maadili haya ni sahihi ili kuanzisha muunganisho wenye mafanikio.
Katika kazi ya setup(), muunganisho wa Wi-Fi unaanzishwa, na mteja wa MQTT anasanidiwa na cheti cha mizizi cha CA kwa mawasiliano salama.
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);
Msimbo huu unaunganisha ESP32 kwenye mtandao wa Wi-Fi uliobainishwa na kuweka CA ya mizizi kwa muunganisho salama wa MQTT. Kushughulikia muunganisho huu kwa usahihi ni muhimu kwa usambazaji wa data wa kuaminika.
Hatimaye, kazi ya loop() inasimamia muunganisho wa MQTT na kuchapisha usomaji wa joto na unyevu kwa vipindi vya kawaida.
mqtt.processPackets(5000);
Mstari huu unaruhusu ESP32 kuchakata ujumbe unaoingia kwa mada zilizosajiliwa, kuhakikisha kifaa kinabaki kuitikia amri zinazotumwa kutoka kwenye kiolesura cha wavuti.
Kwa msimbo kamili, tafadhali rejelea programu nzima iliyopakiwa chini ya makala hii.
Maonyesho / Nini cha Kutarajia
Baada ya kusanidiwa kwa mafanikio, unapaswa kuona masasisho ya wakati halisi ya joto na unyevu kwenye dashibodi yako ya Adafruit IO. Unaweza pia kuwasha na kuzima LED kupitia kiolesura cha wavuti. Ikiwa LED haijibu kama inavyotarajiwa, angalia wiring yako na uhakikishe kwamba majina ya mada ya MQTT yanalingana na yale yaliyofafanuliwa kwenye msimbo.
Fahamu kwamba hitilafu fulani za muunganisho wa MQTT zinaweza kutokea kwa sababu ya vyeti vilivyokwisha muda wake. Hakikisha una cheti cha mizizi cha CA cha hivi karibuni kwenye msimbo wako ili kuepuka matatizo haya (katika video saa 15:30).
Vidokezo vya Muda wa Video
- 00:00 Mwanzo
- 1:50 Utangulizi wa mradi
- 3:16 MQTT ni nini
- 6:36 Usanidi wa Adafruit IO
- 11:13 Wiring
- 13:38 Msimbo wa Arduino umeelezwa
- 22:03 Kuchagua bodi ya ESP32 na bandari ya COM
- 23:44 Maonyesho ya mradi
- 27:05 Kusasisha dashibodi
/***********************************************************************
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
Resurser och referenser
-
Dokumentation
Filer📁
Inga filer tillgängliga.