- מה זה MQTT?
- התקנת ברוקר MQTT של Mosquitto ב- Raspberry Pi
- בדיקת מתווך היתושים של פטל
- תרשים מעגל
- קוד והסבר
MQTT הוא פרוטוקול המשמש לשליחה וקבלה של הודעות דרך האינטרנט. בעבר השתמשנו בפרוטוקול זה ב- Iot Electricity meter וב- Raspberry Pi Alexa כדי לפרסם את הנתונים באינטרנט. במדריך זה נכיר מידע נוסף על ה- MQTT ועל המונחים הקשורים אליו. כאן נשתמש ב- Raspberry Pi כמתווך מקומי של MQTT ונשלוט על נורית המחוברת ל- NodeMCU ESP12E דרך לוח המחוונים של יישומי MQTT. חיישן DHT11 מחובר גם ל- NodeMCU כך שאנו מקבלים את קריאת הטמפרטורה והלחות בלוח המחוונים של MQTT, על ידי שימוש שוב ב- Raspberry Pi כמתווך MQTT מקומי.
אז נתחיל בלשון המעטה על ה- MQTT והתנאים הקשורים אליו.
מה זה MQTT?
MQTT מייצג Message Queue Telemetry Transport שתוכנן על ידי IBM. פרוטוקול זה הוא פשוט וקל משקל המשמש לשליחה וקבלה של הודעות דרך האינטרנט והוא מיועד למכשירים המשתמשים ברוחב פס נמוך. כיום נעשה שימוש תדיר בפרוטוקול זה במכשירי ה- IoT לשליחת וקבלת נתוני החיישנים. כמו כן, במערכות אוטומציה ביתיות מבוססות IoT, ניתן להשתמש בפרוטוקול זה בקלות ללא שימוש בנתוני אינטרנט רבים.
יש מעט מונחים המשמשים לעתים קרובות ב- MQTT:
- הירשם ופרסם
- הוֹדָעָה
- נוֹשֵׂא
- סַרְסוּר
1. הירשם ופרסם: מנוי פירושו להשיג את הנתונים ממכשיר אחר, ולפרסם אמצעים לשליחת הנתונים למכשיר אחר.
כאשר device1 שולח את הנתונים ל- device2 אז הם ידועים בשם Publisher ואחר הוא מנוי ולהיפך.
2. הודעה: הודעות הן המידע שאנו שולחים ומקבלים. זה יכול להיות נתונים או כל סוג של פקודה. לדוגמא, אם אנו מפרסמים את נתוני הטמפרטורה לענן אז נתוני הטמפרטורה נקראים הודעה.
3. נושא: זו הדרך בה אתה רושם עניין להודעות נכנסות או איך אתה מציין היכן ברצונך לפרסם את ההודעה. הנושאים מיוצגים במיתרים המופרדים על ידי קו נטוי קדימה. הנתונים מתפרסמים על הנושאים באמצעות MQTT ואז מכשיר MQTT מנוי לנושא כדי לקבל את הנתונים.
4. מתווך MQTT: הדבר הזה אחראי על קבלת כל ההודעות ממוציאים לאור, סינון ההודעות ואז פרסום ההודעות למנויים המעוניינים בהן.
כאשר המתווך הזה מתארח בענן אז הוא נקרא ענן MQTT. ישנם שירותי MQTT מבוססי ענן רבים כמו Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure וכו '. ניתן להשתמש ב- MQTT גם עם ענן AWS פופולרי של אמזון, עליו הסברנו בהדרכה עם תחילת העבודה עם Amazon AWS.
אנו יכולים ליצור מתווך MQTT משלנו באמצעות ה- Raspberry Pi. זה יהיה המתווך המקומי MQTT כלומר אתה יכול לשלוח ולקבל את הנתונים ברשת המקומית שלך רק לא מכל מקום. אז כאן נתקין את ברוקר Mosquitto MQTT ב- Raspberry Pi כדי להפוך אותו למתווך MQTT מקומי ונשלח את נתוני הטמפרטורה מיישום NodeMCU ליישום לוח המחוונים MQTT. כמו כן, נשלוט על נורית המחוברת ל- NodeMCU באמצעות המתווך.
התקנת ברוקר MQTT של Mosquitto ב- Raspberry Pi
פתח את המסוף ב- Raspberry pi והקלד את הפקודות הבאות להתקנת המתווך
עדכון sudo apt sudo apt להתקין - יתושים לקוחות
המתן לסיום ההתקנה. כעת, כדי להפעיל את המתווך בהפעלה של פטל פטל, הקלד את הפקודה הבאה
sudo systemctl לאפשר mosquitto.service
זהו, כולנו אמורים להשיק את המתווך שלנו ב- MQTT. כדי לבדוק שהוא מותקן כהלכה, הזן את הפקודה הבאה
יתוש - v
פקודה זו תתן לך את הגרסה של מתווך ה- MQTT שלך. זה צריך להיות 1.4.x ומעלה.
בדיקת מתווך היתושים של פטל
1. הפעל את המתווך Mosquitto ברקע באמצעות הפקודה שלהלן
יתוש -ד
2. כעת, נרשם לנושא ב- exampleTopic באמצעות הפקודה הבאה
mosquitto_sub -d -t exampleTopic
3. כעת נפרסם הודעה כלשהי ל- exampleTopic
mosquitto_pub -d -t exampleTopic -m "שלום עולם!"
תקבל את העולם שלום! הודעה במסוף המנויים.
עכשיו הגיע הזמן לשלוט ולקבל את הנתונים ממכשיר אחר במקרה שלנו אנו משתמשים ביישום לוח המחוונים של NodeMCU ו- MQTT .
- ראשית נשלוט על נורית על ידי שליחת פקודה באמצעות אפליקציה כך שבמקרה זה NodeMCU מתנהג כמנוי ואפליקציה כמפרסם.
- אז ESP12E מחובר אליו גם חיישן DHT11 והוא שולח את קריאת הטמפרטורה הזו ליישום MQTT נייד כך שבמקרה זה הנייד יהיה המנוי ו- NodeMCU יהיה המו"ל. וכדי להעביר הודעות אלה בנושאים המתאימים, נעשה שימוש במתווך Mosquitto MQTT.
תרשים מעגל
חבר את המעגל כמוצג בתרשים. כאן ה- DHT11 משמש לקריאות הטמפרטורה, אך ניתן להשתמש גם בחיישן טמפרטורה LM35. כבר השתמשנו בחיישן DHT11 ברבים מהפרויקטים שלנו, כולל עם NodeMCU לבניית תחנת מזג אוויר.
בואו נתחיל לכתוב את הקוד ל- NodeMCU כדי להירשם כמנוי ולפרסם את הנתונים.
קוד והסבר
כאן נשתמש בתבנית הספרייה של Adafruit MQTT ונשנה את הדברים הנדרשים בקוד. ניתן להשתמש באותו קוד לפרסום ומינוי הנתונים לענן Adafruit IO רק על ידי שינוי של מעט דברים.להורדה זו, ספריית ה- MQTT של Adafruit מ- Sketch -> Include Library -> Manage Libraries. חפש את Adafruit MQTT והתקן אותו. לאחר התקנת הספרייה. עבור לדוגמאות -> ספריית mqtt של Adafruit -> mqtt_esp8266
לאחר מכן ערוך קוד זה על פי כתובת ה- IP של Raspberry Pi ותעודות ה- Wi-Fi שלנו.
כלול את כל הספריות עבור ESP8266WIFI ו- Adafruit MQTT .
#לִכלוֹל
לאחר מכן הגדר את ה- SSID והסיסמה עבור ה- Wi-Fi שלך, שממנו ברצונך לחבר את ה- ESP-12e. ודא שה- RPi וה- NodeMCU שלך מתחברים לאותה רשת.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
סעיף זה מגדיר את שרת Adafruit, במקרה זה את כתובת ה- IP של ה- Raspberry Pi ויציאת השרת שלך.
#define AIO_SERVER "כתובת ip של ה- Pi שלך" #define AIO_SERVERPORT 1883
השדות שלמטה יישארו ריקים מכיוון שאיננו משתמשים בענן Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
לאחר מכן צור מחלקה WiFiClient ESP8266 להתחברות לשרת MQTT.
לקוח WiFiClient;
הגדר את מחלקת הלקוחות MQTT על ידי העברת לקוח ה- WiFi ושרת MQTT ופרטי הכניסה.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
הגדר עדכון בשם 'טמפרטורה' לפרסום הטמפרטורה.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ הזנות / טמפרטורה");
הגדר עדכון בשם 'led1' למנוי לשינויים.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
בשנת התקנת פונקציה, אנו מצהירים PIN של NodeMCU שעליה אתה רוצה לקבל פלט. לאחר מכן, חבר את NodeMCU לנקודת גישה של Wi-Fi.
הגדרת חלל () { Serial.begin (115200); עיכוב (10); pinMode (LED, OUTPUT); Serial.println (F ("הדגמת AdQruit MQTT")); // התחבר לנקודת גישה WiFi. Serial.println (); Serial.println (); Serial.print ("מתחבר אל"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); בעוד (WiFi.status ()! = WL_CONNECTED) { …. …. ... הגדר מנוי MQTT לעדכון LED. mqtt.subscribe (& led1); }
בשנת לולאה פונקציה, נבטיח כי החיבור לשרת MQTT חי באמצעות MQTT_connect (); פוּנקצִיָה.
לולאה בטלה () { MQTT_connect ();
כעת, הירשם לעדכון 'led' וקבל את המחרוזת ממתווך MQTT והמיר מחרוזת זו למספר באמצעות atoi (); לתפקד ולכתוב מספר זה לסיכת LED באמצעות digitalWrite (); פוּנקצִיָה.
Adafruit_MQTT_ מנוי * מנוי; while ((מנוי = mqtt.readSubscription (20000))) { if (מנוי == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
כעת, קבל את הטמפרטורה במשתנה ופרסם ערך זה באמצעות פונקציית Temperature.publish (t) .
לצוף t = dht.readTemperature (); ... .. אם (! Temperature.publish (t)) { Serial.println (F ("נכשל")); } אחר { Serial.println (F ("OK!")); }
קוד מלא עם סרטון הדגמה ניתן בסוף הדרכה זו. העלה את הקוד ללוח NodeMCU ופתח את אפליקציית לוח המחוונים MQTT שהורדת בסמארטפון.
אתה יכול גם לשלוט ב- Raspberry Pi GPIO מכל מקום בעולם באמצעות ענן MQTT כמו Adafruit IO, MQTT.IO וכו ', שנלמד במדריך הבא.