- מהו פרוטוקול MQTT?
- איך MQTT עובד?
- המתווך של יתוש הליקוי
- רכיבים נדרשים
- Eclipse MQTT Test-Circuit - סכמטי
- תכנות ESP8266 ליצירת תקשורת עם ברוקר
- בדיקת MQTT עם ESP8266 באמצעות Arduino
במהלך השנים האחרונות, מכשירי IoT (Internet of Things) הפכו לחלק שאינו ניתן להבחנה מחיי היומיום שלנו. מבתים חכמים, נורות חכמות למכשירים חכמים; היוצרים והמפתחים משלבים את הטכנולוגיה הזו כדי ליצור רשת של מכשירים מחוברים שהופכת את חיי היום יום לקצת יותר מרגשים. כל זה התאפשר בגלל קלות התקשורת. ישנן דרכים רבות ואפשריות לתקשר בין מכשירים, אך במוצרים מסחריים ותחביב, פרוטוקול יחיד הנפוץ הוא Message Queuing Telemetry Transport (MQTT). בנינו בעבר רדיו FM נשלט באמצעות קול באמצעות Arduino ו- Google Assistant המשתמש ב- MQTT כדי לתקשר עם לוח NodeMCU. האם בדוק אם זה נשמע לך מעניין.
בפרויקט זה נשתמש במתווך Eclipse MQTT בחינם ופופולרי ונלמד כיצד לחבר מכשיר IoT (במקרה שלנו, זה מודול NodeMCU) למתווך MQTT ולהעביר נתונים בין המתווך MQTT ו- NodeMCU.
מהו פרוטוקול MQTT?
לפני שנמשיך הלאה, זה להיות טוב יותר מושג ברור לגבי MQTT (Transport טלמטריה תור הודעות) הפרוטוקול. זהו פרוטוקול העברת הודעות קל שמשתמש בשיטת פרסום / מנוי ומתרגם הודעות בין מכשירים מרובים. באמצעות פרוטוקול MQTT, אנו יכולים גם לשלוח / לקבל נתונים ולשלוט בהתקני פלט שונים, כמו קריאת נתוני חיישנים וכו '. הוא פותח על גבי TCP, ולכן הוא מהיר יותר מפרוטוקולים דומים כמו HTTP. מלבד זאת, יש לו יתרונות רבים אחרים על פני פרוטוקולים אחרים כמו משקלם הקל מאוד, כך שהוא אינו צורך עודף זיכרון, הוא יכול לעבוד עם רוחב פס פחות מאוד של רשת, נוסף על כך, יש לו פרוטוקול אבטחה מובנה מובנה. תכונות אלה הופכות אותו למתאים ליישומים רבים.
איך MQTT עובד?
על מנת להבין את פעולתו של פרוטוקול MQTT, עלינו רק להבין שלושה דברים בסיסיים; התרשים שלעיל מראה זאת. כמו כן, הסברנו זאת בהמשך במאמר.
לקוח MQTT:
הלקוח MQTT הוא כל מכשיר (זה יכול להיות מיקרו או בשרת) שיוצא פונקציות MQTT ומתקשר עם שרת מרכזי, אשר ידוע בתור " מתווך ". המתווך מטפל בתקשורת הנתונים בין הלקוחות המחוברים.
מו"ל MQTT:
כאשר לקוח רוצה לשלוח מידע כלשהו, הלקוח מכונה "מפרסם". המו"ל יפרסם את המידע בנושא מסוים. " נושא " הוא מסלול שבו אנו יכולים לפרסם / להירשם כמנויים. המתווך ואז שולח את המידע שפורסם על ידי המשתמש ללקוחות (הידוע גם בשם מנוי) כי לא נרשמו כי נושא מסוים.
מנוי MQTT:
מנוי MQTT מנויה על נושאים על MQTT ברוקר לקרוא את ההודעות שנשלחו על ידי הברוקר.
המתווך של יתוש הליקוי
Eclipse Mosquitto הוא מתווך MQTT בעל קוד פתוח, שהוא קל משקל ומתאים לשימוש במכשירי IoT לתקשורת. פרוטוקול MQTT מספק שיטה קלה של העברת מידע באמצעות פרסום / להירשם מודל. אם ברצונך ללמוד עוד על הנושא, תוכל לבקר באתר היתושים הרשמי.
הגדרת מתווך אקליפס יתוש:
על מנת ליצור תקשורת עם המתווך, עלינו להגדיר זאת תחילה. בפרויקט זה, יישום אנדרואיד משמש לפרסם ו להירשם למידע עם הברוקר. השלבים הבאים יעניקו לך מושג טוב יותר על תהליך ההתקנה.
שלב 1:
ראשית, הורד כל יישום "לקוח MQTT" הזמין בחנות Google Play / App Store והתקן אותו. בפרויקט זה משתמשים ביישום בשם "לקוח MQTT", שנראה כמו התמונה המוצגת למטה.
שלב 2:
לחץ על הסימן "+" כדי לרשום את האפשרויות הנוספות ביישום, שם אנו הולכים להוסיף מתווך חדש. כאשר לוחצים על הכפתור, מופיע מסך חדש כמוצג להלן.
שלב 3:
לאחר מכן, יש למלא את פרטי המתווך בשדה הנדרש. ראשית, לחץ על האפשרות "מופעלת" המוצגת ביישום. בפרויקט זה נעשה שימוש במתווך Eclipse MQTT. הפרטים שיש למלא מובאים להלן:
שם ניק: תן שם להעדפתך
מארח: mqtt.eclipse.org
נמל: 1883
זיהוי לקוח: תן תעודת זהות על העדפתך
את הפרטים שלעיל יש למלא בשדות שלהם. כל שדות אחרים אינם נחוצים וניתן להשאירם ריקים. לאחר השלמה מוצלחת, לחץ על כפתור השמירה כדי לשמור את פרטי הברוקר.
לאחר שתסיים, תהליך ההתקנה של יישום אנדרואיד הסתיים ועכשיו נוכל לעבור לצד החומרה של הדברים.
רכיבים נדרשים
להלן רשימה מלאה של החלקים הנדרשים. מכיוון שמעגל זה פשוט, תוכלו למצוא את כל החלקים הדרושים בחנות התחביבים המקומית שלכם.
- NodeMCU
- לד
- קרש לחם
- חוטי חיבור
- כבל תכנות
Eclipse MQTT Test-Circuit - סכמטי
תרשים המעגל לפרויקט MQTT הבסיסי מופיע להלן:
תכנות ESP8266 ליצירת תקשורת עם ברוקר
קוד פשוט של ארדואינו דואג לכל התקשורת הדרושה בין המתווך MQTT לבין ה- NodeMCU. בחלק זה נלמד כיצד פונקציונליות זו עובדת בפירוט.
הגדר את Arduino IDE והעלה את הקוד:
אם אתה מעלה את הקוד ל- NodeMCU בפעם הראשונה, עליך להגדיר תחילה את ה- IDE של Arduino. לשם כך פשוט עקוב אחר ההוראות הפשוטות המופיעות להלן.
ראשית, פתח את Arduino IDE, ואז עבור לקובץ - > העדפות -> הגדרות .
לאחר מכן, העתק את כתובת האתר שלהלן והדבק אותה בשדה 'כתובת אתר נוספת של מנהל לוח ' ולחץ על 'אישור'. אתה יכול לבדוק את התמונה למטה כדי לדעת כיצד עשינו זאת.
קישור:
לאחר מכן עבור אל כלים> לוח> מנהל לוחות . בחלון מנהל הלוח, הקלד ESP 8266 בתיבת החיפוש ולחץ על Enter. לאחר מכן בחר את הגרסה האחרונה מהתפריט הנפתח ולחץ על התקן. התמונה למטה תתן לך מושג ברור.
לבסוף, לאחר סיום ההתקנה, עבור אל כלים -> לוח -> ובחר NodeMCU 1.0 (מודול ESP-12E). כעת תוכלו לתכנת את NodeMCU עם Arduino IDE. לאחר שסיימנו את הגדרת ה- Arduino IDE, כעת אנו יכולים להעלות את הקוד השלם. אבל ראשית, קרא על ההסבר המהיר של כל הקוד.
ראשית, כללנו את "ESP8266WiFi.h" לשימוש ב- ESP8266 ו- "PubSubClient.h" עבור MQTT.
אתה יכול למצוא את ספריית ESP8266 שנבנתה מראש בספריית Arduino, אך עליך להוריד את ספריית PubSubClient ממאגר GitHub המשויך לה.
#לִכלוֹל
לאחר מכן הגדר את אישורי הרשת כגון שם המשתמש והסיסמה שלך ב- Wi-Fi. החלף את האישורים במקום "admin" ו- "12345678" בהתאמה.
const char * ssid = "admin"; const char * password = "12345678";
לאחר מכן, עלינו להגדיר את שרת MQTT. השתמשנו בשרת Eclipse MQTT לפרויקט זה, ולכן כתובת השרת ניתנת כ- "mqtt.eclipse.org". אבל אם אתם מתכננים להשתמש בכל שרת אחר כמו Mosquitto, Adafruit, תוכלו להחליף אותו בכתובת השרת ובמספר היציאה הספציפיים שלכם.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
לאחר מכן, המופעים נוצרים עבור הכיתה WiFiClient ו- PubSubClient , אשר ישמשו במהלך התוכנית.
WiFiClient espClient; לקוח PubSubClient (espClient);
בסעיף setup () , אנו קוראים ל- WiFi.begin () תחילה, קריאה לשיטה זו תחבר את ה- ESP ל- HotSpot המועדף עליך.
WiFi.begin (ssid, סיסמה);
לאחר מכן, אנו בודקים חיבור רשת מוצלח בשיטת WiFi.status () . לאחר חיבור מוצלח, הודעה מודפסת על צג סידורי עם ה- SSID של הרשת המחוברת.
בעוד (WiFi.status ()! = WL_CONNECTED) {עיכוב (500); Serial.println ("מתחבר ל- WiFi.."); } Serial.print ("מחובר ל- WiFi:"); Serial.println (WiFi.SSID ());
כעת עלינו ליצור מתווך. לשם כך השתמשנו בשיטת setServer ; בשיטה זו שני טיעונים שהגדרנו מראש. כעת, אם אנו רוצים לקבל הודעות מהשרת, עלינו ליצור פונקציה להתקשרות חוזרת. לשם כך אנו משתמשים בשיטת setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
כעת השתמשנו בפונקציית connect (clientID) כדי להתחבר ללקוח ESP8266. כאן clientID הוא שם הלקוח, והוא חייב להיות ייחודי. אם הוא מחובר, ניתן להציג הודעת הצלחה בתוך הצג הסדרתי.
אם (client.connect ("ESP8266")) {Serial.println ("מחובר"); } אחר {Serial.print ("נכשל עם מצב") Serial.println (client.state ()); עיכוב (2000); }
לאחר מכן, אנו קוראים ל client.subscribe () , פונקציית MQTT מובנית, המשמשת כמנוי לנושא מסוים. עבור פרויקט זה השתמשנו ב- " esp / test " כשם המנוי שלנו.
client.subscribe ("esp / test");
כעת, פונקציית MQTTcallback נקראת לבדוק אם מידע מעודכן כלשהו זמין או לא. אם נתונים חדשים זמינים, פונקציה זו מטפלת בנתונים שהתקבלו ומדפיסה הודעה בצג הסדרתי עם ההודעה המקורית ושם הנושא בו התקבלה ההודעה.
לאחר מכן, אנו ממירים את ההודעות למחרוזת, כך שניתן להשוות ולבדוק אם קיימות פעולות מפעילות. בפרויקט זה נורית LED מופעלת / כובה באמצעות פקודות MQTT, כפי שמוצג בקוד להלן.
עבור (int i = 0; i <length; i ++) {message = message + (char) מטען מטען; } Serial.print (הודעה); אם (הודעה == "מופעלת") {digitalWrite (LED, HIGH); }
לסיום, לפרסום המידע בנושא. Client.publish () הפונקציה משמשת. בפרויקט זה נבדק סטטוס כפתור, אם לוחצים על הכפתור, מתפרסמת הודעה לנושא " esp / test1 " כמוצג להלן.
אם (digitalRead (D1) == 0)) {client.publish ("esp / test1", "שלום מ- ESP8266"); } אחר; client.loop ();
בדיקת MQTT עם ESP8266 באמצעות Arduino
לצורך הבדיקה הסופית שלנו, אנו נשתמש באפליקציית Android, שהקמנו קודם.
פתח את יישום הלקוח MQTT וודא שהנייד שלך מחובר לאינטרנט פעיל. כמו כן, למוקד החם אליו מחובר ה- NodeMCU צריך להיות חיבור אינטרנט פעיל. לאחר שהכל מחובר לאינטרנט, אנו נשלח מחרוזת "שלום מ- ESP8266" ממודול ה- ESP, אשר יבוא לידי ביטוי בתוך אפליקציית אנדרואיד, ונקבל התראה. לאחר מכן, נשלח מחרוזת מאפליקציית Android, שתדליק נורית LED המחוברת ללוח ESP8266 Node MCU.
שלב 1: (הירשם לנושא):
לחץ על האפשרות MQTT שמור באפליקציה, אשר הגדרנו קודם לכן. זה יצוץ מסך, שם הוא מתבקש "להירשם לנושא". הגדרנו בעבר את הנושא כ- " esp / test1 ". אז, באפליקציית Android, נכתוב " esp / test1 ". לחץ על הירשם כמנוי. פעולה זו תציג בפניך מסך כמו למטה, שם ייכתב כמו "לא התקבלה הודעה" מהנושא המסוים.
כעת לחץ על הלחצן 'מחובר' המחובר ל- nodeMCU. כעת בהתאם לקוד שלנו, הודעה " שלום מ- ESP8266 " תפורסם לנושא ותופיע התראה על המסך עם ההודעה שהתקבלה כמוצג להלן.
שלב 2: פרסם לנושא:
כעת, כדי לפרסם את הנושא, לחץ על לחצן החץ למעלה של היישום, והוא יפתח מסך כמוצג להלן.
כעת, בשדה הנושא, כתוב " esp / test " ובשדה ההודעות, כתוב " on " או " off " כדי להדליק ולכבות את ה- LED בהתאמה. לדוגמא, אם "on" מתפרסם לנושא, נורית ה- LED תידלק ואם "off" תפורסם לנושא, אז ה- LED יכבה.
אני מקווה שאהבתם את המאמר ולמדתם משהו חדש. אם יש לך שאלות בנוגע למאמר זה, אל תהסס להגיב למטה או שתוכל להשתמש בפורום שלנו במקום זאת.