- Ano ang MQTT?
- Pag-install ng Mosquitto MQTT Broker sa Raspberry Pi
- Pagsubok sa Raspberry Pi Mosquitto Broker
- Diagram ng Circuit
- Code at Paliwanag
Ang MQTT ay isang protokol na ginamit upang magpadala at tumanggap ng mga mensahe sa internet. Ginamit namin dati ang protokol na ito sa Iot Electricity meter at Raspberry Pi Alexa upang mai-publish ang data sa internet. Sa tutorial na ito malalaman namin ang tungkol sa MQTT at ang mga term na nauugnay dito. Dito ay gagamitin namin ang Raspberry Pi bilang lokal na MQTT broker at kontrolin ang isang LED na konektado sa NodeMCU ESP12E sa pamamagitan ng dashboard ng MQTT application. Ang isang sensor ng DHT11 ay konektado din sa NodeMCU kaya nakukuha namin ang pagbabasa ng temperatura at halumigmig sa MQTT dashboard, sa pamamagitan ng muling paggamit ng Raspberry Pi bilang lokal na MQTT broker.
Kaya, magsimula tayo sa pamamagitan ng pag-understate ng MQTT at ang mga term na nauugnay dito.
Ano ang MQTT?
Ang MQTT ay kumakatawan sa Message Queue Telemetry Transport na idinisenyo ng IBM. Ang protokol na ito ay simple at magaan na ginagamit upang magpadala at tumanggap ng mga mensahe sa internet at ito ay dinisenyo para sa mga aparato na may mababang paggamit ng bandwidth. Sa panahong ito ang protokol na ito ay madalas na ginagamit sa mga aparatong IoT upang maipadala at matanggap ang data ng mga sensor. Gayundin, Sa mga IoT na nakabatay sa mga system ng pag-aautomat ng bahay, ang protokol na ito ay madaling magamit nang hindi gumagamit ng maraming data sa internet.
Mayroong ilang mga term na kung saan ay madalas na ginagamit sa MQTT:
- Mag-subscribe at I-publish
- Mensahe
- Paksa
- Broker
1. Mag-subscribe at I-publish: Ang ibig sabihin ng pag-subscribe ay upang makuha ang data mula sa ibang aparato, at i-publish ang ibig sabihin nito upang maipadala ang data sa ibang aparato.
Kapag ang aparato1 ay nagpapadala ng data sa aparato2 pagkatapos ito ay kilala bilang Publisher at isa pa ay Subscriber at vice versa.
2. Mensahe: Ang mga mensahe ay ang impormasyong ipinapadala at tinatanggap namin. Maaari itong maging isang data o anumang uri ng utos. Halimbawa, kung nai-publish namin ang data ng temperatura sa cloud pagkatapos ang data ng temperatura na ito ay kilala bilang Mensahe.
3. Paksa: Ito ang paraan ng pagrehistro mo ng interes para sa papasok na mga mensahe o kung paano mo tinukoy kung saan mo nais na mai-publish ang mensahe. Ang mga paksa ay kinakatawan ng mga string na pinaghiwalay ng isang forward slash. Ang data ay nai-publish sa mga paksa gamit ang MQTT at pagkatapos mag-subscribe ang aparato ng MQTT sa paksa upang makuha ang data.
4. MQTT Broker: Ang bagay na ito ay responsable para sa pagtanggap ng lahat ng mga mensahe mula sa mga publisher, sinasala ang mga mensahe at pagkatapos ay i-publish ang mga mensahe sa mga tagasuskribi na interesado sa kanila.
Kapag ang broker na ito ay naka-host sa cloud pagkatapos ay tinatawag itong MQTT cloud. Maraming mga serbisyo na batay sa cloud na MQTT tulad ng Adafruit IO, MQTT.IO, IBM bluemix, Microsoft Azure, atbp. Ang MQTT ay maaari ding magamit sa sikat na Amazon AWS cloud, na ipinaliwanag namin sa Pagsisimula sa tutorial ng Amazon AWS.
Maaari kaming gumawa ng aming sariling MQTT broker gamit ang Raspberry Pi. Ito ang magiging lokal na MQTT broker ie maaari mong ipadala at matanggap ang data sa iyong lokal na network na hindi lamang mula saanman. Kaya dito mai-install namin ang Mosquitto MQTT broker sa Raspberry Pi upang gawin itong lokal na MQTT broker at ipadala ang data ng temperatura mula sa NodeMCU sa MQTT dashboard application. Gayundin, makokontrol namin ang isang LED na konektado sa NodeMCU gamit ang broker.
Pag-install ng Mosquitto MQTT Broker sa Raspberry Pi
Buksan ang terminal sa iyong Raspberry pi at i-type ang mga sumusunod na utos upang mai-install ang broker
sudo apt update sudo apt install -y mosquitto mosquitto-kliyente
Hintaying matapos ang pag-install. Ngayon, upang simulan ang broker sa pagsisimula ng raspberry pi, I-type ang sumusunod na utos
sudo systemctl paganahin ang mosquitto.service
Iyon lang, nakatakda kaming lahat upang ilunsad ang aming MQTT broker. Upang suriin ito ay naka-install nang maayos, ipasok ang sumusunod na utos
mosquitto -v
Ang utos na ito ay magbibigay sa iyo ng bersyon ng iyong MQTT broker. Dapat itong 1.4.x o mas mataas.
Pagsubok sa Raspberry Pi Mosquitto Broker
1. Patakbuhin ang Mosquitto broker sa background gamit ang command sa ibaba
mosquitto -d
2. Ngayon, mag-e-subscribe kami ng isang paksa sa halimbawa ng Topic gamit ang pagsunod sa utos
mosquitto_sub -d-halimbawaTopiko
3. Ngayon, maglalathala kami ng ilang mensahe sa halimbawa ng Topic
mosquitto_pub -d-halimbawaTopiko -m "Kumusta mundo!"
Matatanggap mo ang mundo ng Kamusta! Mensahe sa subscriber terminal.
Ngayon, oras na upang makontrol at makuha ang data mula sa isa pang aparato sa aming kaso gumagamit kami ng NodeMCU at MQTT dashboard application.
- Una ay makokontrol namin ang isang LED sa pamamagitan ng pagpapadala ng utos gamit ang App kaya sa kasong ito ang NodeMCU ay kumilos bilang isang subscriber at App bilang isang publisher.
- Pagkatapos ang ESP12E ay mayroon ding sensor ng DHT11 na konektado dito at ipinapadala nito ang pagbabasa ng temperatura sa application ng Mobile MQTT kaya sa kasong ito ang mobile ay ang magiging subscriber at ang NodeMCU ang magiging publisher. At upang ipasa ang mga mensaheng ito sa kani-kanilang mga Paksa, ginagamit ang Mosquitto MQTT broker.
Diagram ng Circuit
Ikonekta ang circuit tulad ng ipinakita sa diagram. Dito ginagamit ang DHT11 para sa mga pagbabasa ng temperatura ngunit maaari ding magamit ang isang sensor ng Temperatura ng LM35. Gumamit na kami ng DHT11 sensor sa marami sa aming mga proyekto kasama ang NodeMCU upang bumuo ng isang istasyon ng panahon.
Magsisimulang magsulat ng code para sa NodeMCU upang mag-subscribe at mai-publish ang data.
Code at Paliwanag
Dito ay gagamitin namin ang template ng library ng Adafruit MQTT at babaguhin ang mga kinakailangang bagay sa code. Ang parehong code ay maaaring magamit upang mai-publish at mag-subscribe ang data sa Adafruit IO cloud sa pamamagitan lamang ng pagbabago ng ilang mga bagay.Para sa pag-download na ito ng Adafruit MQTT library mula sa Sketch -> Isama ang Library -> Pamahalaan ang Mga Aklatan. Maghanap ng Adafruit MQTT at i-install ito. Matapos mai-install ang library. Pumunta sa mga halimbawa -> Adafruit mqtt library -> mqtt_esp8266
Pagkatapos ay i-edit ang code na ito alinsunod sa aming Raspberry Pi IP address at mga kredensyal sa Wi-Fi.
Isama ang lahat ng mga library para sa ESP8266WIFI at Adafruit MQTT .
# isama
Pagkatapos tukuyin ang SSID at Password para sa iyong Wi-Fi, kung saan nais mong ikonekta ang iyong ESP-12e. Tiyaking kumokonekta ang iyong RPi at NodeMCU sa parehong network.
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
Tinutukoy ng seksyong ito ang Adafruit server, sa kasong ito ang IP address ng iyong Raspberry Pi at server port.
#define AIO_SERVER "ip address ng iyong Pi" #define AIO_SERVERPORT 1883
Ang mga patlang sa ibaba ay mananatiling walang laman dahil hindi namin ginagamit ang ulap ng Adafruit.
#define AIO_USERNAME "" #define AIO_KEY ""
Pagkatapos ay lumikha ng isang klase ng ESP8266 WiFiClient upang kumonekta sa MQTT server.
Client ng WiFiClient;
I-setup ang klase ng kliyente ng MQTT sa pamamagitan ng pagpasa sa client ng WiFi at MQTT server at mga detalye sa pag-login.
Adafruit_MQTT_Client mqtt (& client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
I-setup ang isang feed na tinatawag na 'Temperatura' para sa pag-publish ng temperatura.
Adafruit_MQTT_Publish Temperatura = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / temperatura");
I-setup ang isang feed na tinatawag na 'led1' para sa pag-subscribe sa mga pagbabago.
Adafruit_MQTT_Subscribe led1 = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / led");
Sa pag- andar sa pag- setup , idineklara namin ang PIN ng NodeMCU kung saan mo nais na makakuha ng output. Pagkatapos, ikonekta ang NodeMCU sa Wi-fi access point.
void setup () { Serial.begin (115200); antala (10); pinMode (LED, OUTPUT); Serial.println (F ("Adafruit MQTT demo")); // Kumonekta sa access point ng WiFi. Serial.println (); Serial.println (); Serial.print ("Kumokonekta sa"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); habang (WiFi.status ()! = WL_CONNected) { …. …. … I- setup ang subscription ng MQTT para sa led feed. mqtt.subscribe (& led1); }
Sa pag- andar ng loop , titiyakin namin na ang koneksyon sa MQTT server ay buhay na gamit ang MQTT_connect (); pagpapaandar
void loop () { MQTT_connect ();
Ngayon, mag-subscribe 'feed' feed at makuha ang string mula sa MQTT broker at i-convert ang string na ito sa numero gamit ang atoi (); pagpapaandar at isulat ang numerong ito sa LED pin gamit ang digitalWrite (); pagpapaandar
Adafruit_MQTT_Subscribe * subscription; habang ((subscription = mqtt.readSubscription (20000))) { kung (subscription == & led1) { Serial.print (F ("Got:")); Serial.println ((char *) led1.last); int led1_State = atoi ((char *) led1.lastread); digitalWrite (LED, led1_State); }
Ngayon, kunin ang temperatura sa isang variable at i-publish ang halagang ito gamit ang pag- andar ng Temperature.publish (t) .
float t = dht.readTemperature (); … .. kung (! Temperatura.publish (t)) { Serial.println (F ("Nabigo")); } iba pa { Serial.println (F ("OK!")); }
Ang buong code na may isang demonstration video ay ibinibigay sa pagtatapos ng tutorial na ito. I-upload ang code sa board ng NodeMCU at buksan ang MQTT dashboard app na na-download mo sa Smartphone.
Maaari mo ring kontrolin ang Raspberry Pi GPIO mula sa kahit saan sa mundo gamit ang MQTT cloud tulad ng Adafruit IO, MQTT.IO atbp, na matututunan natin sa susunod na tutorial.