ESP32 Оқулық 48/55 - Қашықтан температураны бақылау және MQTT арқылы LED басқару | SunFounder ESP32 IoT жинағы
Бұл оқулықта біз SunFounder компаниясының ESP32 кеңейту платасымен бірге ESP32 модулін Adafruit IO платформасы арқылы температура мен ылғалдылықты қашықтан бақылау үшін қалай пайдалану керектігін қарастырамыз. Сонымен қатар, веб-интерфейс арқылы жарықдиодты басқару функциясын жүзеге асырамыз. Осы жобаның соңында сіз браузеріңізден нақты уақыттағы температура мен ылғалдылық деректерін көре аласыз және жарықдиодты қосу/өшіру мүмкіндігіне ие боласыз.
Бұл жоба ESP32 мен Adafruit IO қызметі арасында тиімді байланыс үшін MQTT протоколын пайдаланады. MQTT жеңіл және IoT қолданбаларына өте ыңғайлы, бұл бізге сенсор деректерін оңай жариялауға және жарықдиодты басқаруға арналған пәрмендерге жазылуға мүмкіндік береді. Код пен сымдарды қосу туралы қосымша түсініктеме алу үшін осы оқулыққа қоса берілген бейнені міндетті түрде қараңыз (бейнеде 00:00).
Аппараттық құралдар түсіндірмесі
Бұл жобаның негізгі компоненттеріне ESP32 микроконтроллері, DHT11 температура мен ылғалдылық сенсоры және жарықдиод кіреді. ESP32 - кіріктірілген Wi-Fi және Bluetooth мүмкіндіктері бар қуатты микроконтроллер, бұл оны IoT жобалары үшін тамаша таңдау етеді. Ол бірнеше тапсырманы орындай алады және интернетке үздіксіз қосыла алады.
DHT11 сенсоры температура мен ылғалдылықты өлшеуге жауапты. Ол ESP32 арқылы оқылатын цифрлық сигналдарды шығарады. Жарықдиод индикатор ретінде қызмет етеді және MQTT протоколының құрылғыларды интернет арқылы басқару тиімділігін көрсету үшін қашықтан басқарыла алады.
Деректер парағының мәліметтері
| Өндіруші | Adafruit |
|---|---|
| Бөлшек нөмірі | DHT11 |
| Логика/IO кернеуі | 3.3 В |
| Қоректендіру кернеуі | 3.3 В |
| Шығыс тогы (арнаға) | 20 мА |
| Ең жоғары ток (арнаға) | 50 мА |
| PWM жиілігі бойынша нұсқаулар | Жоқ |
| Кіріс логикалық шектері | 0.3 В (төмен), 0.7 В (жоғары) |
| Кернеудің төмендеуі / RDS(on) / қанығу | Жоқ |
| Жылулық шектеулер | 0-ден 50 °C-қа дейін |
| Қаптама | 3 істікшелі |
| Ескертулер / нұсқалар | Жоғары дәлдік үшін DHT22 пайдаланыңыз. |
- Зақымдануды болдырмау үшін сымдардың дұрыс қосылғанын қамтамасыз етіңіз.
- Токты шектеу үшін жарықдиодпен 220 Ом резисторды пайдаланыңыз.
- Қажет болса, DHT11 деректер істікшесі үшін жоғары тарту резисторларын пайдаланыңыз.
- Wi-Fi тіркелгі деректерін регистрге сезімталдыққа тексеріңіз.
- Қосылым ақауларын жою үшін сериялық шығысты бақылаңыз.
- Қақтығыстарды болдырмау үшін MQTT тақырыптарын бірегей етіп сақтаңыз.
- Сенсор көрсеткіштерінің жарамды екеніне көз жеткізу үшін оларды тексеріңіз.
- DHT11 жауап беру уақытына абай болыңыз; көрсеткіштердің тұрақтануы уақыт алуы мүмкін.
LED = жарықдиодты басқару; temperature = температура деректерін жариялау; humidity = ылғалдылық деректерін жариялау.
Сымдарды қосу нұсқаулары
Компоненттерді қосу үшін алдымен DHT11 сенсорын қосыңыз. DHT11 сол жақ істікшесін қызыл сым арқылы макет тақтасындағы 3.3В қоректендіру шинасына қосыңыз. DHT11 ортаңғы істікшесі сары сым арқылы ESP32-дегі 13 істікшеге қосылуы керек. Соңында, DHT11 оң жақ істікшесін көк сым арқылы жер шинасына қосыңыз.
Әрі қарай, жарықдиод үшін анодты (ұзын аяқ) 220 Ом резистор арқылы ESP32-дегі 15 істікшеге қосыңыз. Катодты (қысқа аяқ) тікелей макет тақтасындағы жер шинасына қосыңыз. Барлық қосылымдардың сенімді екеніне көз жеткізіңіз және бос сымдардың жоқтығын қайта тексеріңіз.
Басқару панелін орнату
-
Adafruit IO сайтына кіріңіз, содан кейін тегін аккаунт жасау үшін Start for free түймесін басыңыз.

-
Аккаунт жасау үшін форманы толтырыңыз.

-
Adafruit аккаунтын жасағаннан кейін Adafruit IO-ды қайта ашу қажет. Dashboards бөлімін басыңыз, содан кейін New Dashboard түймесін басыңыз.

-
New Dashboard жасаңыз.

-
Жаңадан жасалған Dashboard ішіне кіріп, жаңа блок жасаңыз.

-
1 Toggle блогын жасаңыз.

-
Әрі қарай, осы жерде жаңа feed жасау қажет. Бұл toggle LED-ді басқару үшін қолданылады және біз бұл feed-ті “LED” деп атаймыз.

-
LED feed-ін белгілеп, келесі қадамға өтіңіз.

-
Блок параметрлерін толтырыңыз (негізінен Block Title, On Text және Off Text), содан кейін аяқтау үшін төменгі оң жақтағы Create block түймесін басыңыз.

-
Сондай-ақ, бізге екі Text Block жасау қажет. Олар температура мен ылғалдылықты көрсету үшін қолданылады. Сондықтан temperature және humidity деп аталатын екі feed жасаңыз.

-
Жасағаннан кейін Dashboard-ыңыз осыған ұқсас болуы керек:

-
Dashboard-тағы Edit Layout опциясын қолданып, орналасуды реттей аласыз.

-
API KEY бөлімін басыңыз, сонда пайдаланушы атыңыз бен API KEY көрсетіледі. Оларды жазып алыңыз, себебі код үшін қажет болады.

Код мысалдары және түсіндірме
Код қажетті кітапханаларды қосудан, Wi-Fi тіркелгі деректерін орнатудан және MQTT параметрлерін анықтаудан басталады. AIO_USERNAME және AIO_KEY сияқты негізгі идентификаторлар Adafruit IO қызметімен аутентификациялау үшін қолданылады.
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"
Бұл жолдар Adafruit IO пайдаланушы атыңыз бен кілтіңізді анықтайды, олар MQTT брокеріне қосылу үшін маңызды. Сәтті қосылу үшін бұл мәндердің дәл екеніне көз жеткізіңіз.
setup() функциясында Wi-Fi қосылымы инициализацияланады және MQTT клиенті қауіпсіз байланыс үшін root CA сертификатымен орнатылады.
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);
Бұл код ESP32-ні көрсетілген Wi-Fi желісіне қосады және қауіпсіз MQTT қосылымдары үшін root CA орнатады. Бұл қосылымдарды дұрыс басқару сенімді деректерді жіберу үшін өте маңызды.
Соңында, loop() функциясы MQTT қосылымын басқарады және температура мен ылғалдылық көрсеткіштерін тұрақты аралықтарда жариялайды.
mqtt.processPackets(5000);
Бұл жол ESP32-ге жазылған тақырыптар үшін кіріс хабарламаларды өңдеуге мүмкіндік береді, бұл құрылғының веб-интерфейстен жіберілген пәрмендерге жауап беруін қамтамасыз етеді.
Толық код үшін мақаланың астында жүктелген толық бағдарламаны қараңыз.
Демонстрация / Не күтуге болады
Сәтті орнатудан кейін Adafruit IO бақылау тақтасында температура мен ылғалдылықтың нақты уақыттағы жаңартуларын көруіңіз керек. Сондай-ақ веб-интерфейс арқылы жарықдиодты қосуға және өшіруге болады. Егер жарықдиод күтілгендей жауап бермесе, қосылымдарды тексеріңіз және MQTT тақырып атаулары кодта анықталғандармен сәйкес келетініне көз жеткізіңіз.
Мерзімі өткен сертификаттарға байланысты кейбір MQTT қосылым қателері орын алуы мүмкін екенін ескеріңіз. Осы мәселелерді болдырмау үшін кодыңызда ең соңғы түбірлік CA сертификатының болуын қамтамасыз етіңіз (бейнеде 15:30-да).
Бейне уақыт белгілері
- 00:00 Бастау
- 1:50 Жобамен таныстыру
- 3:16 MQTT дегеніміз не
- 6:36 Adafruit IO орнату
- 11:13 Қосылымдар
- 13:38 Arduino коды түсіндірілді
- 22:03 ESP32 платасын және COM портын таңдау
- 23:44 Жобаны көрсету
- 27:05 Бақылау тақтасын жаңарту
/***********************************************************************
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
Ресурстар мен сілтемелер
-
Құжаттама
Файлдар📁
Файлдар жоқ.