Koyarwar ESP32 48/55 - Sa ido kan zafin jiki daga nesa da sarrafa LED MQTT | Kunshin SunFounder na ESP32 IoT
A cikin wannan koyawa, za mu bincika yadda za a yi amfani da module na ESP32 tare da allon karin aiki na SunFounder na ESP32 don sa ido kan zafin jiki da zafi daga nesa ta amfani da dandalin Adafruit IO. Bugu da ƙari, za mu aiwatar da aikin sarrafa LED ta hanyar yanar gizo. A ƙarshen wannan aikin, za ku iya ganin bayanan zafin jiki da zafi na ainihin lokaci da kuma kunna/kashe LED daga burauzar ku.
Wannan aikin yana amfani da ka'idar MQTT don sadarwa mai inganci tsakanin ESP32 da sabis na Adafruit IO. MQTT abu ne mai sauƙi kuma ya dace da aikace-aikacen IoT, yana ba mu damar buga bayanan firikwensin cikin sauƙi da kuma biyan umarni don sarrafa LED. Don ƙarin bayani game da lambar da haɗin waya, tabbatar da duba bidiyon da ke tare da wannan koyawa (a cikin bidiyo a 00:00).
Bayanin Kayan Aiki
Babban abubuwan da ake amfani da su a wannan aikin sun haɗa da microcontroller na ESP32, firikwensin zafin jiki da zafi na DHT11, da LED. ESP32 microcontroller ne mai ƙarfi wanda ke da damar Wi-Fi da Bluetooth a cikinsa, yana sa ya zama zaɓi mai kyau don ayyukan IoT. Yana iya sarrafa ayyuka da yawa kuma ya haɗa da intanet cikin sauƙi.
Firikwensin DHT11 ne ke auna zafin jiki da zafi. Yana fitar da sigina na dijital waɗanda ESP32 zai iya karantawa. LED yana aiki azaman alama kuma ana iya sarrafa shi daga nesa don nuna ingancin ka'idar MQTT wajen sarrafa na'urori ta intanet.
Bayanan Takardar
| Mai Ƙirƙira | Adafruit |
|---|---|
| Lambar sashi | DHT11 |
| Wutar Logic/IO | 3.3 V |
| Wutar samarwa | 3.3 V |
| Fitar wutar (kowane tashar) | 20 mA |
| Kololuwar wutar (kowane tashar) | 50 mA |
| Jagorar mitar PWM | Babu |
| Matakan shigar da dabaru | 0.3 V (ƙasa), 0.7 V (sama) |
| Rage wutar / RDS(on) / cikar | Babu |
| Iyakokin zafi | 0 zuwa 50 °C |
| Kunshin | 3-ƙafa |
| Bayanan kula / bambance-bambance | Yi amfani da DHT22 don ingantacciyar daidaito. |
- Tabbatar da daidaitaccen haɗin waya don hana lalacewa.
- Yi amfani da resistor na 220 Ohm tare da LED don iyakance wutar.
- Yi amfani da resistors na jawo sama don ƙafar bayanan DHT11 idan ya cancanta.
- Duba bayanan shiga Wi-Fi don la'akari da manyan/ƙananan haruffa.
- Saka idanu kan fitar serial don gyara matsalolin haɗin.
- Kiyaye taken MQTT na musamman don guje wa rikice-rikice.
- Gwada karatun firikwensin don tabbatar da ingancinsu.
- Yi hattara da lokacin amsawar DHT11; yana iya ɗaukar lokaci don daidaita karatu.
LED = sarrafa LED; temperature = buga bayanan zafin jiki; humidity = buga bayanan zafi.
Umarnin Haɗin Waya
Don haɗa abubuwan, fara da haɗa firikwensin DHT11. Haɗa ƙafar hagu na DHT11 zuwa layin wutar 3.3V akan allon burodi ta amfani da waya ja. Ƙafar tsakiya ta DHT11 yakamata a haɗa zuwa ƙafa 13 akan ESP32 ta amfani da waya rawaya. A ƙarshe, haɗa ƙafar dama ta DHT11 zuwa layin ƙasa ta amfani da waya shuɗi.
Na gaba, don LED, haɗa anode (ƙafa mai tsawo) zuwa ƙafa 15 na ESP32 ta hanyar resistor na 220 Ohm. Haɗa cathode (ƙafa mai gajere) kai tsaye zuwa layin ƙasa akan allon burodi. Tabbatar cewa duk haɗin suna da ƙarfi kuma a sake duba don kowane waya mara kyau.
Ƙirƙirar Dashboard
-
Ziyarci Adafruit IO, sannan danna kan Fara kyauta don ƙirƙirar asusun kyauta.

-
Cika fom ɗin don ƙirƙirar asusu.

-
Bayan ƙirƙirar asusun Adafruit, kana buƙatar sake buɗe Adafruit io. Danna kan Dashboards, sannan danna kan New Dashboard.

-
Ƙirƙiri New Dashboard.

-
Shiga cikin sabon Dashboard ɗin da aka ƙirƙira kuma ƙirƙiri sabon block.

-
Ƙirƙiri block ɗin Toggle guda 1.

-
Na gaba, kana buƙatar ƙirƙirar sabon feed anan. Wannan toggle ɗin za a yi amfani da shi don sarrafa LED, kuma za mu sa wa wannan feed suna “LED”.

-
Duba feed ɗin LED, sannan ka matsa zuwa mataki na gaba.

-
Cika saitunan block (musamman Block Title, On Text, da Off Text), sannan danna kan maɓallin Create block a ƙasan dama don gamawa.

-
Muna kuma buƙatar ƙirƙirar Text Blocks guda biyu na gaba. Za a yi amfani da su don nuna zafin jiki da ɗanshi. Don haka, ƙirƙiri feeds guda biyu masu suna temperature da humidity.

-
Bayan ƙirƙira, Dashboard ɗinka ya kamata ya yi kama da wannan:

-
Kana iya daidaita tsarin ta amfani da zaɓin Edit Layout akan Dashboard.

-
Danna kan API KEY, kuma za ka ga sunan mai amfani da API KEY ɗinka an nuna su. Rubuta waɗannan domin za ka buƙace su don lambar ka.

Misalan Lamba & Jagora
Lambar ta fara da haɗa ɗakunan karatu da ake buƙata, saita bayanan Wi-Fi, da ayyana sigogin MQTT. Ana amfani da masu gano maɓalli kamar AIO_USERNAME da AIO_KEY don tabbatar da asali tare da sabis ɗin Adafruit IO.
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"
Waɗannan layukan suna ayyana sunan mai amfani da maɓallin Adafruit IO naka, waɗanda suke da muhimmanci don haɗawa da MQTT broker. Tabbatar waɗannan ƙimar suna daidai don kafa haɗin gwiwa mai nasara.
A cikin aikin setup(), an fara haɗin Wi-Fi, kuma an saita abokin ciniki na MQTT tare da takardar shaidar CA tushe don sadarwa mai aminci.
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);
Wannan lambar tana haɗa ESP32 zuwa hanyar sadarwar Wi-Fi da aka ƙayyade kuma tana saita CA tushe don haɗin MQTT mai aminci. Sarrafa waɗannan haɗin yana da mahimmanci don isar da bayanai mai dogaro.
A ƙarshe, aikin loop() yana sarrafa haɗin MQTT kuma yana buga karatun zafin jiki da ɗanshi a lokuta na yau da kullun.
mqtt.processPackets(5000);
Wannan layin yana ba da damar ESP32 don sarrafa saƙonni masu shigowa don batutuwan da aka biya, yana tabbatar da cewa na'urar tana amsa umarni da aka aiko daga muƙalar yanar gizo.
Don cikakken lambar, da fatan za a koma ga cikakken shirin da aka ɗora a ƙasan labarin.
Zanga-zanga / Abin da za ka Yi Tsammani
Bayan an samu nasarar saitin, ya kamata ka ga sabunta bayanai na zafin jiki da danshi a kan dashboard ɗinka na Adafruit IO. Kana kuma iya kunna da kashe LED ɗin ta hanyar yanar gizo. Idan LED ɗin bai amsa ba kamar yadda ake tsammani, duba wayoyinka kuma ka tabbatar cewa sunayen jigogin MQTT sun dace da waɗanda aka ayyana a cikin lambar.
Ka lura cewa wasu kurakuran haɗin MQTT na iya faruwa saboda takaddun shaida da suka ƙare. Ka tabbatar kana da sabon takardar shaida ta CA tushe a cikin lambarka don guje wa waɗannan matsalolin (a cikin bidiyo a 15:30).
Lokutan Bidiyo
- 00:00 Fara
- 1:50 Gabatarwa ga aikin
- 3:16 Menene MQTT
- 6:36 Saitin Adafruit IO
- 11:13 Wayoyi
- 13:38 Bayanin lambar Arduino
- 22:03 Zaɓin allon ESP32 da tashar COM
- 23:44 Nunin aikin
- 27:05 Sabunta dashboard
/***********************************************************************
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
Albarkatun da kuma shafukan da za a duba
-
Takardu
Fayiloli📁
Babu fayiloli da ake da su.