Mündəricat:

MQTT -ni Raspberry Pi və ESP8266 ilə necə istifadə etmək olar: 8 addım (şəkillərlə)
MQTT -ni Raspberry Pi və ESP8266 ilə necə istifadə etmək olar: 8 addım (şəkillərlə)

Video: MQTT -ni Raspberry Pi və ESP8266 ilə necə istifadə etmək olar: 8 addım (şəkillərlə)

Video: MQTT -ni Raspberry Pi və ESP8266 ilə necə istifadə etmək olar: 8 addım (şəkillərlə)
Video: Ağıllı ev - bu necə işləyir? Məlumat şəbəkələri və cihazla qarşılıqlı əlaqə 2024, Noyabr
Anonim
MQTT -ni Raspberry Pi və ESP8266 ilə necə istifadə etmək olar
MQTT -ni Raspberry Pi və ESP8266 ilə necə istifadə etmək olar

Bu Təlimat kitabında, MQTT protokolunun nə olduğunu və cihazlar arasında necə ünsiyyət qurulduğunu izah edəcəyəm, sonra praktiki bir nümayiş olaraq sizə ESP8266 modulunun mesaj göndərəcəyi sadə iki müştəri sisteminin necə qurulacağını göstərəcəyəm. bir düyməyə basıldığında Python proqramına. Xüsusilə, bu layihə üçün bir Adafruit HUZZAH modulu, bir Raspberry Pi və bir masaüstü kompüterdən istifadə edirəm. Raspberry Pi, MQTT brokeri kimi fəaliyyət göstərəcək və Python müştəri ayrı bir masa üstü kompüterdən idarə olunacaq (isteğe bağlıdır, çünki bu Raspberry Pi üzərində işlədilə bilər).

Bu Təlimatla birlikdə davam etmək üçün elektronika və Arduino proqramını necə istifadə edəcəyiniz haqqında bir az məlumatınız olmalıdır. Bir komanda satırı interfeysindən istifadə etməyi də bilməlisiniz (Raspberry Pi üçün). İnşallah, MQTT -nin nə olduğunu və əsas ssenaridə necə istifadə ediləcəyini bildikdən sonra, öz IoT layihələrinizi yarada biləcəksiniz!

Lazım olan hissələr

  • Yerli şəbəkəyə qoşulmuş 1 x Raspberry Pi (Jessie ilə işləyir)
  • 1 x ESP8266 Modulu (Adafruit HUZZAH)
  • 1 x Çörək paneli
  • 3 x Jumper Telləri (Kişidən Kişiyə)
  • 1 x Düymə
  • 1 x 10k Ohm Rezistor (Qəhvəyi-Qara-Turuncu rəng kodu)

MQTT həmişə məni bir protokol olaraq maraqlandırdığı və istifadə oluna biləcək bir çox fərqli yolu olduğu üçün bu Təlimatlandırmanı yaratdım. Bununla birlikdə, cihazları necə kodlaşdıracağımı başa düşə bilmədim. "Salam, Dünya!" A cihazından B cihazına göndərin. Bu səbəbdən, bu təlimatı (inşallah) sizə necə işlədiyini öyrətmək və öz anlayışımı gücləndirmək üçün yazmağa qərar verdim!

Addım 1: MQTT nədir?

MQTT nədir?
MQTT nədir?

MQTT və ya MQ Telemetri Nəqliyyat, birdən çox cihazın bir -biri ilə danışmasına imkan verən bir mesajlaşma protokoludur. Hal -hazırda, Əşyaların İnterneti üçün populyar bir protokoldur, baxmayaraq ki, başqa məqsədlər üçün istifadə olunsa da - məsələn, Facebook Messenger. Maraqlıdır ki, MQTT 1999 -cu ildə icad edilmişdir - yəni mənim qədər qədimdir!

MQTT, cihazların mövzuları yayımlaya və ya abunə ola biləcəyi fikrinə əsaslanır. Beləliklə, məsələn. Cihaz 1 nömrəli temperaturu sensorlarından birində qeyd edərsə, qeyd etdiyi temperatur dəyərini ehtiva edən bir mövzuya (məsələn, "Temperatur") bir mesaj dərc edə bilər. Bu mesaj bir yerli şəbəkədəki bir keçid/yönləndirici olaraq düşünə biləcəyiniz bir MQTT Brokerinə göndərilir. MQTT Broker mesajı aldıqdan sonra eyni mövzuya abunə olan hər hansı bir cihaza (bu halda Cihaz #2) göndərəcək.

Bu layihədə, bir ESP8266 istifadə edərək bir mövzuya nəşr edəcəyik və MQTT Broker kimi çıxış edəcək bir Raspberry Pi vasitəsi ilə eyni mövzuya abunə olacaq bir Python skripti yaradacağıq. MQTT -nin ən üstün cəhəti yüngül olmasıdır, buna görə də ESP8266 kimi kiçik mikrokontrolörlərdə çalışmaq üçün mükəmməldir, eyni zamanda geniş yayılmışdır - buna görə də Python skriptində də işlədə bilərik.

Ümid edirik ki, bu layihənin sonunda MQTT -nin nə olduğunu və gələcəkdə öz layihələriniz üçün necə istifadə edəcəyinizi anlayacaqsınız.

Addım 2: MQTT Brokerini Raspberry Pi -yə quraşdırın

Raspberry Pi üzərində MQTT Brokerinin quraşdırılması
Raspberry Pi üzərində MQTT Brokerinin quraşdırılması
Raspberry Pi üzərində MQTT Brokerinin quraşdırılması
Raspberry Pi üzərində MQTT Brokerinin quraşdırılması
Raspberry Pi üzərində MQTT Brokerinin quraşdırılması
Raspberry Pi üzərində MQTT Brokerinin quraşdırılması

MQTT sistemimizi qurmaq üçün əvvəlki addımda izah edildiyi kimi bir brokerə ehtiyacımız var. Raspberry Pi üçün "Mosquitto" MQTT brokerindən istifadə edəcəyik. Bunu quraşdırmadan əvvəl, Raspberry Pi -ni yeniləmək həmişə yaxşıdır.

sudo apt-get yeniləməsi

sudo apt-get yeniləmə

Bunu etdikdən sonra ağcaqanad, sonra da sivrisinek-müştəri paketləri quraşdırın.

sudo apt -get mosquitto -y quraşdırın

sudo apt-get mosquitto-clients qurun -y

Bu iki paketi qurduqdan sonra brokerin konfiqurasiyasına ehtiyacımız olacaq. Sivrisinek brokerinin konfiqurasiya faylı /etc/mosquitto/mosquitto.conf ünvanında yerləşir, buna görə də sevdiyiniz mətn redaktoru ilə açın. Sevdiyiniz bir mətn redaktorunuz yoxdursa və ya hər hansı bir əmr satırı redaktorundan necə istifadə edəcəyinizi bilmirsinizsə, nano istifadə edəcəm, beləliklə izləyə bilərsiniz:

sudo nano /etc/mosquitto/mosquitto.conf

Bu faylın altındakı xətti görməlisiniz:

daxildir_dir /etc/mosquitto/conf.d

Bu xətti silin. Aşağıdakı sətirləri faylın altına əlavə edin.

icazə_anonim saxta

parol_file/etc/mosquitto/pwfile dinləyicisi 1883

Bu sətirləri yazaraq, ağcaqanadlara dedik ki, etibarlı bir istifadəçi adı və şifrə verməyən brokerimizə qoşulmaq istəmirik (bunları bir saniyəyə qoyacağıq) və ağcaqanadların 1883 port nömrəli mesajları dinləyin.

Brokerin bir istifadəçi adı və şifrə tələb etməsini istəmirsinizsə, əlavə etdiyimiz ilk iki sətri daxil etməyin (yəni, icazə_anonim… və parol_fil …). Bunu etmisinizsə, Raspberry Pi -ni yenidən başladın.

İndi bu faylı bağlayın (və saxla). Nano nümunəsi ilə birlikdə təqib edirsinizsə, CTRL+X düymələrini basın və istənildikdə Y yazın.

MQTT brokerindən istifadə etməyə çalışan istifadəçilərin təsdiqlənməsi lazım olduğunu ağcaqanadlara dediyimiz üçün indi istifadəçi adı və şifrənin nə olduğunu ağcaqanadlara bildirməliyik! Beləliklə, aşağıdakı əmri yazın - istifadəçi adını istədiyiniz istifadəçi adı ilə əvəz edin - sonra istədikdə istədiyiniz şifrəni daxil edin (Qeyd: konfiqurasiya faylını redaktə edərkən fərqli bir parol_file yolu göstərmisinizsə, aşağıdakı yolu istifadə etdiyiniz biri).

sudo mosquitto_passwd -c/etc/mosquitto/pwfile istifadəçi adı

Sivrisinek konfiqurasiya faylını dəyişdirdiyimiz üçün Raspberry Pi -ni yenidən başlatmalıyıq.

sudo yenidən başladın

Raspberry Pi yenidən başladıqdan sonra tam işləyən MQTT brokerinə sahib olmalısınız! Sonra, bir çox fərqli cihazdan/metoddan istifadə edərək onunla əlaqə qurmağa çalışacağıq!

Addım 3: Brokerin sınanması

Brokerin sınanması
Brokerin sınanması

Raspberry Pi üzərində ağcaqanad qurduqdan sonra, hər şeyin düzgün işlədiyinə əmin olmaq üçün onu tez bir sınaqdan keçirə bilərsiniz. Bu məqsədlə, əmr satırında istifadə edə biləcəyimiz iki əmr var. mosquitto_pub və mosquitto_sub. Bu addımda, brokerimizi sınamaq üçün bunların hər birini istifadə edərək sizə yol göstərəcəyəm.

Vasitəçini sınamaq üçün iki əmr satırı pəncərəsini açmalısınız. Putty və ya başqa bir SSH müştəri istifadə edirsinizsə, bu başqa bir SSH pəncərəsi açmaq və hər zamanki kimi daxil olmaq qədər sadədir. Pi -yə UNIX terminalından daxil olsanız, bu tamamilə eynidir. Raspberry Pi -dən birbaşa istifadə edirsinizsə, GUI rejimində iki terminal pəncərəsini açmalısınız (GUI -ni başlatmaq üçün startxcan əmri istifadə olunur).

İndi iki pəncərə açdığınıza görə testə başlaya bilərik. İki terminaldan birində istifadəçi adı və şifrəni əvvəlki addımda qurduğunuzlarla əvəz edərək aşağıdakı əmri yazın.

mosquitto_sub -d -u istifadəçi adı -P parol -t testi

Əvvəlki addımda bir istifadəçi adı və şifrə təyin etməmək qərarına gəlsəniz, bundan sonra əmrlərdə -u və -P bayraqlarına məhəl qoymayın. Məsələn, mosquitto_sub əmri indi belə olacaq:

mosquitto_sub -d -t testi

Mosquitto_sub əmri bir mövzuya abunə olacaq və göstərilən pəncərədə göstərilən mövzuya göndərilən mesajları göstərəcək. Burada -d, debug rejimi deməkdir, buna görə bütün mesajlar və fəaliyyətlər ekranda çıxacaq. -u və -P özünü izah etməlidir. Nəhayət, -t, abunə olmaq istədiyimiz mövzunun adıdır - bu halda "test".

Sonra, digər terminal pəncərəsində "test" mövzusuna bir mesaj dərc etməyə çalışacağıq. İstifadəçi adını və şifrəni dəyişdirməyi bir daha xatırlayaraq aşağıdakıları yazın:

mosquitto_pub -d -u istifadəçi adı -P parol -t testi -m "Salam, Dünya!"

Enter düyməsini basdıqda "Salam, Dünya!" Mesajını görməlisiniz. istifadə etdiyimiz ilk terminal pəncərəsində görünür (abunə olmaq üçün). Əgər belədirsə, ESP8266 üzərində işləməyə hazırsınız!

Addım 4: ESP8266 qurulması (Adafruit HUZZAH)

ESP8266 qurulması (Adafruit HUZZAH)
ESP8266 qurulması (Adafruit HUZZAH)
ESP8266 qurulması (Adafruit HUZZAH)
ESP8266 qurulması (Adafruit HUZZAH)
ESP8266 qurulması (Adafruit HUZZAH)
ESP8266 qurulması (Adafruit HUZZAH)
ESP8266 qurulması (Adafruit HUZZAH)
ESP8266 qurulması (Adafruit HUZZAH)

Bu addım Adafruit HUZZAH -a xasdırsa (bu layihəni başa çatdırmaq üçün istifadə etdiyim kimi). Fərqli bir Arduino / ESP8266 cihazı istifadə edirsinizsə, bu addımı atmaq istəyə bilərsiniz. Bununla birlikdə, sizə aid ola biləcək hər hansı bir məlumat varsa, oxumağı məsləhət görürəm.

Bu layihə üçün Arduino proqramı ilə HUZZAH proqramlaşdıracağam. Buna görə də, hələ yoxsa, Arduino proqramını (1.6.4 -dən daha yeni) quraşdırdığınızdan əmin olun. Buradan yükləyə bilərsiniz.

Arduino proqramını qurduqdan sonra onu açın və Fayl-> Tercihlərə gedin. Burada (pəncərənin altına yaxın) etiketli bir mətn qutusu görməlisiniz: "Əlavə Panolar Meneceri URL'leri". Bu mətn qutusuna aşağıdakı linki kopyalayın və yapışdırın:

arduino.esp8266.com/stable/package_esp8266com_index.json

Dəyişikliklərinizi saxlamaq üçün OK düyməsini basın. İndi İdarə Heyəti Menecerini açın (Alətlər-> İdarə Heyəti-> İdarə Heyəti Meneceri) və ESP8266 axtarın. Esp8266 by ESP8266 İcma paketini quraşdırın. Arduino proqramını yenidən başladın.

İndi, lövhəni proqramlaşdırmadan əvvəl bir neçə fərqli variant seçməliyik. Alətlər menyu seçimində, Board üçün Adafruit HUZZAH ESP8266 seçin, CPU tezliyi üçün 80 MHz (bunu aşmaq istəyirsinizsə 160 MHz -dən istifadə edə bilərsiniz, amma indi 80 MHz -dən istifadə edəcəm), 4M (3M SPIFFS) Flaş Ölçüsü üçün və Yükləmə Hızı üçün 115200. Ayrıca, istifadə etdiyiniz COM portunu seçdiyinizə əmin olun (bu, konfiqurasiyadan asılı olacaq).

Hər hansı bir kodu yükləməzdən əvvəl, HUZZAH -ın bootloader rejimində olduğundan əmin olmalısınız. Bunu təmin etmək üçün lövhədə GPIO0 işarələnmiş düyməni basıb saxlayın və bu düyməni basıb saxlayınsa Sıfırla düyməsini də basıb saxlayın. Sonra sıfırlama düyməsini və sonra GPIO0 buraxın. Bunu düzgün etdinizsə, GPIO0 düyməsini basdığınızda yanan qırmızı LED indi zəif yanmalıdır.

Mikro nəzarətçiyə kod yükləmək üçün əvvəlcə HUZZAH -ın yükləyici rejimində olduğundan əmin olun, sonra Arduino IDE -də yükləmə düyməsini sıxın.

HUZZAH qurmaqda çətinlik çəkirsinizsə, daha çox məlumatı Adafruit -in öz dərsliyində tapa bilərsiniz.

Addım 5: ESP8266 proqramlaşdırılması

ESP8266 proqramlaşdırılması
ESP8266 proqramlaşdırılması

İndi ESP8266 proqramlaşdırmağa başlayacağıq, ancaq başlamazdan əvvəl Arduino Kitabxana menecerinə aşağıdakı kitabxanaları quraşdırmalısınız (Sketch-> Kitabxanaları Daxil Et> Kitabxanaları İdarə et)

  • Sıçrama 2
  • PubSubClient

Bu kitabxanaları qurduqdan sonra bu Təlimata daxil etdiyim kodu işlədə biləcəksiniz (MQTT_Publish.zip). Hər hissənin nə etdiyini başa düşməyiniz üçün bunu şərh etməyinizə əmin oldum və bu, ümid edirəm bunu ehtiyaclarınıza uyğunlaşdırmağa imkan verməlidir.

Kodun üst hissəsindəki sabitləri dəyişdirməyi unutmayın ki, ESP8266 WiFi şəbəkənizə və MQTT Brokerinizə (Raspberry Pi) qoşula bilsin.

MQTT Broker üçün istifadəçi adı və şifrə təyin etməmək qərarına gəlsəniz, bunun əvəzinə MQTT_PublishNoPassword.zip faylını yükləyin.

Addım 6: Python Müştərisini (paho-mqtt) quraşdırın

Python Müştəri Qurmaq (paho-mqtt)
Python Müştəri Qurmaq (paho-mqtt)

Şükürlər olsun ki, bu addım çox sadədir! Sivrisinek python müştəri qurmaq üçün aşağıdakıları əmr satırına (Linux/Mac) və ya hətta əmr satırına (Windows) daxil etməlisiniz.

paho-mqtt quraşdırın

Qeyd: Python qurarkən pip quraşdırılmasını və pythonun PATH dəyişəninizə əlavə edilməsini istəmədiyinizi bildirməmisinizsə, Windows əmr sorğusunda pip əmrini işlədən bir problem ola bilər. Bunu düzəltməyin bir çox yolu var, amma düşünürəm ki, Python -u yenidən yükləmək ən asan yoldur. Şübhə edirsinizsə - bir Google verin!

Addım 7: Python Müştəri - Abunəlik

Python Müştəri - Abunəlik
Python Müştəri - Abunəlik

Bu addımda, ESP8266 tərəfindən MQTT mövzusuna göndərilən (yayımlanan) bütün mesajları idarə etmək üçün Python skriptini (ya Raspberry Pi -nin özündə, ya da şəbəkəyə bağlı başqa bir kompüterdə) quracağıq.

Aşağıdakı python kodunu daxil etdim (PythonMQTT_Subscribe.py), nə olduğunu başa düşməyinizə kömək etmək üçün şərh edildi, amma burada əsas xüsusiyyətlərdən bəzilərini də izah edəcəyəm.

Daha əvvəl MQTT bağlantısı üçün bir istifadəçi adı və şifrə təyin etməmisinizsə, bunun əvəzinə PythonMQTT_SubscribeNoPassword.py faylını yükləyin.

Addım 8: ESP8266 Cihazları Arasında Əlaqə

ESP8266 Cihazları Arasında Əlaqə
ESP8266 Cihazları Arasında Əlaqə

Bir IoT şəbəkəsi qurmaq istəyirsinizsə, məsələn, ESP8266 cihazları arasında əlaqə qurmaq istəyə bilərsiniz. Şükürlər olsun ki, bu, əvvəllər yazdığımız koddan daha mürəkkəb deyil, lakin bir neçə nəzərəçarpan dəyişiklik var.

Bir ESP -nin digərinə məlumat göndərməsi üçün birinci ESP -nin mövzuya, ikinci ESP -nin isə bu mövzuya abunə olması lazım olacaq. Bu quraşdırma bir tərəfli söhbətə imkan verəcək - ESP (1) - ESP (2). ESP (2) -nin ESP (1) ilə yenidən danışmasını istəyiriksə, ESP (2) nəşr edəcəyi və ESP (1) abunə olacağı yeni bir mövzu yarada bilərik. Şükürlər olsun ki, eyni mövzuda birdən çox abunəçimiz ola bilər, buna görə də bir çox sistemə məlumat göndərmək istəyirsinizsə, məlumatları göndərən cihaz istisna olmaqla, hamısının abunə olduğu bir mövzuya ehtiyacınız olacaq. nəşr olun).

Hər bir cihazın nə etməli olduğunu anlamaq üçün yardıma ehtiyacınız varsa, sistemi bir insan otağı olaraq düşünün. ESP (1) nəşr edirsə, bu cihazı "dinamik" olaraq təsəvvür edə bilərsiniz və mövzuya abunə olan hər hansı bir cihaz bu nümunədə "dinləyicilər" dir.

Aşağıda bir ESP8266 -nın bir mövzuya necə abunə ola biləcəyini və müəyyən mesajları dinlədiyini göstərən nümunə kodu daxil etdim - 1 və 0. 1 alınarsa, bortdakı LED (HUZZAH - GPIO 0 üçün) yandırılır.. 0 alınarsa, bu LED sönür.

Daha mürəkkəb məlumatları emal etmək istəyirsinizsə, bu ReceivedMessage funksiyasında edilməlidir (koda baxın).

Öz layihələriniz üçün həm məlumat göndərmək, həm də almaq lazımdırsa, əvvəlki nümunədəki yayım funksiyasını bu addıma daxil edilmiş koda daxil edə bilərsiniz. Bu əsas Arduino loop () funksiyasında işlənməlidir.

Kodun yuxarısındakı dəyişənləri şəbəkənizə uyğun olaraq dəyişdirməyi unutmayın!

Tövsiyə: