ESP32 Eğitimi 48/55 - Uzaktan Sıcaklık İzleme ve LED Kontrolü MQTT | SunFounder'ın ESP32 IoT Kiti
Bu eğitimde, ESP32 modülünü SunFounder'ın ESP32 genişletme kartıyla birlikte kullanarak Adafruit IO platformu üzerinden sıcaklık ve nemi uzaktan nasıl izleyeceğimizi keşfedeceğiz. Ayrıca, bir web arayüzü üzerinden LED kontrolü işlevini de uygulayacağız. Bu projenin sonunda, tarayıcınızdan gerçek zamanlı sıcaklık ve nem verilerini görüntüleyebilecek ve bir LED'i açıp kapatabileceksiniz.
Bu proje, ESP32 ile Adafruit IO hizmeti arasında verimli iletişim için MQTT protokolünü kullanır. MQTT hafiftir ve IoT uygulamaları için çok uygundur; sensör verilerini kolayca yayınlamamıza ve LED kontrolü için komutlara abone olmamıza olanak tanır. Kod ve bağlantıların daha iyi anlaşılması için bu eğitime eşlik eden videoyu mutlaka izleyin (videoda 00:00'da).
Donanım Açıklaması
Bu projenin ana bileşenleri ESP32 mikrodenetleyicisi, bir DHT11 sıcaklık ve nem sensörü ve bir LED'dir. ESP32, yerleşik Wi-Fi ve Bluetooth özelliklerine sahip güçlü bir mikrodenetleyicidir ve IoT projeleri için ideal bir seçimdir. Birden fazla görevi yönetebilir ve internete sorunsuz bir şekilde bağlanabilir.
DHT11 sensörü, sıcaklık ve nemi ölçmekten sorumludur. ESP32 tarafından okunabilen dijital sinyaller çıkarır. LED bir gösterge görevi görür ve MQTT protokolünün cihazları internet üzerinden yönetmedeki etkinliğini göstermek için uzaktan kontrol edilebilir.
Veri Sayfası Ayrıntıları
| Üretici | Adafruit |
|---|---|
| Parça numarası | DHT11 |
| Mantık/IO voltajı | 3,3 V |
| Besleme voltajı | 3,3 V |
| Çıkış akımı (kanal başına) | 20 mA |
| Tepe akımı (kanal başına) | 50 mA |
| PWM frekansı kılavuzu | Yok |
| Giriş mantık eşikleri | 0,3 V (düşük), 0,7 V (yüksek) |
| Gerilim düşümü / RDS(on) / doyum | Yok |
| Termal sınırlar | 0 ila 50 °C |
| Paket | 3 pinli |
| Notlar / varyantlar | Daha yüksek doğruluk için DHT22 kullanın. |
- Hasarı önlemek için doğru bağlantı yapıldığından emin olun.
- Akım sınırlaması için LED ile 220 Ohm direnç kullanın.
- Gerekirse DHT11 veri pini için pull-up dirençleri kullanın.
- Wi-Fi kimlik bilgilerini büyük/küçük harf duyarlılığı açısından kontrol edin.
- Bağlantı sorunlarını hata ayıklamak için seri çıktıyı izleyin.
- Çakışmaları önlemek için MQTT konularını benzersiz tutun.
- Geçerli olduklarından emin olmak için sensör okumalarını test edin.
- DHT11'in yanıt süresine dikkat edin; okumaların stabilize olması zaman alabilir.
LED = LED'i kontrol eder; temperature = sıcaklık verilerini yayınlar; humidity = nem verilerini yayınlar.
Bağlantı Talimatları
Bileşenleri bağlamak için DHT11 sensörünü bağlayarak başlayın. DHT11'in sol pinini kırmızı bir kablo kullanarak breadboard üzerindeki 3,3V güç rayına bağlayın. DHT11'in orta pini, sarı bir kablo kullanarak ESP32 üzerindeki 13 numaralı pine bağlanmalıdır. Son olarak, DHT11'in sağ pinini mavi bir kablo kullanarak toprak rayına bağlayın.
Ardından, LED için anodu (uzun bacak) 220 Ohm direnç üzerinden ESP32'nin 15 numaralı pinine bağlayın. Katodu (kısa bacak) doğrudan breadboard üzerindeki toprak rayına bağlayın. Tüm bağlantıların güvenli olduğundan emin olun ve gevşek kablolar için çift kontrol yapın.
Kontrol Panelini Kurma
-
Adafruit IO adresini ziyaret edin, ardından ücretsiz bir hesap oluşturmak için Start for free seçeneğine tıklayın.

-
Hesap oluşturmak için formu doldurun.

-
Bir Adafruit hesabı oluşturduktan sonra Adafruit IO'yu yeniden açmanız gerekecek. Dashboards seçeneğine tıklayın, ardından New Dashboard seçeneğine tıklayın.

-
Bir New Dashboard oluşturun.

-
Yeni oluşturulan Dashboard alanına girin ve yeni bir blok oluşturun.

-
1 adet Toggle bloğu oluşturun.

-
Ardından, burada yeni bir feed oluşturmanız gerekecek. Bu toggle, LED'i kontrol etmek için kullanılacak ve bu feed'e “LED” adını vereceğiz.

-
LED feed'ini işaretleyin, ardından bir sonraki adıma geçin.

-
Blok ayarlarını tamamlayın (özellikle Block Title, On Text ve Off Text), ardından bitirmek için sağ alttaki Create block düğmesine tıklayın.

-
Ayrıca iki Text Block oluşturmamız gerekiyor. Bunlar sıcaklık ve nemi görüntülemek için kullanılacak. Bu nedenle, temperature ve humidity adında iki feed oluşturun.

-
Oluşturma işleminden sonra, Dashboard'unuz şuna benzer görünmelidir:

-
Dashboard üzerindeki Edit Layout seçeneğini kullanarak düzeni ayarlayabilirsiniz.

-
API KEY seçeneğine tıklayın; kullanıcı adınızı ve API KEY değerinizi göreceksiniz. Bunları not edin, çünkü kodunuz için bunlara ihtiyacınız olacak.

Kod Örnekleri ve Açıklama
Kod, gerekli kütüphaneleri dahil ederek, Wi-Fi kimlik bilgilerini ayarlayarak ve MQTT parametrelerini tanımlayarak başlar. AIO_USERNAME ve AIO_KEY gibi anahtar tanımlayıcılar, Adafruit IO hizmetiyle kimlik doğrulaması yapmak için kullanılır.
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"
Bu satırlar, MQTT broker'ına bağlanmak için gerekli olan Adafruit IO kullanıcı adınızı ve anahtarınızı tanımlar. Başarılı bir bağlantı kurmak için bu değerlerin doğru olduğundan emin olun.
setup() fonksiyonunda Wi-Fi bağlantısı başlatılır ve MQTT istemcisi, güvenli iletişim için kök CA sertifikasıyla yapılandırılır.
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);
Bu kod, ESP32'yi belirtilen Wi-Fi ağına bağlar ve güvenli MQTT bağlantıları için kök CA'yı ayarlar. Bu bağlantıların doğru şekilde yönetilmesi, güvenilir veri iletimi için kritik öneme sahiptir.
Son olarak, loop() fonksiyonu MQTT bağlantısını yönetir ve düzenli aralıklarla sıcaklık ve nem okumalarını yayınlar.
mqtt.processPackets(5000);
Bu satır, ESP32'nin abone olunan konular için gelen mesajları işlemesine olanak tanır ve cihazın web arayüzünden gönderilen komutlara yanıt vermesini sağlar.
Tam kod için lütfen makalenin altında yüklenen programın tamamına bakın.
Gösterim / Beklentiler
Kurulum başarılı olduğunda, Adafruit IO panelinizde sıcaklık ve nem değerlerinin gerçek zamanlı güncellendiğini görmelisiniz. Ayrıca web arayüzü üzerinden LED'i açıp kapatabilirsiniz. LED beklenen şekilde tepki vermezse, bağlantılarınızı kontrol edin ve MQTT konu adlarının kodda tanımlananlarla eşleştiğinden emin olun.
Süresi dolmuş sertifikalar nedeniyle bazı MQTT bağlantı hataları oluşabileceğini unutmayın. Bu sorunları önlemek için kodunuzda en güncel kök CA sertifikasının bulunduğundan emin olun (videoda 15:30'da).
Video Zaman Damgaları
- 00:00 Başlangıç
- 1:50 Projeye giriş
- 3:16 MQTT nedir
- 6:36 Adafruit IO kurulumu
- 11:13 Bağlantı şeması
- 13:38 Arduino kodu açıklaması
- 22:03 ESP32 kartı ve COM portu seçimi
- 23:44 Proje gösterimi
- 27:05 Panel güncelleme
/***********************************************************************
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
Kaynaklar ve referanslar
-
Belgelendirme
Dosyalar📁
Dosya mevcut değil.