- MQTT nedir?
- Mosquitto MQTT Broker'ı Raspberry Pi'ye Yükleme
- Raspberry Pi Mosquitto Broker'ı Test Etme
- Devre şeması
- Kod ve Açıklama
MQTT, internet üzerinden mesaj göndermek ve almak için kullanılan bir protokoldür. Bu protokolü daha önce Iot Electricity meter ve Raspberry Pi Alexa'da verileri internette yayınlamak için kullandık. Bu eğitimde MQTT ve bununla ilgili terimler hakkında daha fazla bilgi edineceğiz. Burada Raspberry Pi'yi yerel MQTT aracısı olarak kullanacağız ve MQTT uygulama panosu aracılığıyla NodeMCU ESP12E'ye bağlı bir LED'i kontrol edeceğiz. NodeMCU'ya bir DHT11 sensörü de bağlanmıştır, böylece MQTT panosundaki sıcaklık ve nem okumasını yine yerel MQTT aracısı olarak Raspberry Pi kullanarak elde ederiz.
Öyleyse, MQTT'yi ve bununla ilgili terimleri anlamakla başlayalım.
MQTT nedir?
MQTT, IBM tarafından tasarlanan Message Queue Telemetry Transport'un kısaltmasıdır. İnternet üzerinden mesaj gönderip almak için kullanılan basit ve hafif olan bu protokol, bant genişliği kullanımı düşük cihazlar için tasarlanmıştır. Günümüzde bu protokol, sensör verilerini göndermek ve almak için IoT cihazlarında sıklıkla kullanılmaktadır. Ayrıca IoT tabanlı ev otomasyon sistemlerinde bu protokol internet verisi çok fazla kullanılmadan rahatlıkla kullanılabilir.
MQTT'de sık kullanılan birkaç terim vardır:
- Abone Ol ve Yayınla
- İleti
- Konu
- Komisyoncu
1. Abone Ol ve Yayınla: Abone ol, verileri başka cihazdan almak ve verileri başka cihaza göndermek için yayınlamak anlamına gelir.
Cihaz1 verileri cihaz2'ye gönderdiğinde, o zaman Yayıncı olarak bilinir ve diğeri Abone olarak bilinir ve bunun tersi de geçerlidir.
2. Mesaj: Mesajlar, gönderdiğimiz ve aldığımız bilgilerdir. Bir veri veya herhangi bir komut türü olabilir. Örneğin, sıcaklık verilerini bulutta yayınlıyorsak, bu sıcaklık verileri Mesaj olarak bilinir.
3. Konu: Bu, gelen mesajlar için ilgiyi kaydetme yönteminiz veya mesajı nerede yayınlamak istediğinizi nasıl belirlediğinizdir. Konular, eğik çizgiyle ayrılmış dizelerle temsil edilir. Veriler, MQTT kullanılarak konular hakkında yayınlanır ve ardından MQTT cihazı, verileri almak için konuya abone olur.
4. MQTT Broker: Bu şey, yayıncılardan gelen tüm mesajları almaktan, mesajları filtrelemekten ve ardından mesajları ilgilenen abonelere yayınlamaktan sorumludur.
Bu komisyoncu bulutta barındırıldığında, MQTT bulutu olarak adlandırılır. Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure gibi birçok bulut tabanlı MQTT hizmeti vardır. MQTT, Amazon AWS'ye Başlarken öğreticisinde açıkladığımız popüler Amazon AWS bulutu ile de kullanılabilir.
Raspberry Pi kullanarak kendi MQTT komisyoncumuzu yapabiliriz. Bu yerel MQTT aracısı olacaktır, yani yerel ağınızdaki verileri herhangi bir yerden gönderemez ve alabilirsiniz. Bu yüzden burada, Mosquitto MQTT aracısını yerel MQTT aracısı yapmak için Raspberry Pi'ye kuracağız ve sıcaklık verilerini NodeMCU'dan MQTT pano uygulamasına göndereceğiz. Ayrıca, aracıyı kullanarak NodeMCU'ya bağlı bir LED'i kontrol edeceğiz.
Mosquitto MQTT Broker'ı Raspberry Pi'ye Yükleme
Raspberry pi'nizde terminali açın ve aracıyı kurmak için aşağıdaki komutları yazın
sudo apt update sudo apt install -y mosquitto mosquitto-istemcileri
Kurulumun bitmesini bekleyin. Şimdi, raspberry pi'nin başlangıcında aracıyı başlatmak için aşağıdaki komutu yazın
sudo systemctl mosquitto.service'i etkinleştirir
İşte bu, hepimiz MQTT brokerimizi başlatmaya hazırız. Düzgün kurulup kurulmadığını kontrol etmek için aşağıdaki komutu girin
mosquitto -v
Bu komut size MQTT aracınızın sürümünü verecektir. 1.4.x veya üstü olmalıdır.
Raspberry Pi Mosquitto Broker'ı Test Etme
1. Aşağıdaki komutu kullanarak Mosquitto aracısını arka planda çalıştırın
mosquitto -d
2. Şimdi, aşağıdaki komutu kullanarak exampleTopic'teki bir konuya abone olacağız
mosquitto_sub -d -t örnekTopic
3. Şimdi, exampleTopic'e bir mesaj yayınlayacağız
mosquitto_pub -d -t exampleTopic -m "Merhaba dünya!"
Merhaba dünyasını alacaksınız! Abone terminalindeki mesaj.
Şimdi, NodeMCU ve MQTT dashboard uygulamasını kullandığımız durumda, verileri başka bir cihazdan kontrol etme ve alma zamanı .
- İlk olarak, App kullanarak komut göndererek bir LED'i kontrol edeceğiz, böylece bu durumda NodeMCU bir abone olarak ve Uygulama bir yayıncı olarak davranacaktır.
- Daha sonra ESP12E ayrıca bağlı DHT11 sensörüne sahiptir ve bu sıcaklık okumasını Mobil MQTT uygulamasına gönderir, böylece bu durumda mobil abone olur ve NodeMCU yayıncı olur. Ve bu mesajları ilgili Konularda iletmek için Mosquitto MQTT komisyoncusu kullanılır.
Devre şeması
Devreyi şemada gösterildiği gibi bağlayın. DHT11 burada sıcaklık okumaları için kullanılır, ancak bir LM35 Sıcaklık sensörü de kullanılabilir. NodeMCU dahil birçok projemizde bir meteoroloji istasyonu inşa etmek için DHT11 sensörünü zaten kullandık.
Verileri abone olmak ve yayınlamak için NodeMCU için kod yazmaya başlayalım.
Kod ve Açıklama
Burada Adafruit MQTT kütüphane şablonunu kullanacağız ve koddaki gerekli şeyleri değiştireceğiz. Aynı kod, yalnızca birkaç şeyi değiştirerek verileri Adafruit IO bulutuna yayınlamak ve abone olmak için kullanılabilir.Bunun için Adafruit MQTT kütüphanesini Sketch -> Include Library -> Manage Libraries'den indirin. Adafruit MQTT'yi arayın ve kurun. Kitaplığı kurduktan sonra. Örneklere gidin -> Adafruit mqtt kitaplığı -> mqtt_esp8266
Ardından bu kodu Raspberry Pi IP adresimize ve Wi-Fi kimlik bilgilerimize göre düzenleyin.
ESP8266WIFI ve Adafruit MQTT için tüm kitaplıkları dahil edin.
#Dahil etmek
Ardından, ESP-12e'nizi bağlamak istediğiniz Wi-Fi'niz için SSID ve Şifreyi tanımlayın. RPi ve NodeMCU'nuzun aynı ağa bağlandığından emin olun.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Bu bölüm Adafruit sunucusunu, bu durumda Raspberry Pi'nizin IP adresini ve sunucu portunu tanımlar.
#define AIO_SERVER "Pi'nizin ip adresi" #define AIO_SERVERPORT 1883
Adafruit bulutunu kullanmadığımız için aşağıdaki alanlar boş kalacaktır.
#define AIO_USERNAME "" #define AIO_KEY ""
Ardından, MQTT sunucusuna bağlanmak için bir ESP8266 WiFiClient sınıfı oluşturun.
WiFiClient istemcisi;
WiFi istemcisini ve MQTT sunucusunu ve oturum açma ayrıntılarını ileterek MQTT istemci sınıfını ayarlayın.
Adafruit_MQTT_Client mqtt (& müşteri, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Sıcaklığı yayınlamak için 'Sıcaklık' adlı bir besleme ayarlayın.
Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperature");
Değişikliklere abone olmak için 'led1' adlı bir besleme ayarlayın.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
In kurulum fonksiyonu, size çıktı almak istediğiniz NodeMCU PIN ilan ediyoruz. Ardından, NodeMCU'yu Wi-fi erişim noktasına bağlayın.
geçersiz kurulum () { Serial.begin (115200); gecikme (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demosu")); // WiFi erişim noktasına bağlanın. Serial.println (); Serial.println (); Serial.print ("Bağlanılıyor"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); süre (WiFi.status ()! = WL_CONNECTED) { …. …. … Led besleme için MQTT aboneliğini kurun. mqtt.subscribe (& led1); }
In döngü fonksiyonu, biz MQTT sunucusuna bağlantı MQTT_connect () kullanarak canlı olmasını sağlayacaktır; işlevi.
geçersiz döngü () { MQTT_connect ();
Şimdi, 'led' beslemesine abone olun ve dizeyi MQTT aracısından alın ve bu dizeyi atoi () kullanarak sayıya dönüştürün ; fonksiyonunu girin ve bu sayıyı digitalWrite () kullanarak LED pinine yazın; işlevi.
Adafruit_MQTT_Subscribe * aboneliği; while ((abonelik = mqtt.readSubscription (20000))) { if (subscription == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.lastread); int led1_State = atoi ((karakter *) led1.lastread); digitalWrite (LED, led1_State); }
Şimdi, bir değişken içindeki sıcaklığı alın ve bu değeri Temperature.publish (t) fonksiyonunu kullanarak yayınlayın.
float t = dht.readTemperature (); … .. if (! Temperature.publish (t)) { Serial.println (F ("Başarısız")); } else { Serial.println (F ("Tamam!")); }
Tanıtım videosu ile birlikte tam kod bu eğitimin sonunda verilmiştir. Kodu NodeMCU panosuna yükleyin ve Akıllı Telefona indirdiğiniz MQTT kontrol paneli uygulamasını açın.
Raspberry Pi GPIO'yu, bir sonraki derste öğreneceğimiz Adafruit IO, MQTT.IO gibi MQTT bulutunu kullanarak dünyanın her yerinden de kontrol edebilirsiniz.