Table of Contents

Laborator 07. CoAP și MQTT

În acest laborator vom folosi două protocoale de comunicație des întâlnite în domeniul IoT.

CoAP

CoAP (Constrained Application Protocol) este un protocol de comunicație ce rulează peste protocolul UDP/IP, fiind folosit în domenii cu resurse limitate de curent (putere consumată) și cu posibile pierderi de pachete de rețea (lossy networks).

Există o sumedenie de implementări software a protocolului CoAP (Implementations), dar în acest laborator vom folosi biblioteca ”CoAP simple library” pentru Arduino IDE pentru a rula un server CoAP, și implementarea CoAPthon din Python pentru a rula un client CoAP.

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

MQTT

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

Exerciții

Ex. 1 - CoAP

Download-ați biblioteca CoAP-simple-library și copiați fișierele in directorul cu biblioteci din Arduino IDE (de obicei în Documents/Arduino/libraries). Este nevoie de un restart al aplicației Arduino IDE după instalarea unei biblioteci direct în acel director, în loc de a folosi Library Manager.

Deschideți exemplul numit “esp32” din biblioteca “CoAP simple library” și ajustați codul astfel încât LED-ul conectat la GPIO2 (sau GPIO5 pe unele plăcuțe) să fie aprins prin CoAP. Notați IP-ul obținut de ESP32 pentru a-l folosi din clientul de CoAP.

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

#define COAP_DEFAULT_PORT 5683

Instalați apoi biblioteca CoAPthon din Python cu ajutorul utilitarului PIP:

pip install CoAPthon

Pentru Python3 trebuie să instalați CoAPthon3

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

/usr/local/bin/coapclient.py -o PUT -p "coap://$ESP32_BOARD_IP/light" -P "1"

Ex. 2 (Opțional) - Android "IoT CoAP" application

Instalați aplicația “IoT CoAP” pentru a trimite mesaje către plăcuța ESP32.

Ex. 3 - MQTT

După ce instalați biblioteca “PubSubClient” din Library Manager al Arduino IDE, deschideți exemplul “mqtt_esp8266”.

Chiar dacă este scris pentru ESP8266, putem rula programul pe ESP32 modificând următoare linie:

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

Plăcuța ESP32 va folosi clientul MQTT pentru a înregistra un “subscriber” la topicul “inTopic”, iar de pe un calculator vom instala biblioteca “paho-mqtt” pentru a instanția un client de MQTT în modul “publisher”. Pentru a instala “paho-mqtt”, folosiți următoarea comandă:

pip install paho-mqtt

Folosiți acest program Python pentru a stinge/aprinde LED-ul de pe plăcuța ESP32.

Vom folosi un broker de MQTT public, la adresa “test.mosquitto.org”, atât pentru clientul MQTT de pe ESP32 cât și pentru clientul Python. Din acest motiv, este important să schimbăm numele topic-urilor pentru a nu primi mesaje de la alte device-uri din Internet, care folosesc același server public.

Din topicul “inTopic” puteți schimba in “iot-lab7-myLED-inTopic”, iar din topicul “outTopic” in “iot-lab7-myTemperature-outTopic”.

Resurse