İçindekiler:

Raspberry Pi ve ESP8266 ile MQTT Nasıl Kullanılır: 8 Adım (Resimlerle)
Raspberry Pi ve ESP8266 ile MQTT Nasıl Kullanılır: 8 Adım (Resimlerle)

Video: Raspberry Pi ve ESP8266 ile MQTT Nasıl Kullanılır: 8 Adım (Resimlerle)

Video: Raspberry Pi ve ESP8266 ile MQTT Nasıl Kullanılır: 8 Adım (Resimlerle)
Video: Kiosk mode Bruteforce Evasion with Flipper Zero 2024, Haziran
Anonim
Raspberry Pi ve ESP8266 ile MQTT Nasıl Kullanılır
Raspberry Pi ve ESP8266 ile MQTT Nasıl Kullanılır

Bu Eğitilebilir Kitapta, MQTT protokolünün ne olduğunu ve cihazlar arasında iletişim kurmak için nasıl kullanıldığını açıklayacağım. Ardından, pratik bir gösteri olarak, size bir ESP8266 modülünün mesaj göndereceği basit bir iki istemci sisteminin nasıl kurulacağını göstereceğim. bir düğmeye basıldığında bir Python programına. Özellikle bu proje için bir Adafruit HUZZAH modülü, bir Raspberry Pi ve bir masaüstü bilgisayar kullanıyorum. Raspberry Pi, MQTT aracısı olarak görev yapacak ve Python istemcisi ayrı bir masaüstü bilgisayardan çalıştırılacaktır (isteğe bağlı, çünkü bu Raspberry Pi'de çalıştırılabilir).

Bu Eğitilebilir Tabloyu takip etmek için, bazı temel elektronik bilgisine ve Arduino yazılımını nasıl kullanacağınıza ihtiyacınız olacak. Ayrıca bir komut satırı arabirimi kullanmaya da aşina olmalısınız (Raspberry Pi için). Umarım, MQTT'nin ne olduğu ve temel bir senaryoda nasıl kullanılacağı hakkında bilgi edindikten sonra, kendi IoT projelerinizi oluşturabileceksiniz!

Gerekli Parçalar

  • 1 x Raspberry Pi, yerel bir ağa bağlı (Jessie çalıştırıyor)
  • 1 x ESP8266 Modülü (Adafruit HUZZAH)
  • 1 x Ekmek Tahtası
  • 3 x Atlama Kablosu (Erkek-Erkek)
  • 1 x Buton
  • 1 x 10k Ohm Direnç (Kahverengi-Siyah-Turuncu renk kodu)

MQTT beni her zaman bir protokol olarak ilgilendirdiğinden ve kullanılabilecek birçok farklı yol olduğundan, bu Eğitilebilir Dosyayı oluşturdum. Ancak, onu kullanmak için cihazları nasıl kodlayacağımı bir türlü çözemedim. Bunun nedeni, "Merhaba, Dünya!"mı almak için gerçekte neler olduğunu bilmediğim/anlamadığımdı. A cihazından B cihazına gönderin. Bu nedenle, (umarım) size nasıl çalıştığını öğretmek ve kendi anlayışımı pekiştirmek için bu Talimatı yazmaya karar verdim!

Adım 1: MQTT Nedir?

MQTT Nedir?
MQTT Nedir?

MQTT veya MQ Telemetry Transport, birden fazla cihazın birbiriyle konuşmasına izin veren bir mesajlaşma protokolüdür. Şu anda, başka amaçlar için kullanılmış olmasına rağmen - örneğin Facebook Messenger - Nesnelerin İnterneti için popüler bir protokoldür. İlginç bir şekilde MQTT 1999'da icat edildi - yani benim kadar eski!

MQTT, cihazların konuları yayınlayabileceği veya bunlara abone olabileceği fikrine dayanmaktadır. Yani mesela. Cihaz #1, sensörlerinden birinden sıcaklığı kaydettiyse, kaydettiği sıcaklık değerini içeren bir mesaj bir konuya (örn. "Sıcaklık") yayınlayabilir. Bu mesaj, yerel alan ağında bir anahtar/yönlendirici olarak düşünebileceğiniz bir MQTT Aracısına gönderilir. MQTT Broker mesajı aldığında, aynı konuya abone olan herhangi bir cihaza (bu durumda Cihaz #2) gönderecektir.

Bu projede, bir ESP8266 kullanarak bir konuyu yayınlayacağız ve aynı konuya abone olacak bir Python betiği, MQTT Broker olarak görev yapacak bir Raspberry Pi aracılığıyla oluşturacağız. MQTT ile ilgili en iyi şey hafif olmasıdır, bu nedenle ESP8266 gibi küçük mikro denetleyicilerde çalışmak için mükemmeldir, ancak aynı zamanda yaygın olarak bulunur - böylece onu bir Python betiğinde de çalıştırabiliriz.

Umarım, bu projenin sonunda, MQTT'nin ne olduğunu ve gelecekte kendi projeleriniz için nasıl kullanacağınızı anlayacaksınız.

Adım 2: MQTT Broker'ı Raspberry Pi'ye Kurma

Raspberry Pi'ye MQTT Broker Kurulumu
Raspberry Pi'ye MQTT Broker Kurulumu
Raspberry Pi'ye MQTT Broker Kurulumu
Raspberry Pi'ye MQTT Broker Kurulumu
Raspberry Pi'ye MQTT Broker Kurulumu
Raspberry Pi'ye MQTT Broker Kurulumu

MQTT sistemimizi kurmak için önceki adımda açıklandığı gibi bir komisyoncuya ihtiyacımız var. Raspberry Pi için " Mosquitto " MQTT brokerini kullanacağız. Bunu yüklemeden önce Raspberry Pi'mizi güncellemek her zaman en iyisidir.

sudo apt-get güncellemesi

sudo apt-get yükseltme

Bunu yaptıktan sonra mosquitto'yu ve ardından mosquitto-clients paketlerini kurun.

sudo apt-get install mosquitto -y

sudo apt-get install mosquitto-clients -y

Bu iki paketi yüklemeyi tamamladığınızda, aracıyı yapılandırmamız gerekecek. Mosquitto aracısının yapılandırma dosyası /etc/mosquitto/mosquitto.conf konumunda bulunur, bu nedenle bunu favori metin düzenleyicinizle açın. Favori bir metin düzenleyiciniz yoksa veya herhangi bir komut satırı düzenleyicisini nasıl kullanacağınızı bilmiyorsanız, takip edebilmeniz için nano kullanacağım:

sudo nano /etc/mosquitto/mosquitto.conf

Bu dosyanın altında şu satırı görmelisiniz:

include_dir /etc/mosquitto/conf.d

Bu satırı silin. Dosyanın en altına aşağıdaki satırları ekleyin.

allow_anonymous yanlış

password_file /etc/mosquitto/pwfile dinleyici 1883

Bu satırları yazarak, mosquitto'ya, geçerli bir kullanıcı adı ve parola sağlamayan kimsenin aracımıza bağlanmasını istemediğimizi (bunları birazdan ayarlamaya başlayacağız) ve mosquitto'nun bunu yapmasını istediğimizi söyledik. 1883 numaralı bağlantı noktasındaki mesajları dinleyin.

Aracının bir kullanıcı adı ve parola gerektirmesini istemiyorsanız, eklediğimiz ilk iki satırı (yani allow_anonymous… ve password_file…) eklemeyin. Bunu yaptıysanız, Raspberry Pi'yi yeniden başlatmaya atlayın.

Şimdi o dosyayı kapatın (ve kaydedin). Nano örneğini takip ediyorsanız, CTRL+X tuşlarına basın ve istendiğinde Y yazın.

MQTT aracısını kullanmaya çalışan kullanıcıların kimliklerinin doğrulanması gerektiğini mosquitto'ya az önce söylediğimiz için, şimdi mosquitto'ya kullanıcı adının ve parolanın ne olduğunu söylememiz gerekiyor! Bu nedenle, aşağıdaki komutu yazın - kullanıcı adını istediğiniz kullanıcı adıyla değiştirin - ardından istendiğinde istediğiniz parolayı girin (Not: yapılandırma dosyasını düzenlerken farklı bir parola_dosyası yolu belirttiyseniz, aşağıdaki yolu aşağıdakiyle değiştirin. kullandığınız).

sudo mosquitto_passwd -c /etc/mosquitto/pwfile kullanıcı adı

Sivrisinek yapılandırma dosyasını yeni değiştirdiğimiz için Raspberry Pi'yi yeniden başlatmalıyız.

sudo yeniden başlatma

Raspberry Pi yeniden başlatmayı bitirdiğinde, tam olarak işleyen bir MQTT aracınız olmalıdır! Ardından, birkaç farklı cihaz/yöntem kullanarak onunla etkileşime girmeye çalışacağız!

3. Adım: Aracıyı Test Etme

Aracıyı Test Etme
Aracıyı Test Etme

Raspberry Pi'ye mosquitto yükledikten sonra, her şeyin doğru çalıştığından emin olmak için hızlı bir test yapabilirsiniz. Bunun için komut satırında kullanabileceğimiz iki komut bulunmaktadır. mosquitto_pub ve mosquitto_sub. Bu adımda, komisyoncumuzu test etmek için bunların her birini kullanma konusunda size rehberlik edeceğim.

Aracıyı test etmek için iki komut satırı penceresi açmanız gerekecek. Putty veya başka bir SSH istemcisi kullanıyorsanız, bu, başka bir SSH penceresi açmak ve her zamanki gibi oturum açmak kadar basittir. Pi'nize bir UNIX terminalinden erişiyorsanız, bu tamamen aynıdır. Raspberry Pi'yi doğrudan kullanıyorsanız, GUI modunda iki terminal penceresi açmanız gerekecektir (GUI'yi başlatmak için startx komutu kullanılabilir).

Artık iki pencere açtığınıza göre, teste başlayabiliriz. İki terminalden birinde, kullanıcı adı ve şifreyi önceki adımda kurduğunuzla değiştirerek aşağıdaki komutu yazın.

mosquitto_sub -d -u kullanıcı adı -P şifre -t testi

Bir önceki adımda bir kullanıcı adı ve şifre belirlememeye karar verdiyseniz, bundan sonra komutlardaki -u ve -P işaretlerini yok sayın. Örnek olarak, mosquitto_sub komutu şimdi şöyle olacaktır:

mosquitto_sub -d -t testi

mosquitto_sub komutu bir konuya abone olacak ve belirtilen konuya gönderilen tüm mesajları terminal penceresinde gösterecektir. Burada -d, hata ayıklama modu anlamına gelir, bu nedenle tüm mesajlar ve etkinlik ekranda görüntülenir. -u ve -P açıklayıcı olmalıdır. Son olarak, -t, abone olmak istediğimiz konunun adıdır - bu durumda "test".

Ardından, diğer terminal penceresinde "test" konusuna bir mesaj yayınlamaya çalışacağız. Kullanıcı adı ve şifreyi değiştirmeyi tekrar hatırlayarak aşağıdakini yazın:

mosquitto_pub -d -u kullanıcı adı -P şifre -t testi -m "Merhaba Dünya!"

Enter tuşuna bastığınızda, "Merhaba Dünya!" mesajınızı görmelisiniz. (abone olmak için) kullandığımız ilk terminal penceresinde görünür. Bu durumda, hepiniz ESP8266 üzerinde çalışmaya hazırsınız!

Adım 4: ESP8266 (Adafruit HUZZAH) Kurulumu

ESP8266 (Adafruit HUZZAH) Kurulumu
ESP8266 (Adafruit HUZZAH) Kurulumu
ESP8266 (Adafruit HUZZAH) Kurulumu
ESP8266 (Adafruit HUZZAH) Kurulumu
ESP8266 (Adafruit HUZZAH) Kurulumu
ESP8266 (Adafruit HUZZAH) Kurulumu
ESP8266 (Adafruit HUZZAH) Kurulumu
ESP8266 (Adafruit HUZZAH) Kurulumu

Bu adım, Adafruit HUZZAH'a özgüyse (bu projeyi tamamlamak için kullandığım şey bu). Farklı bir Arduino/ESP8266 cihazı kullanıyorsanız bu adımı atlamak isteyebilirsiniz. Bununla birlikte, burada sizinle ilgili olabilecek herhangi bir bilgi olması durumunda, okumanızı tavsiye ederim.

Bu proje için Arduino yazılımı ile HUZZAH'ı programlayacağım. Bu nedenle, henüz yapmadıysanız, Arduino yazılımını yüklediğinizden emin olun (1.6.4'ten daha yeni). Buradan indirebilirsiniz.

Arduino yazılımını yükledikten sonra açın ve Dosya-> Tercihler'e gidin. Burada (pencerenin altına yakın bir yerde) "Ek Pano Yöneticisi URL'leri" etiketli bir metin kutusu görmelisiniz. Bu metin kutusuna aşağıdaki bağlantıyı kopyalayıp yapıştırın:

arduino.esp8266.com/stable/package_esp8266com_index.json

Değişikliklerinizi kaydetmek için Tamam'ı tıklayın. Şimdi Board Manager'ı (Araçlar->Board->Board Manager) açın ve ESP8266'yı arayın. esp8266 by ESP8266 Community paketini kurun. Arduino yazılımını yeniden başlatın.

Şimdi, tahtayı programlamadan önce birkaç farklı seçenek belirlememiz gerekiyor. Araçlar menü seçeneğinde Anakart için Adafruit HUZZAH ESP8266, CPU Frekansı için 80 MHz (overclock yapmak isterseniz 160 MHz kullanabilirsiniz, ama şimdilik 80 MHz kullanacağım), 4M (3M SPIFFS) seçin. Flash Boyutu için ve 115200 Yükleme Hızı için. Ayrıca, kullandığınız COM bağlantı noktasını seçtiğinizden emin olun (bu, kurulumunuza bağlı olacaktır).

Herhangi bir kod yüklemeden önce, HUZZAH'ın önyükleyici modunda olduğundan emin olmanız gerekir. Bunu etkinleştirmek için, panoda GPIO0 ile işaretli düğmeyi basılı tutun ve bu basılı tutarken Sıfırla düğmesini de basılı tutun. Ardından Sıfırla düğmesini ve ardından GPIO0 düğmesini bırakın. Bunu doğru yaptıysanız, GPIO0'a bastığınızda yanan kırmızı LED artık loş yanıyor olmalıdır.

Mikrodenetleyiciye kod yüklemek için önce HUZZAH'ın bootloader modunda olduğundan emin olun, ardından Arduino IDE'deki yükle düğmesine tıklayın.

HUZZAH'ı kurmakta sorun yaşıyorsanız, Adafruit'in kendi eğitiminde daha fazla bilgi bulabilirsiniz.

Adım 5: ESP8266'nın Programlanması

ESP8266'nın Programlanması
ESP8266'nın Programlanması

Şimdi ESP8266'yı programlamaya başlayacağız, ancak başlamadan önce, Arduino Library manager'da aşağıdaki kütüphaneleri kurmanız gerekecek (Sketch->Libraries->Manage Libraries)

  • Sıçrama2
  • PubSubClient

Bu kitaplıkları yükledikten sonra, bu Eğitilebilir Dosyaya (MQTT_Publish.zip) eklediğim kodu çalıştırabileceksiniz. Her bölümün ne yaptığını anlayabilmeniz için yorum yaptığınızdan emin oldum ve umarım bu, onu ihtiyaçlarınıza uyarlamanıza olanak tanır.

ESP8266'nızın WiFi ağınıza ve MQTT Broker'ınıza (Raspberry Pi) bağlanabilmesi için kodun üst kısmındaki sabitleri değiştirmeyi unutmayın.

MQTT Aracısı için bir kullanıcı adı ve parola belirlememeye karar verdiyseniz, bunun yerine MQTT_PublishNoPassword.zip dosyasını indirin.

Adım 6: Python İstemcisini Yükleme (paho-mqtt)

Python İstemcisini Yükleme (paho-mqtt)
Python İstemcisini Yükleme (paho-mqtt)

Neyse ki, bu adım çok basit! mosquitto python istemcisini kurmak için, aşağıdakini komut satırına (Linux/Mac) veya hatta komut istemine (Windows) yazmanız yeterlidir.

pip kurulumu paho-mqtt

Not: Python'u kurduğunuzda pip'in yüklenmesini ve PATH değişkeninize python'un eklenmesini belirtmediyseniz, Windows komut isteminde pip komutunu çalıştırmada sorun olabilir. Bunu düzeltmenin birkaç yolu var ama bence Python'u yeniden yüklemek en kolay yol. Şüpheniz varsa - bir google verin!

7. Adım: Python İstemcisi - Abone Olma

Python İstemcisi - Abone Olmak
Python İstemcisi - Abone Olmak

Bu adımda, ESP8266 tarafından MQTT konusuna gönderilen (yayınlanan) tüm mesajları işlemek için Python betiğini (Raspberry Pi'nin kendisinde veya ağa bağlı başka bir bilgisayarda) ayarlayacağız.

Neler olup bittiğini anlamanıza yardımcı olmak için yorumlanmış olan python kodunu aşağıya ekledim (PythonMQTT_Subscribe.py), ancak bazı ana özellikleri burada da açıklayacağım.

MQTT bağlantısı için daha önce bir kullanıcı adı ve parola belirlemediyseniz, bunun yerine PythonMQTT_SubscribeNoPassword.py dosyasını indirin.

Adım 8: ESP8266 Cihazları Arasında Haberleşme

ESP8266 Cihazları Arasında Haberleşme
ESP8266 Cihazları Arasında Haberleşme

Örneğin bir IoT ağı kurmak istiyorsanız, ESP8266 cihazları arasında iletişim kurmak isteyebilirsiniz. Neyse ki, bu daha önce yazdığımız koddan çok daha karmaşık değil, ancak birkaç önemli değişiklik var.

Bir ESP'nin diğerine veri göndermesi için, ilk ESP'nin konuyu yayınlaması ve ikinci ESP'nin o konuya abone olması gerekir. Bu kurulum tek yönlü bir konuşmaya izin verir - ESP(1)'den ESP(2)'ye. ESP(2)'nin ESP(1) ile tekrar konuşmasını istiyorsak, ESP(2)'nin yayınlayacağı ve ESP(1)'in abone olacağı yeni bir konu oluşturabiliriz. Neyse ki, aynı konuda birden fazla abonemiz olabilir, bu nedenle bir dizi sisteme veri göndermek istiyorsanız, yalnızca bir konuya ihtiyacınız olacak (verileri gönderen cihaz dışında hepsinin abone olduğu, çünkü bu yayınlamak).

Her cihazın ne yapması gerektiğini anlamak için yardıma ihtiyacınız varsa, sistemi bir insan odası olarak düşünün. ESP(1) yayın yapıyorsa, bu cihazı bir "hoparlör" olarak ve konuya abone olan tüm cihazları bu örnekte "dinleyici" olarak düşünebilirsiniz.

Aşağıda, bir ESP8266'nın bir konuya nasıl abone olabileceğini ve belirli mesajları nasıl dinleyebileceğini gösteren bazı örnek kodlar ekledim - 1 ve 0. 1 alınırsa, yerleşik LED (HUZZAH - GPIO 0 için) açılır. 0 alınırsa, bu LED kapanır.

Daha karmaşık verileri işlemek istiyorsanız, bu, ReceivedMessage işlevinde yapılmalıdır (koda bakın).

Kendi projeleriniz için, hem veri göndermeniz hem de almanız gerekiyorsa, önceki örnekteki yayınlama işlevini bu adımda dahil edilen koda dahil edebilirsiniz. Bu, ana Arduino döngüsü () işlevinde ele alınmalıdır.

Kodun üst kısmındaki değişkenleri ağınıza uyacak şekilde değiştirmeyi unutmayın!

Önerilen: