Laboratorul 10. CoAP & MQTT

Internet of Things (IoT) este definit ca o colecție de noduri (things) care pot aduna informații din mediul în care se află, pot trimite aceste informații către o locație remote/locală și pot face anumite acțiuni.

Nodurile acestea sunt de obicei alimentate de la baterie, cu putere de procesare, memorie și lățime de bandă reduse. Nodurile sunt în general dispozitive embedded, identificate în mod unic, și conectate la Internet.

În acest laborator, vom utiliza două protocoale de comunicație frecvent utilizate în IoT.

CoAP

CoAP (Constrained Application Protocol) este un protocol de comunicare conceput pentru utilizarea în medii cu resurse limitate, în special în contextul IoT. Este folosit pe dispozitive cu resurse reduse (energie, memorie, lățime de bandă), și în rețelele cu pierderi de pachete.

CoAP funcționează peste UDP/IP și oferă un model simplu de interacțiune bazat pe cerere/răspuns, similar cu HTTP, ceea ce îl face potrivit pentru dispozitivele cu resurse limitate.

CoAP suportă cele 4 metode standard din HTTP, mai exact GET, POST, PUT și DELETE, care au aceeași semnificație cu cele din HTTP. De obicei nodul senzorial joacă rolul de server CoAP.

  • GET pentru a obține date de pe server
  • POST pentru a scrie o resursă de pe server
  • PUT pentru a actualiza o resursă de pe server
  • DELETE pentru a șterge o resursă de pe server

Există o multitudine de implementări software ale protocolului CoAP (Implementări), dar în acest laborator vom utiliza biblioteca CoAP-simple-library pentru Arduino IDE pentru a rula un server CoAP și implementarea Python CoAPthon pentru a rula un client CoAP.

O captură Wireshark arată cum rulează protocolul CoAP peste protocolul UDP:

MQTT

MQTT (Message Queuing Telemetry Transport) este un protocol de comunicare eficient din punct de vedere al consumului de energie și fiabil. A fost dezvoltat pentru a facilita schimbul de mesaje între dispozitive cu resurse limitate, conectate în rețele cu lățime de bandă redusă, fiind ideal pentru IoT.

MQTT este un protocol pentru transportul mesajelor de la un producător (publisher) la un consumator (subscriber). Spre deosebire de CoAP, care are o arhitectură client-server, MQTT folosește un intermediar (broker) pentru a livra mesajele de la producător la consumator.

MQTT funcționează pe baza conceptului de topic-uri. Un topic este un identificator unic care definește un subiect de interes (ex. temperatura).

Un dispozitiv care dorește să publice un mesaj se conectează la un broker MQTT. Brokerul este un server care intermediază comunicarea dintre clienții care publică și clienții care se abonează la mesaje.

Când un client publică un mesaj, acesta specifică topicul mesajului. Brokerul transmite apoi mesajul tuturor clienților abonați la acel topic.

Un client care dorește să se aboneze la mesaje se conectează la broker și specifică topicurile la care dorește să se aboneze. Când brokerul primește un mesaj pentru un topic la care un client este abonat, acesta transmite mesajul clientului.

CoAP vs. MQTT

În această figură avem o comparație vizuală între protocoalele CoAP și MQTT. La MQTT avem un singur broker și mai mulți clienți care pot fi publisheri și/sau subscriberi. La CoAP putem avea mai multe servere care generează date (de obicei nodurile senzoriale) și mai mulți clienți care obțin acele date.

Exerciții

Instalați Arduino IDE și adăugați board-ul ESP32 conform acestui tutorial, dar alegeți tipul board-ului esp32-wrover-kit (all) pentru Sparrow ESP32.

Ex. 1 CoAP

Dorim să folosim CoAP pentru a stinge și aprinde un LED pe placa ESP32. Pentru asta trebuie ca placa ESP32 să fie configurată ca server CoAP și să răspundă la cererile primite de la clienți CoAP (laptop/dispozitiv mobil).

Ex. 1.1. Serverul CoAP pe ESP32

Descărcați biblioteca CoAP-simple-library, dezarhivați-o și copiați-o în directorul cu biblioteci din Arduino IDE (de obicei în Documents/Arduino/libraries). Este necesară repornirea Arduino IDE după instalarea unei biblioteci direct în acel director, în loc să utilizați Library Manager.

Deschideți exemplul numit esp32 din biblioteca CoAP_simple_library și ajustați codul astfel încât LED-ul să fie aprins prin CoAP.

Pe placile Sparrow v1 (cele verzi), LED-ul este conectat la urmatoarele GPIO-uri:

  • GPIO 25 - rosu
  • GPIO 26 - verde
  • GPIO 27 - albastru

Pe Sparrow v2 (placile albastre), folositi urmatoarele GPIO-uri:

  • GPIO 13 - verde
  • GPIO 14 - rosu
  • GPIO 15 - albastru

GPIO-urile la care este conectat LED-ul functioneaza in logica negativa.

Conectați placa ESP32 la rețeaua WiFi (recomandăm să faceți un hotspot pe dispozitivul mobil, deoarece nu va merge cu rețeaua facultății). Completați în cod SSID-ul și parola rețelei.

Rețineți adresa IP obținută de ESP32 pentru a fi utilizată în clientul CoAP.

Portul implicit definit de CoAP este portul UDP 5683. În biblioteca CoAP_simple_library din Arduino IDE, portul este definit în fișierul libraries/CoAP_simple_library/coap-simple.h

#define COAP_DEFAULT_PORT 5683

Ex. 1.2. Clientul CoAP

Instalați pe laptop biblioteca CoAPthon3 din Python 3 folosind utilitarul pip:

python3 -mpip install CoAPthon3

Denumirea de CoAPthon este pentru Python 2 (nu se mai folosește).

Folosiți următoarea comandă pentru a aprinde și stinge LED-ul:

# pe sistemele *nix, pip a instalat coapclient.py în PATH
coapclient.py -o PUT -p "coap://192.168.1.151/light" -P "1"

Folosiți adresa IP a plăcii ESP32. Laptop-ul și placa ESP32 trebuie să fie conectate în aceeași rețea WiFi.

Ex. 2 MQTT

Dorim să controlăm LED-ul plăcii ESP32 prin protocolul MQTT. Placa ESP32 va avea rol de subscriber pe un anumit topic, iar laptopul va avea rol de publisher pe același topic. Astfel, prin mesajul MQTT trimis de la laptop vom aprinde și vom stinge LED-ul plăcii.

Instalați biblioteca PubSubClient din Library Manager al Arduino IDE și deschideți exemplul mqtt_esp8266.

Deși este scris pentru ESP8266, puteți rula programul pe ESP32 prin modificarea următoarei linii:

- #include <ESP8266WiFi.h>
+ #include <WiFi.h>

Placa ESP32 va folosi clientul MQTT pentru a se înregistra ca subscriber la topic-ul inTopic și pe laptop vom instala biblioteca paho-mqtt pentru a instanția un client MQTT în modul publisher. Pentru a instala paho-mqtt, utilizați următoarea comandă:

pip install paho-mqtt

Folosiți acest program Python pentru a aprinde și stinge LED-ul pe placa ESP32.

Veți utiliza broker-ul MQTT public de la adresa „test.mosquitto.org”, atât pentru clientul MQTT al ESP32, cât și pentru clientul Python. Din acest motiv, este important să schimbați numele topicului pentru a nu primi mesaje de la alte dispozitive din Internet care utilizează același server public.

Modificați topic-ul „inTopic” în „si-lab10-myLED-inTopic”.

Resources

si/laboratoare/10.txt · Last modified: 2024/01/11 08:53 by florin.stancu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0