- Ano ang MQTT Protocol?
- Paano gumagana ang MQTT?
- Ang Eclipse Mosquitto broker
- Kinakailangan ang Mga Bahagi
- Eclipse MQTT Test-Circuit - Schematic
- Programming ESP8266 upang maitaguyod ang Komunikasyon sa Broker
- Pagsubok sa MQTT kasama ang ESP8266 gamit ang Arduino
Sa nakaraang ilang taon, ang mga aparato ng IoT (Internet of Things) ay naging isang hindi makikilalang bahagi ng ating pang-araw-araw na buhay. Mula sa mga matalinong bahay, matalinong mga bombilya hanggang sa mga matalinong kasangkapan; isinasama ng mga tagalikha at developer ang teknolohiyang ito upang lumikha ng isang network ng mga konektadong aparato na ginagawang mas kapana-panabik ang aming pang-araw-araw na buhay. Ang lahat ng ito ay ginawang posible dahil sa kadalian ng komunikasyon. Maraming mga posibleng paraan upang makipag-usap sa mga aparato, ngunit sa mga produktong komersyal at libangan, ang isang solong protokol na karaniwang ginagamit ay ang Message Queuing Telemetry Transport (MQTT). Nakagawa kami dati ng isang Radio na FM na Kinokontrol ng Boses gamit ang Arduino at Google Assistant na gumagamit ng MQTT upang makipag-usap sa board ng NodeMCU. Suriin ito kung nakakainteres iyon sa iyo.
Sa proyektong ito, gagamit kami ng isang libre at tanyag na Eclipse MQTT broker at matutunan kung paano ikonekta ang isang aparato ng IoT (sa aming kaso, ito ay isang module na NodeMCU) sa isang MQTT broker at maglipat ng data sa gitna ng MQTT broker at NodeMCU.
Ano ang MQTT Protocol?
Bago kami magpatuloy sa anumang karagdagang, mas mahusay na magkaroon ng isang malinaw na ideya tungkol sa MQTT (Mensahe ng Pagtawag sa Telemetry Transport) na protocol. Ito ay isang magaan na protokol na pagmemensahe na gumagamit ng paraan ng pag-publish / pag-subscribe at isinalin ang mga mensahe sa pagitan ng maraming mga aparato. Gamit ang MQTT protocol, maaari rin kaming magpadala / makatanggap ng data at makontrol ang iba't ibang mga aparato ng output, tulad ng basahin ang data ng sensor, atbp. Binuo ito sa tuktok ng TCP, kaya't mas mabilis ito kaysa sa mga katulad na protokol tulad ng HTTP. Maliban dito, mayroon itong maraming iba pang mga kalamangan kaysa sa iba pang mga protokol tulad ng napaka-magaan nito, kaya't hindi ito kumakain ng labis na memorya, maaari itong gumana nang may mas kaunting bandwidth ng network, bukod dito, mayroon itong isang matatag na security proteksyon na inbuilt. Ginagawa itong mga tampok na angkop para sa maraming mga application.
Paano gumagana ang MQTT?
Upang maunawaan ang pagtatrabaho ng MQTT protocol, kailangan lang naming maunawaan ang tatlong pangunahing mga bagay; ipinapakita iyon ng diagram sa itaas. Gayundin, ipinaliwanag namin ito sa ibaba sa artikulo.
MQTT Client:
Ang isang MQTT client ay anumang aparato (maaari itong maging isang microcontroller o isang server) na nagpapatakbo ng mga pagpapaandar ng MQTT at nakikipag-usap sa isang gitnang server, na kilala bilang " broker." Hawak ng broker ang komunikasyon sa data sa pagitan ng mga nakakonektang kliyente.
MQTT Publisher:
Kapag nais ng isang kliyente na magpadala ng anumang impormasyon, ang kliyente ay kilala bilang isang "Publisher". Lathala ng publisher ang impormasyon sa isang partikular na paksa. Ang " Paksa " ay isang landas kung saan maaari kaming mai-publish / mag-subscribe ng mga mensahe. Nagpadala ang broker ng impormasyong nai-publish ng gumagamit sa mga kliyente (kilala rin bilang Subscriber) na nag-subscribe sa partikular na paksa.
MQTT Subscriber:
Ang MQTT Subscriber ay nag- subscribe sa mga paksa sa isang MQTT broker upang basahin ang mga mensahe na ipinadala ng broker.
Ang Eclipse Mosquitto broker
Ang Eclipse Mosquitto ay isang open-source MQTT broker, na magaan at angkop para magamit sa mga IoT device para sa komunikasyon. Nagbibigay ang MQTT protocol ng isang magaan na pamamaraan ng paglilipat ng impormasyon gamit ang isang i-publish / mag-subscribe na modelo. Kung nais mong malaman ang tungkol sa paksa, maaari mong bisitahin ang opisyal na website ng lamok.
Pag-set up ng Eclipse Mosquitto broker:
Upang maitaguyod ang komunikasyon sa broker, kailangan muna naming i-set up ito. Sa proyektong ito, ginagamit ang isang application na Android upang mai - publish at mag- subscribe sa impormasyon sa Broker. Ang mga sumusunod na hakbang ay magbibigay sa iyo ng isang mas mahusay na ideya ng proseso ng pag-setup.
Hakbang-1:
Una, mag-download ng anumang application na "MQTT client" na magagamit sa Google Play Store / App Store at i-install ito. Sa proyektong ito, ginagamit ang isang application na pinangalanang "MQTT client", na mukhang ang imaheng ipinakita sa ibaba.
Hakbang-2:
Mag-click sa tanda na “+” upang ilista ang mga karagdagang pagpipilian sa application, kung saan kami ay magdaragdag ng isang bagong broker. Kapag na-click ang pindutan, lilitaw ang isang bagong screen tulad ng ipinakita sa ibaba.
Hakbang-3:
Pagkatapos nito, ang mga detalye ng broker ay kailangang mapunan sa kinakailangang larangan. Una, mag-click sa opsyong "Pinagana" na ipinapakita sa Application. Sa proyektong ito, ginagamit ang Eclipse MQTT broker, ang mga detalye na mapupunan ay ibinibigay sa ibaba:
Pangalan ng Nick: Magbigay ng isang Pangalan ng Iyong Kagustuhan
Host: mqtt.eclipse.org
Port: 1883
Client ID: Magbigay ng isang ID ng Iyong Kagustuhan
Ang mga detalye sa itaas ay kailangang punan sa kani-kanilang mga patlang. Ang lahat ng iba pang mga patlang ay hindi kinakailangan at maaaring iwanang blangko. Matapos ang matagumpay na pagkumpleto, mag-click sa pindutang i-save upang mai-save ang mga detalye ng Broker.
Kapag tapos na, ang proseso ng pag-setup ng android application ay tapos na at ngayon ay maaari na tayong lumipat sa panig ng hardware ng mga bagay.
Kinakailangan ang Mga Bahagi
Ang isang kumpletong listahan ng mga kinakailangang bahagi ay inilarawan sa ibaba. Dahil ang circuit na ito ay simple, mahahanap mo ang lahat ng kinakailangang bahagi sa iyong lokal na tindahan ng libangan.
- NodeMCU
- LED
- Breadboard
- Mga kumokonekta na mga wire
- Cable ng programa
Eclipse MQTT Test-Circuit - Schematic
Ang circuit diagram para sa pangunahing proyekto ng MQTT ay ibinibigay sa ibaba:
Programming ESP8266 upang maitaguyod ang Komunikasyon sa Broker
Ang isang simpleng Arduino code ay nangangalaga sa lahat ng kinakailangang mga komunikasyon sa pagitan ng MQTT broker at ng NodeMCU. Sa seksyong ito, malalaman natin kung paano gumana nang detalyado ang pagpapaandar na ito.
I-setup ang Arduino IDE at I-upload ang Code:
Kung ina- upload mo ang code sa NodeMCU sa kauna-unahang pagkakataon, kailangan mong i-set-up muna ang Arduino IDE. Upang gawin iyon, sundin lamang ang simpleng tagubilin na ibinigay sa ibaba.
Una, Buksan ang Arduino IDE, pagkatapos ay pumunta sa File–> Mga Kagustuhan–> Mga setting .
Susunod, kopyahin ang nasa ibaba URL at i-paste ito sa patlang na 'Karagdagang Board Manager URL ', at i-click ang 'Ok'. Maaari mong suriin ang imahe sa ibaba upang malaman kung paano namin nagawa iyon.
Link:
Susunod, pumunta sa Tools> Board> Boards Manager . Sa window ng Manager's Board, I-type ang ESP 8266 sa search box at pindutin ang enter. Pagkatapos piliin ang pinakabagong bersyon mula sa dropdown at mag-click sa pag-install. Ang imahe sa ibaba ay magbibigay sa iyo ng isang malinaw na ideya.
Sa wakas, sa sandaling nakumpleto ang pag-install, pumunta sa Tools -> Board -> at piliin ang NodeMCU 1.0 (ESP-12E Module). Ngayon, maaari mong i-program ang NodeMCU sa Arduino IDE. Dahil natapos namin ang pag-set up ng Arduino IDE, maaari na naming i-upload ang kumpletong code. Ngunit una, basahin ang mabilis na paliwanag ng buong code.
Una, isinama namin ang "ESP8266WiFi.h" para sa paggamit ng ESP8266 at "PubSubClient.h" para sa MQTT.
Maaari mong makita ang buo ng aklatan ng ESP8266 sa loob ng Arduino library, ngunit kailangan mong i-download ang library ng PubSubClient mula sa nauugnay na Repository ng GitHub.
# isama
Pagkatapos, tukuyin ang mga kredensyal sa network tulad ng iyong Wi-Fi username at password. Palitan ang iyong mga kredensyal sa lugar ng “admin” at “12345678” ayon sa pagkakabanggit.
const char * ssid = "admin"; const char * password = "12345678";
Susunod, kailangan naming i-configure ang MQTT server. Ginamit namin ang server ng Eclipse MQTT para sa proyektong ito, na ang dahilan kung bakit ibinigay ang server address bilang "mqtt.eclipse.org". Ngunit kung plano mong gumamit ng anumang iba pang server tulad ng Mosquitto, Adafruit, maaari mo itong palitan ng iyong tukoy na address ng server at numero ng port.
const char * mqtt_server = "mqtt.eclipse.org"; Const int mqtt_port = 1883;
Susunod, ang mga pagkakataong nilikha para sa klase ng WiFiClient at PubSubClient , na gagamitin sa buong programa.
WiFiClient espClient; PubSubClient client (espClient);
Sa seksyon ng pag- setup () , tawagan muna namin ang WiFi.begin () , ang pagtawag sa pamamaraang ito ay ikonekta ang ESP sa iyong ginustong HotSpot.
WiFi.begin (ssid, password);
Susunod, susuriin namin ang isang matagumpay na koneksyon sa network gamit ang pamamaraang WiFi.status () . Pagkatapos ng isang matagumpay na koneksyon, isang mensahe ay nai-print sa Serial Monitor gamit ang SSID ng konektadong network.
habang (WiFi.status ()! = WL_CONNected) {pagkaantala (500); Serial.println ("Kumokonekta sa WiFi.."); } Serial.print ("Nakakonekta sa WiFi:"); Serial.println (WiFi.SSID ());
Ngayon, kailangan naming lumikha ng isang broker. Para doon, ginamit namin ang pamamaraan ng setServer ; ang pamamaraang ito ay tumatagal ng dalawang mga argumento na naunang natukoy na namin nang mas maaga. Ngayon, kung nais naming makatanggap ng mga mensahe mula sa server, kailangan naming lumikha ng isang function ng callback. Para doon , gumagamit kami ng pamamaraan ng setCallback (callback) .
client.setServer (mqtt_server, mqtt_port); client.setCallback (MQTTcallback);
Ngayon, ginamit namin ang function na kumonekta (clientID) upang kumonekta sa kliyente ng ESP8266. Dito clientID ang pangalan ng kliyente, at dapat itong maging natatangi. Kung nakakonekta ito, maaaring ipakita ang isang mensahe sa tagumpay sa loob ng serial monitor.
kung (client.connect ("ESP8266")) {Serial.println ("konektado"); } iba pa {Serial.print ("nabigo sa estado") Serial.println (client.state ()); pagkaantala (2000); }
Susunod, tinawag namin ang client.subscribe () , isang built-in na pagpapaandar ng MQTT, na ginagamit upang mag-subscribe sa isang partikular na paksa. Para sa proyektong ito, ginamit namin ang " esp / test " bilang aming pangalan ng subscriber.
client.subscribe ("esp / test");
Ngayon, ang pagpapaandar ng MQTTcallback ay tinawag upang suriin kung ang anumang na-update na impormasyon ay magagamit o hindi. Kung may magagamit na bagong data, hinahawakan ng pagpapaandar na ito ang natanggap na data at naglilimbag ng isang mensahe sa serial monitor na may orihinal na mensahe at pangalan ng paksa kung saan natanggap ang mensahe.
Susunod, iko-convert namin ang mga mensahe sa isang string, upang maihambing at ma-check ito para sa anumang mga pagkilos na nagpapalitaw. Sa proyektong ito, ang isang LED ay naka-ON / OFF gamit ang mga utos ng MQTT, tulad ng ipinakita sa code sa ibaba.
para sa (int i = 0; i <haba; i ++) {message = message + (char) payload; } Serial.print (mensahe); kung (mensahe == "nasa") {digitalWrite (LED, HIGH); }
Panghuli, upang mai-publish ang impormasyon sa paksa. Ang client.publish () function ay ginagamit. Sa proyektong ito, isang katayuan ng push-button ang nasuri, kung ang pindutan ay pinindot, pagkatapos ang isang mensahe ay nai-publish sa isang Paksa na " esp / test1 " tulad ng ipinakita sa ibaba.
kung (digitalRead (D1) == 0)) {client.publish ("esp / test1", "Kumusta mula sa ESP8266"); } iba pa; client.loop ();
Pagsubok sa MQTT kasama ang ESP8266 gamit ang Arduino
Para sa aming panghuling pagsubok, gagamitin namin ang Android application, na na-set up namin nang mas maaga.
Buksan ang application ng MQTT client, at tiyaking ang iyong mobile ay may isang aktibong koneksyon sa internet. Gayundin, ang hotspot kung saan nakakonekta ang NodeMCU ay dapat magkaroon ng isang aktibong koneksyon sa internet. Kapag ang lahat ay konektado sa internet, magpapadala kami ng isang "Kamusta mula sa ESP8266" na string mula sa module ng ESP, na makikita sa loob ng Android app, at makakakuha kami ng isang abiso. Susunod, magpapadala kami ng isang string mula sa Android app, na i-ON ang isang LED na konektado sa board ng ESP8266 Node MCU.
Hakbang-1: (Mag-subscribe sa Paksa):
Mag-click sa pagpipilian na Nai-save na MQTT sa App, na na-configure namin nang mas maaga. Ito ay pop up ng isang screen, kung saan ito ay na-prompt upang "Mag-subscribe sa isang Paksa". Na-configure namin dati ang paksa bilang " esp / test1 ". Kaya, sa Android app, magsusulat kami ng " esp / test1 ". Mag-click sa Mag-subscribe, ang paggawa nito ay magpapakita sa iyo ng isang screen tulad ng sa ibaba, kung saan isusulat ito tulad ng "Walang natanggap na mensahe" mula sa partikular na Paksa.
Ngayon, i-click ang pindutang 'Nakakonekta' na konektado sa nodeMCU. Ngayon alinsunod sa aming code, isang mensahe na " Kamusta mula sa ESP8266 " ay mai-publish sa Paksa at magkakaroon ng isang abiso sa screen na may natanggap na mensahe tulad ng ipinakita sa ibaba.
Hakbang-2: I-publish sa Paksa:
Ngayon upang mai-publish sa Paksa, Mag-click sa pindutan ng UP ARROW ng Application, at magbubukas ito ng isang screen tulad ng ipinakita sa ibaba.
Ngayon, Sa larangan ng Paksa, isulat ang " esp / test " at sa patlang ng mensahe, isulat ang " on " o " off " upang i-on at i-off ang LED ayon sa pagkakabanggit. Halimbawa, kung ang "on" ay na-publish sa Paksa, pagkatapos ang LED ay bubuksan at kung ang "off" ay nai-publish sa Paksa, pagkatapos ang LED ay papatayin.
Inaasahan kong nagustuhan mo ang artikulo at may natutunan na bago. Kung mayroon kang anumang mga katanungan tungkol sa artikulong ito, mangyaring huwag mag-atubiling magbigay ng puna sa ibaba o maaari mong gamitin ang aming forum sa halip.