תוכן עניינים:

כיצד להשתמש ב- MQTT עם ה- Raspberry Pi ו- ESP8266: 8 שלבים (עם תמונות)
כיצד להשתמש ב- MQTT עם ה- Raspberry Pi ו- ESP8266: 8 שלבים (עם תמונות)

וִידֵאוֹ: כיצד להשתמש ב- MQTT עם ה- Raspberry Pi ו- ESP8266: 8 שלבים (עם תמונות)

וִידֵאוֹ: כיצד להשתמש ב- MQTT עם ה- Raspberry Pi ו- ESP8266: 8 שלבים (עם תמונות)
וִידֵאוֹ: Home Assistant - подключаем адресную ленту WS2812B через ESP8266 с прошивкой WLED 2024, נוֹבֶמבֶּר
Anonim
כיצד להשתמש ב- MQTT עם ה- Raspberry Pi ו- ESP8266
כיצד להשתמש ב- MQTT עם ה- Raspberry Pi ו- ESP8266

במדריך זה אסביר מהו פרוטוקול MQTT וכיצד הוא משמש לתקשורת בין מכשירים. לאחר מכן, כהדגמה מעשית, אראה לך כיצד להתקין מערכת פשוטה של שני לקוחות, שבה מודול ESP8266 ישלח הודעה לתוכנית Python כאשר לוחצים על כפתור. באופן ספציפי, אני משתמש במודול Adafruit HUZZAH לפרויקט זה, פטל פטל ומחשב שולחני. ה- Raspberry Pi יפעל כמתווך MQTT, ולקוח ה- Python יופעל ממחשב שולחני נפרד (אופציונלי מכיוון שהוא יכול להיות מופעל ב- Raspberry Pi).

כדי לעקוב אחר הוראה זו, יהיה עליך להכיר ידע בסיסי באלקטרוניקה וכיצד להשתמש בתוכנת Arduino. כמו כן, עליך להכיר את השימוש בממשק שורת פקודה (עבור ה- Raspberry Pi). יש לקוות, לאחר שתרכוש את הידע של מהו MQTT וכיצד להשתמש בו בתרחיש בסיסי, תוכל ליצור פרויקטים משלך ב- IoT!

חלקים נדרשים

  • 1 x פטל פטל, מחובר לרשת מקומית (פועל ג'סי)
  • 1 x מודול ESP8266 (HUZZAH Adafruit)
  • 1 x לוח לחם
  • 3 x חוטי מגשר (זכר לזכר)
  • 1 x כפתור לחיצה
  • 1 x 10k Ohm Resistor (קוד צבע חום-שחור-כתום)

יצרתי את ההוראה הזו, מכיוון ש- MQTT תמיד עניין אותי כפרוטוקול וישנן דרכים רבות ושונות בהן ניתן להשתמש בה. עם זאת, לא הצלחתי להסב את הראש כיצד לקודד מכשירים לשימוש בהם. הסיבה לכך היא שלא ידעתי/הבנתי מה קורה בעצם עם "הלו, עולם!" ממכשיר א 'ושלח אותו למכשיר ב. מכאן שהחלטתי לכתוב את המדריך הזה כדי (בתקווה) ללמד אותך כיצד הוא פועל, וגם לחזק את ההבנה שלי בעצמי לגביו!

שלב 1: מהו MQTT?

מהו MQTT?
מהו MQTT?

MQTT, או MQ Telemetry Transport, הוא פרוטוקול העברת הודעות המאפשר למספר מכשירים לדבר זה עם זה. נכון לעכשיו, זהו פרוטוקול פופולרי עבור האינטרנט של הדברים, אם כי הוא שימש למטרות אחרות - למשל, Facebook Messenger. מעניין שה- MQTT הומצא בשנת 1999 - כלומר הוא ישן כמוני!

MQTT מבוסס על הרעיון שמכשירים יכולים לפרסם או להירשם לנושאים. אז, למשל. אם מכשיר מס '1 רשם את הטמפרטורה מאחד החיישנים שלו, הוא יכול לפרסם הודעה המכילה את ערך הטמפרטורה שהוא הקליט, לנושא (למשל "טמפרטורה"). הודעה זו נשלחת לברוקר MQTT, שאתה יכול לחשוב עליו כמתג/נתב ברשת מקומית. לאחר שקבלן MQTT קיבל את ההודעה, הוא ישלח אותה לכל המכשירים (במקרה זה, מכשיר מס '2) המנויים לאותו נושא.

בפרויקט זה, אנו נפרסם לנושא באמצעות ESP8266, וניצור סקריפט Python שיירשם לאותו נושא, באמצעות פטל פטל אשר יפעל כמתווך MQTT. הדבר הגדול ב- MQTT הוא שהוא קל משקל, כך שהוא מושלם להפעלה על בקרי מיקרו קטנים כגון ESP8266, אך הוא זמין גם באופן נרחב - כך שנוכל להריץ אותו גם על סקריפט Python.

אני מקווה שבסופו של פרויקט זה תהיה לך הבנה של מהו MQTT וכיצד להשתמש בו לפרויקטים משלך בעתיד.

שלב 2: התקנת ברוקר MQTT ב- Raspberry Pi

התקנת ברוקר MQTT ב- Raspberry Pi
התקנת ברוקר MQTT ב- Raspberry Pi
התקנת ברוקר MQTT ב- Raspberry Pi
התקנת ברוקר MQTT ב- Raspberry Pi
התקנת ברוקר MQTT ב- Raspberry Pi
התקנת ברוקר MQTT ב- Raspberry Pi

כדי להתקין את מערכת MQTT שלנו, אנו צריכים מתווך, כפי שהוסבר בשלב הקודם. עבור פטל פטל, נשתמש ברוקר MQTT "Mosquitto". לפני שנתקין זאת, תמיד עדיף לעדכן את ה- Raspberry Pi שלנו.

עדכון sudo apt-get

sudo apt-get upgrade

לאחר שעשית זאת, התקן את היתוש ולאחר מכן את חבילות הלקוחות של היתוש.

sudo apt -get להתקין יתוש -y

sudo apt-get להתקין יתוש-לקוחות -י

לאחר שתסיים להתקין את שתי החבילות האלה, נצטרך להגדיר את התווך. קובץ התצורה של מתווך היתושים נמצא בכתובת /etc/mosquitto/mosquitto.conf, לכן פתח אותו עם עורך הטקסט האהוב עליך. אם אין לך עורך טקסט מועדף או שאינך יודע כיצד להשתמש בכל אחד מעורכי שורת הפקודה, אשתמש ב- nano כדי שתוכל לעקוב:

sudo nano /etc/mosquitto/mosquitto.conf

בתחתית קובץ זה, אתה אמור לראות את השורה:

include_dir /etc/mosquitto/conf.d

מחק את השורה הזו. הוסף את השורות הבאות לתחתית הקובץ.

allow_anonymous false

password_file/etc/mosquitto/pwfile מאזין 1883

על ידי הקלדת שורות אלה, אמרנו ליתוש כי איננו רוצים שמישהו יתחבר לברוקר שלנו שאינו מספק שם משתמש וסיסמה תקפים (נמשיך להגדיר את אלה בשנייה) וכי אנו רוצים שהיתוש יעבור האזן להודעות ביציאה מספר 1883.

אם אינך רוצה שהמתווך ידרוש שם משתמש וסיסמה, אל תכלול את שתי השורות הראשונות שהוספנו (כלומר allow_anonymous … ו- password_file …). אם עשית זאת, דלג לאתחול מחדש של ה- Raspberry Pi.

כעת סגור (ושמור) את הקובץ. אם אתה עוקב אחר דוגמת הננו, הקש CTRL+X והקלד Y כאשר תתבקש.

מכיוון שזה עתה אמרנו ליתוש שמשתמשים המנסים להשתמש בתיווך MQTT צריכים להיות מאומתים, כעת עלינו לספר ליתוש מה שם המשתמש והסיסמה! לכן, הקלד את הפקודה הבאה - החלפת שם משתמש בשם המשתמש שתרצה - ולאחר מכן הזן את הסיסמה שתרצה כאשר תתבקש (הערה: אם בעת עריכת קובץ התצורה, ציינת נתיב password_file אחר, החלף את הנתיב למטה ב- אחד שהשתמשת בו).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile שם משתמש

מכיוון שרק שינינו את קובץ התצורה של היתוש, עלינו לאתחל את ה- Raspberry Pi.

sudo אתחול מחדש

לאחר ש- Raspberry Pi סיים אתחול מחדש, יהיה עליך מתווך MQTT המתפקד במלואו! לאחר מכן, אנו הולכים לנסות ליצור איתו אינטראקציה באמצעות מספר מכשירים/שיטות שונות!

שלב 3: בדיקת המתווך

בדיקת הברוקר
בדיקת הברוקר

לאחר התקנת יתוש ב- Raspberry Pi, תוכל לבצע בדיקה מהירה - רק כדי לוודא שהכל פועל כראוי. לשם כך, ישנן שתי פקודות בהן אנו יכולים להשתמש בשורת הפקודה. יתוש_פאב ויתוש_סוב. בשלב זה, אני אדריך אותך באמצעות כל אחד מהם כדי לבדוק את המתווך שלנו.

על מנת לבדוק את המתווך, יהיה עליך לפתוח שני חלונות של שורת הפקודה. אם אתה משתמש במרק או בלקוח SSH אחר, זה פשוט כמו פתיחת חלון SSH נוסף והתחברות כרגיל. אם אתה ניגש ל- Pi שלך ממסוף UNIX, זה בדיוק אותו הדבר. אם אתה משתמש ב- Raspberry Pi ישירות, יהיה עליך לפתוח שני חלונות מסוף במצב GUI (ניתן להשתמש בפקודה startxcan להפעלת ה- GUI).

כעת, לאחר שפתחת שני חלונות, נוכל להתחיל בבדיקות. באחד משני הטרמינלים, הקלד את הפקודה הבאה, והחלף את שם המשתמש והסיסמה באלה שהגדרת בשלב הקודם.

mosquitto_sub -d -u שם משתמש -P סיסמא- t בדיקה

אם החלטת שלא להגדיר שם משתמש וסיסמה בשלב הקודם, אז מעתה והלאה, התעלם מהדגלים -u ו- -P בפקודות. אז, כדוגמה, הפקודה mosquitto_sub תהיה כעת:

בדיקת mosquitto_sub -d -t

הפקודה mosquitto_sub תירשם לנושא ותציג את כל ההודעות שנשלחות לנושא שצוין בחלון הטרמינל. כאן, -d פירושו מצב באגים, כך שכל ההודעות והפעילות יופקו על המסך. -u ו- -P צריכים להסביר את עצמם. לבסוף, -t הוא שם הנושא שאנו רוצים להירשם אליו - במקרה זה, "מבחן".

לאחר מכן, בחלון הטרמינל השני, אנו הולכים לנסות ולפרסם הודעה לנושא "בדיקה". הקלד את הדברים הבאים, וזכור שוב כדי לשנות שם משתמש וסיסמה:

mosquitto_pub -d -u שם משתמש -P סיסמה -t test -m "שלום, עולם!"

כאשר אתה לוחץ על enter, אתה אמור לראות את ההודעה שלך "שלום, עולם!" מופיעים בחלון הטרמינל הראשון בו השתמשנו (כדי להירשם כמנוי). אם זה המצב, אתה מוכן להתחיל לעבוד על ה- ESP8266!

שלב 4: הגדרת ה- ESP8266 (Adafruit HUZZAH)

הגדרת ה- ESP8266 (HUZZAH Adafruit)
הגדרת ה- ESP8266 (HUZZAH Adafruit)
הגדרת ה- ESP8266 (HUZZAH Adafruit)
הגדרת ה- ESP8266 (HUZZAH Adafruit)
הגדרת ה- ESP8266 (HUZZAH Adafruit)
הגדרת ה- ESP8266 (HUZZAH Adafruit)
הגדרת ה- ESP8266 (HUZZAH Adafruit)
הגדרת ה- ESP8266 (HUZZAH Adafruit)

שלב זה אם הוא ספציפי ל- HUZZAH Adafruit (מכיוון שאני משתמש בו להשלמת הפרויקט הזה). אם אתה משתמש בהתקן Arduino / ESP8266 אחר, ייתכן שתרצה לדלג על שלב זה. עם זאת, הייתי ממליץ לך לקרוא אותו בקלילות, למקרה שיש כאן מידע שעשוי להיות רלוונטי עבורך.

עבור פרויקט זה, אני עומד לתכנת את HUZZAH עם תוכנת Arduino. לכן, אם עדיין לא עשית זאת, הקפד להתקין את תוכנת Arduino (חדשה מ -1.6.4). אתה יכול להוריד אותו כאן.

לאחר שהתקנת את תוכנת Arduino, פתח אותה ונווט אל קובץ-> העדפות. כאן אתה אמור לראות (קרוב לתחתית החלון) תיבת טקסט עם התווית: "כתובות אתרים נוספות של מנהל לוחות". בתיבת טקסט זו, העתק והדבק את הקישור הבא:

arduino.esp8266.com/stable/package_esp8266com_index.json

לחץ על אישור כדי לשמור את השינויים שלך. כעת פתח את מנהל הלוח (כלים-> לוח-> מנהל הלוח) וחפש את ESP8266. התקן את חבילת הקהילה esp8266 by ESP8266. הפעל מחדש את תוכנת Arduino.

כעת, לפני שנוכל לתכנת את הלוח, עלינו לבחור כמה אפשרויות שונות. באפשרות התפריט כלים, בחר Adafruit HUZZAH ESP8266 ללוח, 80 מגה -הרץ לתדר המעבד (אתה יכול להשתמש ב -160 מגהרץ אם ברצונך לבצע שעון -יתר, אך לעת עתה אני עומד להשתמש ב -80 מגה -הרץ), 4M (3M SPIFFS) לגודל Flash, ו- 115200 למהירות ההעלאה. כמו כן, הקפד לבחור את יציאת ה- COM שבה אתה משתמש (הדבר תלוי בהתקנה שלך).

לפני שתוכל להעלות קוד כלשהו, עליך לוודא שה- HUZZAH נמצא במצב מטען אתחול. כדי לאפשר זאת, החזק את הלחצן בלוח המסומן GPIO0, ובעוד זה מוחזק, החזק גם את לחצן האיפוס. לאחר מכן, שחרר את לחצן האיפוס ולאחר מכן GPIO0. אם עשית זאת נכון, הנורית האדומה שנדלקה בעת לחיצה על GPIO0 צריכה להיות מוארת מעומעם.

כדי להעלות קוד למיקרו -בקר, ודא תחילה שה- HUZZAH נמצא במצב מטען אתחול ולאחר מכן לחץ על כפתור ההעלאה ב- Arduino IDE.

אם אתה נתקל בבעיות בהגדרת ה- HUZZAH, מידע נוסף ניתן למצוא בהדרכה של Adafruit עצמה.

שלב 5: תכנות ה- ESP8266

תכנות ה- ESP8266
תכנות ה- ESP8266

כעת נתחיל לתכנת את ESP8266, אך לפני שנוכל להתחיל, יהיה עליך להתקין את הספריות הבאות במנהל הספרייה של ארדואינו (Sketch-> Include Libraries-> Manage Libraries)

  • הקפצה 2
  • PubSubClient

לאחר שתתקין את הספריות האלה, תוכל להפעיל את הקוד שכללתי במדריך זה (MQTT_Publish.zip). הקפדתי להגיב כך שתוכל להבין מה כל חלק עושה, וזה בתקווה שיאפשר לך להתאים אותו לצרכיך.

זכור לשנות את הקבועים בחלק העליון של הקוד כך ש- ESP8266 שלך יוכל להתחבר לרשת ה- WiFi שלך ול- MQTT Broker שלך (ה- Raspberry Pi).

אם החלטת שלא להגדיר שם משתמש וסיסמה עבור מתווך MQTT, הורד במקום זאת את הקובץ MQTT_PublishNoPassword.zip.

שלב 6: התקנת לקוח Python (paho-mqtt)

התקנת לקוח Python (paho-mqtt)
התקנת לקוח Python (paho-mqtt)

למרבה המזל, שלב זה פשוט מאוד! כדי להתקין את לקוח פיתון היתושים, אתה רק צריך להקליד את הדברים הבאים בשורת הפקודה (Linux/Mac) או אפילו בשורת הפקודה (Windows).

pip התקן paho-mqtt

הערה: ייתכן ששורת הפקודה של Windows נתקלת בבעיה בהפעלת הפקודה pip אם לא ציינת שברצונך להתקין פיפ ולהוסיף פייתון למשתנה PATH בעת התקנת פייתון. ישנן מספר דרכים לתקן זאת, אך לדעתי פשוט התקנה מחדש של פייתון היא הדרך הקלה ביותר. אם יש לך ספק - תן לו גוגל!

שלב 7: לקוח פייתון - הרשמה

לקוח Python - הרשמה
לקוח Python - הרשמה

בשלב זה אנו הולכים להתקין את סקריפט Python (או ב- Raspberry Pi עצמו או במחשב אחר המחובר לרשת) כדי לטפל בכל ההודעות הנשלחות (מתפרסמות) על ידי ESP8266 לנושא MQTT.

צירפתי את קוד הפיתון למטה (PythonMQTT_Subscribe.py), שהגיבו כדי לעזור לך להבין מה קורה, אבל אסביר גם כמה מהתכונות העיקריות כאן.

אם לא הגדרת קודם שם משתמש וסיסמה לחיבור MQTT, הורד במקום זאת את הקובץ PythonMQTT_SubscribeNoPassword.py.

שלב 8: תקשורת בין התקני ESP8266

תקשורת בין התקני ESP8266
תקשורת בין התקני ESP8266

אם ברצונך להקים רשת IoT, לדוגמה, ייתכן שתרצה לתקשר בין התקני ESP8266. למרבה המזל, זה לא הרבה יותר מורכב מהקוד שכתבנו בעבר, אולם ישנם כמה שינויים בולטים.

כדי ש- ESP אחד ישלח נתונים לשני, ה- ESP הראשון יצטרך לפרסם את הנושא, וה- ESP השני יצטרך להירשם לנושא זה. התקנה זו תאפשר שיחה חד כיוונית - ESP (1) ל- ESP (2). אם נרצה ש- ESP (2) יחזור ל- ESP (1), נוכל ליצור נושא חדש שאליו יפורסם ESP (2) ו- ESP (1) ירשם כמנוי. למרבה המזל, יכולים להיות לנו מספר מנויים על אותו נושא, כך שאם תרצה לשלוח נתונים למספר מערכות, תזדקק לנושא אחד בלבד (שאליו כולם נרשמים, למעט המכשיר ששולח את הנתונים, שכן להיות מפרסם).

אם אתה צריך עזרה בלהבין מה כל מכשיר צריך לעשות, תחשוב על המערכת כחדר של אנשים. אם ESP (1) מפרסם, תוכל לדמיין את המכשיר הזה כ"רמקול ", וכל התקנים הרשומים לנושא הם" מאזינים "בדוגמה זו.

צירפתי קוד דוגמה למטה, המדגים כיצד ESP8266 יכול להירשם לנושא ולהאזין להודעות מסוימות - 1 ו- 0. אם מתקבלת 1, נורית הלוח (עבור HUZZAH - GPIO 0) מופעלת. אם מתקבלת 0, נורית LED כבוייה.

אם ברצונך לעבד נתונים מורכבים יותר, יש לעשות זאת בפונקציה ReceMessage (ראה קוד).

לפרויקטים משלך, אם עליך לשלוח ולקבל נתונים, תוכל לשלב את פונקציית הפרסום מהדוגמה הקודמת בקוד הכלול בשלב זה. יש לטפל בזה בפונקציה הראשית של לולאת Arduino ().

זכור לשנות את המשתנים בחלק העליון של הקוד כך שיתאים לרשת שלך!

מוּמלָץ: