ESP32 ቱቶሪያል 48/55 - የርቀት ሙቀት መከታተያ እና የLED መቆጣጠሪያ MQTT | SunFounder የESP32 IoT ኪት
በዚህ ትምህርት ውስጥ፣ የESP32 ሞጁሉን ከSunFounder የESP32 ማስፋፊያ ሰሌዳ ጋር በመጠቀም የሙቀት እና የእርጥበት መጠንን በርቀት ለመቆጣጠር የAdafruit IO መድረክን እንዴት መጠቀም እንደምንችል እንመረምራለን። በተጨማሪም፣ በድር በይነገጽ በኩል LED ን የመቆጣጠር ተግባርን እንተገብራለን። በዚህ ፕሮጀክት መጨረሻ፣ የእውነተኛ ጊዜ የሙቀት እና የእርጥበት መረጃን ማየት እና ከአሳሽዎ ውስጥ LED ን ማብራት እና ማጥፋት ይችላሉ።
ይህ ፕሮጀክት በESP32 እና በAdafruit IO አገልግሎት መካከል ቀልጣፋ ግንኙነት ለመፍጠር የMQTT ፕሮቶኮልን ይጠቀማል። MQTT ቀላል እና ለIoT መተግበሪያዎች ተስማሚ ነው፣ ይህም የሴንሰር መረጃን በቀላሉ እንድናተምት እና ለLED ቁጥጥር ትዕዛዞችን እንድንመዘገብ ያስችለናል። ስለ ኮዱ እና ስለ ሽቦ አያያዥነት ተጨማሪ ማብራሪያ ለማግኘት፣ ከዚህ ትምህርት ጋር የተያያዘውን ቪዲዮ መመልከትዎን ያረጋግጡ (በቪዲዮው በ00:00)።
ሃርድዌር ተብራርቷል
ለዚህ ፕሮጀክት ዋና ዋና ክፍሎች የESP32 ማይክሮ መቆጣጠሪያ፣ የDHT11 የሙቀት እና የእርጥበት ሴንሰር እና LED ን ያካትታሉ። ESP32 ኃይለኛ ማይክሮ መቆጣጠሪያ ሲሆን አብሮ የተሰራ የWi-Fi እና የብሉቱዝ አቅሞች ያሉት ሲሆን፣ ለIoT ፕሮጀክቶች ተስማሚ ምርጫ ያደርገዋል። ብዙ ተግባራትን መቆጣጠር እና ከበይነመረቡ ጋር ያለምንም ችግር መገናኘት ይችላል።
የDHT11 ሴንሰር የሙቀት እና የእርጥበት መጠንን የመለካት ኃላፊነት አለው። በESP32 ሊነበቡ የሚችሉ ዲጂታል ምልክቶችን ያወጣል። LED እንደ አመላካች ሆኖ ያገለግላል እና የMQTT ፕሮቶኮልን በበይነመረብ ላይ መሣሪያዎችን በማስተዳደር ረገድ ያለውን ውጤታማነት ለማሳየት በርቀት መቆጣጠር ይቻላል።
የዳታሼት ዝርዝሮች
| አምራች | Adafruit |
|---|---|
| የክፍል ቁጥር | DHT11 |
| የሎጂክ/IO ቮልቴጅ | 3.3 ቪ |
| የአቅርቦት ቮልቴጅ | 3.3 ቪ |
| የውጤት ጅረት (በአንድ ቻናል) | 20 ሚኤ |
| ከፍተኛ ጅረት (በአንድ ቻናል) | 50 ሚኤ |
| የPWM ድግግሞሽ መመሪያ | የለም |
| የግቤት ሎጂክ ገደቦች | 0.3 ቪ (ዝቅተኛ)፣ 0.7 ቪ (ከፍተኛ) |
| የቮልቴጅ ጠብታ / RDS(on) / ሳቹሬሽን | የለም |
| የሙቀት ገደቦች | 0 እስከ 50 °C |
| ፓኬጅ | 3-ፒን |
| ማስታወሻዎች / ልዩነቶች | ለከፍተኛ ትክክለኛነት DHT22 ይጠቀሙ። |
- ጉዳትን ለመከላከል ትክክለኛ ሽቦ ማያያዝን ያረጋግጡ።
- ለጅረት መገደብ ከLED ጋር 220 ኦም ተቃዋሚ ይጠቀሙ።
- አስፈላጊ ከሆነ ለDHT11 የውሂብ ፒን የመጎተት ተቃዋሚዎችን ይጠቀሙ።
- የWi-Fi ምስክርነቶችን ለትልቅ/ትንሽ ፊደል ልዩነት ያረጋግጡ።
- የግንኙነት ችግሮችን ለማረም የተከታታይ ውጤትን ይቆጣጠሩ።
- ግጭቶችን ለማስወገድ የMQTT ርዕሶችን ልዩ ያድርጉ።
- የሴንሰር ንባቦች ትክክለኛ መሆናቸውን ለማረጋገጥ ይሞክሩ።
- የDHT11 ምላሽ ጊዜን ይጠንቀቁ፤ ንባቦችን ለማረጋጋት ጊዜ ሊወስድ ይችላል።
LED = LED ን ይቆጣጠሩ፤ temperature = የሙቀት መረጃን ያተምቱ፤ humidity = የእርጥበት መረጃን ያተምቱ።
የሽቦ ማያያዝ መመሪያዎች
ክፍሎቹን ለማያያዝ፣ በመጀመሪያ የDHT11 ሴንሰርን በማገናኘት ይጀምሩ። የDHT11 የግራ ፒን በቀይ ሽቦ በመጠቀም በብሬድቦርዱ ላይ ካለው የ3.3V የኃይል መስመር ጋር ያገናኙ። የDHT11 መካከለኛ ፒን በቢጫ ሽቦ በመጠቀም በESP32 ላይ ካለው ፒን 13 ጋር መገናኘት አለበት። በመጨረሻም፣ የDHT11 የቀኝ ፒን በሰማያዊ ሽቦ በመጠቀም ከመሬት መስመር ጋር ያገናኙ።
በመቀጠል፣ ለLED፣ አኖዱን (ረጅሙ እግር) በ220 ኦም ተቃዋሚ በኩል በESP32 ፒን 15 ላይ ያገናኙ። ካቶዱን (አጭሩ እግር) በቀጥታ በብሬድቦርዱ ላይ ካለው የመሬት መስመር ጋር ያገናኙ። ሁሉም ግንኙነቶች ደህንነታቸው የተጠበቀ መሆናቸውን ያረጋግጡ እና ለማንኛውም የላላ ሽቦዎች ሁለት ጊዜ ያረጋግጡ።
ዳሽቦርዱን ማዋቀር
-
ወደ Adafruit IO ይሂዱ፣ ከዚያም ነፃ መለያ ለመፍጠር Start for free ላይ ጠቅ ያድርጉ።

-
መለያ ለመፍጠር ቅጹን ይሙሉ።

-
የAdafruit መለያ ከፈጠሩ በኋላ፣ Adafruit IO ን እንደገና መክፈት ያስፈልግዎታል። በDashboards ላይ ጠቅ ያድርጉ፣ ከዚያም በNew Dashboard ላይ ጠቅ ያድርጉ።

-
New Dashboard ይፍጠሩ።

-
አዲስ ወደ ተፈጠረው Dashboard ይግቡ እና አዲስ ብሎክ ይፍጠሩ።

-
1 Toggle ብሎክ ይፍጠሩ።

-
በመቀጠል፣ እዚህ አዲስ ፊድ መፍጠር ያስፈልግዎታል። ይህ ቶግል LED ን ለመቆጣጠር ያገለግላል፣ እና ይህን ፊድ “LED” ብለን እንሰይመዋለን።

-
የLED ፊድን ያረጋግጡ፣ ከዚያም ወደ ቀጣዩ ደረጃ ይሂዱ።

-
የብሎክ ቅንብሮችን ያጠናቅቁ (በዋናነት Block Title፣ On Text እና Off Text)፣ ከዚያም ለመጨረስ ከታች በስተቀኝ ባለው Create block ቁልፍ ላይ ጠቅ ያድርጉ።

-
እንዲሁም በመቀጠል ሁለት Text Blocks መፍጠር ያስፈልገናል። እነሱ የሙቀት እና የእርጥበት መጠንን ለማሳየት ያገለግላሉ። ስለዚህ፣ temperature እና humidity የተባሉ ሁለት ፊድዎችን ይፍጠሩ።

-
ከፈጠሩ በኋላ፣ 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 ደንበኛው ለአስተማማኝ ግንኙነት ከስር የCA ሰርቲፊኬት ጋር ይዘጋጃል።
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);
ይህ ኮድ ESP32 ን ከተገለጸው የWi-Fi አውታረ መረብ ጋር ያገናኛል እና ለአስተማማኝ MQTT ግንኙነቶች የስር CA ያዘጋጃል። እነዚህን ግንኙነቶች በአግባቡ መያዝ ለአስተማማኝ የመረጃ ስርጭት ወሳኝ ነው።
በመጨረሻም፣ የloop() ተግባር የMQTT ግንኙነትን ያስተዳድራል እና የሙቀት እና የእርጥበት ንባቦችን በመደበኛ ክፍተቶች ያትማል።
mqtt.processPackets(5000);
ይህ መስመር ESP32 ለተመዘገቡ ርዕሶች የሚመጡ መልዕክቶችን እንዲያስኬድ ያስችለዋል፣ ይህም መሣሪያው ከድር በይነገጽ ለተላኩ ትዕዛዞች ምላሽ የሚሰጥ መሆኑን ያረጋግጣል።
ለተሟላ ኮድ፣ እባክዎ ከጽሑፉ በታች የተጫነውን ሙሉ ፕሮግራም ይመልከቱ።
ማሳያ / ምን እንደሚጠበቅ
በተሳካ ሁኔታ ከተዋቀረ በኋላ፣ በአዳፍሩት አይኦ ዳሽቦርድዎ ላይ የሙቀት እና የእርጥበት መጠን የቅጽበት ማሻሻያዎችን ማየት ይኖርብዎታል። እንዲሁም ኤልኢዲውን በድር በይነገጽ በኩል ማብራት እና ማጥፋት ይችላሉ። ኤልኢዲው እንደተጠበቀው ምላሽ ካልሰጠ፣ የእርስዎን ሽቦ ያረጋግጡ እና የMQTT ርዕስ ስሞች በኮዱ ውስጥ ከተገለጹት ጋር መዛመዳቸውን ያረጋግጡ።
ያስተውሉ፣ ጊዜው ያለፈባቸው የምስክር ወረቀቶች በመኖራቸው የተወሰኑ የMQTT ግንኙነት ስህተቶች ሊከሰቱ ይችላሉ። እነዚህን ችግሮች ለማስወገድ የቅርብ ጊዜውን የስር ሲኤ ሰርተፍኬት በኮድዎ ውስጥ እንዳለዎት ያረጋግጡ (በቪዲዮው 15፡30 ላይ)።
የቪዲዮ የጊዜ ማህተሞች
- 00፡00 መጀመሪያ
- 1፡50 ለፕሮጀክቱ መግቢያ
- 3፡16 MQTT ምንድን ነው
- 6፡36 የአዳፍሩት አይኦ ማዋቀር
- 11፡13 ሽቦ መገጣጠም
- 13፡38 የአርዱኖ ኮድ ተብራርቷል
- 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
ምንጮች እና ምንጮች
-
ሰነዶች
ፋይሎች📁
አንድ ፋይል የለም።