- MQTT Protokolü nedir?
- MQTT Nasıl Çalışır?
- Eclipse Mosquitto komisyoncusu
- Gerekli Bileşenler
- Eclipse MQTT Test Devresi - Şematik
- Broker ile İletişim Kurmak için ESP8266'nın Programlanması
- Arduino kullanarak MQTT'yi ESP8266 ile test etme
Geçtiğimiz birkaç yıl içinde IoT (Nesnelerin İnterneti) cihazları günlük hayatımızın ayırt edilemez bir parçası haline geldi. Akıllı evlerden akıllı ampullere, akıllı cihazlara; içerik oluşturucular ve geliştiriciler, günlük hayatımızı biraz daha heyecanlı kılan bağlı cihazlardan oluşan bir ağ oluşturmak için bu teknolojiyi kullanıyor. Tüm bunlar, iletişim kolaylığı nedeniyle mümkün olmuştur. Cihazlar arasında iletişim kurmanın birçok olası yolu vardır, ancak ticari ve hobi ürünlerinde yaygın olarak kullanılan tek bir protokol, Message Queuing Telemetri Aktarımı'dır (MQTT). Daha önce, NodeMCU kartıyla iletişim kurmak için MQTT kullanan Arduino ve Google Assistant kullanarak Ses Kontrollü FM Radyo oluşturduk. Size ilginç gelip gelmediğini kontrol edin.
Bu projede, ücretsiz ve popüler bir Eclipse MQTT aracısı kullanacağız ve bir IoT cihazını (bizim durumumuzda bu bir NodeMCU modülü) bir MQTT aracısına nasıl bağlayacağımızı ve MQTT aracısı ile NodeMCU arasında veri aktarmayı öğreneceğiz.
MQTT Protokolü nedir?
Daha fazla ilerlemeden önce, MQTT (Message Queuing Telemetri Aktarımı) protokolü hakkında net bir fikre sahip olmak daha iyidir. Yayınlama / abone olma yöntemini kullanan ve mesajları birden çok cihaz arasında çeviren hafif bir mesajlaşma protokolüdür. MQTT protokolünü kullanarak ayrıca veri gönderebilir / alabilir ve sensör verilerini okumak gibi çeşitli çıktı cihazlarını kontrol edebiliriz. TCP üzerinde geliştirilmiştir, bu nedenle HTTP gibi benzer protokollerden daha hızlıdır. Bunun dışında, çok hafif olması gibi diğer protokollere göre başka birçok avantajı vardır, bu nedenle fazla bellek tüketmez, çok daha az ağ bant genişliğiyle çalışabilir, üstelik yerleşik sağlam bir güvenlik protokolüne sahiptir. Bu özellikler onu birçok uygulama için uygun hale getirir.
MQTT Nasıl Çalışır?
MQTT protokolünün çalışmasını anlamak için, sadece üç temel şeyi anlamamız gerekiyor; yukarıdaki şema bunu göstermektedir. Ayrıca aşağıda yazımızda anlattık.
MQTT İstemcisi:
Bir MQTT istemci herhangi bir cihaz olarak bilinir merkezi sunucuya sahip MQTT fonksiyonları ve iletişim kurar çalıştırır (bir mikrodenetleyici veya sunucu olabilir) 'dir “ komisyoncu ”. Aracı, bağlı istemciler arasındaki veri iletişimini yönetir.
MQTT Yayıncısı:
Bir müşteri herhangi bir bilgi göndermek istediğinde, müşteri "Yayıncı" olarak bilinir. Yayıncı, belirli bir konuyla ilgili bilgileri yayınlayacaktır. " Konu ", mesajları yayınlayabileceğimiz / abone olabileceğimiz bir yoldur. Aracı daha sonra kullanıcı tarafından yayınlanan bilgileri, söz konusu belirli konuya abone olan istemcilere (Abone olarak da bilinir) gönderir.
MQTT Abonesi:
MQTT Abone bir de konulara abone MQTT komisyoncu tarafından gönderilen mesajları okumak için komisyoncu.
Eclipse Mosquitto komisyoncusu
Eclipse Mosquitto, hafif ve iletişim için IoT cihazlarında kullanıma uygun açık kaynaklı bir MQTT aracısıdır. MQTT protokol a / modelini abone yayınlayamaz kullanarak bilgi aktarma hafif bir yöntem sağlar. Konu hakkında daha fazla bilgi edinmek isterseniz resmi sivrisinek web sitesini ziyaret edebilirsiniz.
Eclipse Mosquitto aracısını kurma:
Broker ile iletişim kurmak için önce onu kurmamız gerekiyor. Bu projede, Broker ile bilgileri yayınlamak ve abone olmak için bir Android uygulaması kullanılmaktadır. Aşağıdaki adımlar size kurulum süreci hakkında daha iyi bir fikir verecektir.
Aşama 1:
Öncelikle, Google Play Store / App Store'da bulunan herhangi bir "MQTT istemci" uygulamasını indirin ve kurun. Bu projede, aşağıda gösterilen resme benzeyen “MQTT client” adlı bir uygulama kullanılmıştır.
Adım 2:
Yeni bir komisyoncu ekleyeceğimiz uygulamadaki ek seçenekleri listelemek için “+” işaretine tıklayın. Düğmeye tıklandığında, aşağıda gösterildiği gibi yeni bir ekran açılır.
Aşama 3:
Daha sonra, komisyoncunun ayrıntılarının gerekli alana doldurulması gerekir. İlk önce, Uygulamada gösterilen "Etkin" seçeneğine tıklayın. Bu projede Eclipse MQTT komisyoncusu kullanılmış olup, doldurulması gereken detaylar aşağıda verilmiştir:
Takma Ad: Tercihinize Bir Ad Verin
Ana bilgisayar: mqtt.eclipse.org
Bağlantı noktası : 1883
Müşteri Kimliği: Tercihinize Bir Kimlik Verin
Yukarıdaki ayrıntıların ilgili alanlara doldurulması gerekir. Diğer tüm alanlar gerekli değildir ve boş bırakılabilir. Başarılı bir şekilde tamamlandıktan sonra, Broker ayrıntılarını kaydetmek için kaydet düğmesine tıklayın.
Bir kez bittiğinde, android uygulama kurulum süreci bitmiştir ve şimdi işlerin donanım tarafına geçebiliriz.
Gerekli Bileşenler
Gerekli parçaların tam listesi aşağıda açıklanmıştır. Bu devre basit olduğu için, gerekli tüm parçaları yerel hobi mağazanızda bulabilirsiniz.
- NodeMCU
- LED
- Breadboard
- Bağlantı telleri
- Programlama kablosu
Eclipse MQTT Test Devresi - Şematik
Temel MQTT projesi için devre şeması aşağıda verilmiştir:
Broker ile İletişim Kurmak için ESP8266'nın Programlanması
Basit bir Arduino kodu, MQTT aracısı ile NodeMCU arasındaki gerekli tüm iletişimleri halleder. Bu bölümde, bu işlevselliğin nasıl çalıştığını ayrıntılı olarak öğreneceğiz.
Arduino IDE'yi Kurun ve Kodu Yükleyin:
Kodu NodeMCU'ya ilk kez yüklüyorsanız, önce Arduino IDE'yi kurmanız gerekir. Bunu yapmak için, aşağıda verilen basit talimatı takip etmeniz yeterlidir.
Önce Arduino IDE'yi açın, ardından Dosya -> Tercihler -> Ayarlar'a gidin .
Ardından, aşağıdaki URL'yi kopyalayın ve 'Ek Pano Yöneticisi URL'si ' alanına yapıştırın ve ' Tamam'ı tıklayın. Bunu nasıl yaptığımızı öğrenmek için aşağıdaki resme bakabilirsiniz.
Bağlantı:
Ardından, Araçlar> Pano> Pano Yöneticisi'ne gidin . Board's Manager penceresinde, arama kutusuna ESP 8266 yazın ve enter tuşuna basın. Ardından açılır menüden en son sürümü seçin ve kur'a tıklayın. Aşağıdaki resim size net bir fikir verecektir.
Son olarak, kurulum tamamlandığında, Araçlar -> Pano -> seçeneğine gidin ve NodeMCU 1.0'ı (ESP-12E Modülü) seçin. Artık NodeMCU'yu Arduino IDE ile programlayabilirsiniz. Arduino IDE'yi kurmayı bitirdiğimiz için, şimdi kodun tamamını yükleyebiliriz. Ama önce tüm kodun hızlı açıklamasını okuyun.
İlk olarak, ESP8266'yı kullanmak için "ESP8266WiFi.h" ve MQTT için "PubSubClient.h" ekledik.
ESP8266 kitaplığını önceden oluşturulmuş Arduino kitaplığı içinde bulabilirsiniz, ancak PubSubClient kitaplığını ilişkili GitHub deposundan indirmeniz gerekir.
#Dahil etmek
Ardından, Wi-Fi kullanıcı adınız ve şifreniz gibi ağ kimlik bilgilerini tanımlayın. Kimlik bilgilerinizi sırasıyla "yönetici" ve "12345678" yerine değiştirin.
const char * ssid = "yönetici"; const char * şifre = "12345678";
Ardından, MQTT sunucusunu yapılandırmamız gerekiyor. Bu proje için Eclipse MQTT sunucusunu kullandık, bu nedenle sunucu adresi “mqtt.eclipse.org” olarak verilmiştir . Ancak Mosquitto, Adafruit gibi başka bir sunucuyu kullanmayı planlıyorsanız, bunu kendi özel sunucu adresiniz ve bağlantı noktası numaranızla değiştirebilirsiniz.
const char * mqtt_server = "mqtt.eclipse.org"; const int mqtt_port = 1883;
Ardından, program boyunca kullanılacak olan WiFiClient ve PubSubClient sınıfı için örnekler oluşturulur.
WiFiClient espClient; PubSubClient istemcisi (espClient);
In kurulum () bölümünde, dediğimiz WiFi.begin () Tercih HotSpot için ESP bağlayacak bu yöntemi çağıran ilk.
WiFi.begin (ssid, şifre);
Ardından, WiFi.status () yöntemini kullanarak başarılı bir ağ bağlantısı olup olmadığını kontrol ederiz . Başarılı bir bağlantıdan sonra, bağlı ağın SSID'si ile Seri Monitöre bir mesaj yazdırılır.
while (WiFi.status ()! = WL_CONNECTED) {gecikme (500); Serial.println ("WiFi'ye Bağlanıyor.."); } Seri.print ("WiFi'ye Bağlı:"); Serial.println (WiFi.SSID ());
Şimdi bir komisyoncu oluşturmamız gerekiyor. Bunun için setServer yöntemini kullandık; bu yöntem önceden tanımladığımız iki argümanı alır. Şimdi, sunucudan mesaj almak istiyorsak, bir geri arama fonksiyonu oluşturmamız gerekiyor . Bunun için setCallback (geri arama) yöntemini kullanıyoruz.
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Şimdi, ESP8266 istemcisine bağlanmak için connect (clientID) işlevini kullandık. Burada clientID, istemcinin adıdır ve benzersiz olmalıdır. Bağlıysa, seri monitörün içinde bir başarı mesajı gösterilebilir.
eğer (client.connect ("ESP8266")) {Serial.println ("bağlı"); } else {Serial.print ("durumla başarısız oldu") Serial.println (client.state ()); gecikme (2000); }
Sonra, çağrı ) (client.subscribe , yerleşik bir belirli bir konu abone için kullanılan MQTT fonksiyonu. Bu proje için abone adımız olarak " esp / test " kullandık.
client.subscribe ("esp / test");
Şimdi, güncellenmiş herhangi bir bilginin mevcut olup olmadığını kontrol etmek için MQTTcallback işlevi çağrılır. Yeni veri mevcutsa, bu işlev alınan verileri işler ve seri monitörde orijinal mesaj ve mesajın alındığı konu adıyla bir mesaj yazdırır.
Daha sonra, herhangi bir tetikleyici eylem için karşılaştırılabilmesi ve kontrol edilebilmesi için mesajları bir dizeye dönüştürüyoruz. Bu projede, aşağıdaki kodda gösterildiği gibi, MQTT komutları kullanılarak bir LED AÇIK / KAPALI konuma getirilir.
for (int i = 0; i <uzunluk; i ++) {mesaj = mesaj + (karakter) yük; } Seri.baskı (mesaj); eğer (mesaj == "açık") {digitalWrite (LED, HIGH); }
Son olarak, konuyla ilgili bilgileri yayınlamak. Client.publish () fonksiyonu kullanılır. Bu projede, bir buton durumu kontrol edilir, eğer butona basılırsa, aşağıda gösterildiği gibi bir Konu " esp / test1 " için bir mesaj yayınlanır.
if (digitalRead (D1) == 0)) {client.publish ("esp / test1", "ESP8266'dan Merhaba"); } Başka; client.loop ();
Arduino kullanarak MQTT'yi ESP8266 ile test etme
Son testimiz için daha önce kurduğumuz Android uygulamasını kullanacağız.
MQTT istemci uygulamasını açın ve cep telefonunuzun aktif bir internet bağlantısına sahip olduğundan emin olun. Ayrıca, NodeMCU'nun bağlı olduğu ortak erişim noktasının aktif bir internet bağlantısı olması gerekir. Her şey internete bağlandıktan sonra, ESP modülünden Android uygulamasına yansıtılacak "ESP8266'dan Merhaba" dizesi göndereceğiz ve bir bildirim alacağız. Ardından, Android uygulamasından ESP8266 Node MCU kartına bağlı bir LED'i AÇACAK bir dizi göndereceğiz.
Adım-1: (Konuya Abone Ol):
Daha önce yapılandırdığımız Uygulamada Kaydedilmiş MQTT seçeneğine tıklayın. "Bir Konuya Abone Ol" seçeneğinin sorulduğu bir ekran açılacaktır . Konuyu daha önce " esp / test1 " olarak yapılandırmıştık. Dolayısıyla, Android uygulamasında " esp / test1 " yazacağız. Abone Ol'a tıklayın, böyle yapmak size aşağıdaki gibi bir ekran sunacak ve belirli bir Konudan "Mesaj alınmadı" gibi yazılacaktır.
Şimdi, nodeMCU'ya bağlı olan 'Bağlandı' düğmesine tıklayın. Şimdi kodumuza göre, Konu başlığında “ ESP8266'dan Merhaba ” mesajı yayınlanacak ve aşağıda gösterildiği gibi alınan mesajla birlikte ekranda bir bildirim olacaktır.
Adım-2: Konuya Yayınlayın:
Şimdi Konu içinde yayınlamak için, Uygulamanın YUKARI OK düğmesine tıklayın ve aşağıda gösterildiği gibi bir ekran açılacaktır.
Şimdi, Konu alanına " esp / test " yazın ve mesaj alanına LED'i sırasıyla açmak ve kapatmak için " açık " veya " kapalı " yazın. Örneğin, Konu Konusunda "açık" yayınlanırsa, LED yanar ve Konuda "kapalı" yayınlanırsa, LED kapatılır.
Umarım makaleyi beğenmiş ve yeni bir şeyler öğrenmişsindir. Bu makaleyle ilgili herhangi bir sorunuz varsa, lütfen aşağıya yorum yapmaktan çekinmeyin veya bunun yerine forumumuzu kullanabilirsiniz.