diff --git a/docs/esp32.md b/docs/esp32.md index e660ff0eb91ea69c9f4a044646ac5e237ad353f6..f64c49f85a6ce8e2fb9e08024839bb11ffe493e0 100644 --- a/docs/esp32.md +++ b/docs/esp32.md @@ -49,4 +49,77 @@ Problèmes possibles : - Mauvais condensateur ou pas de condensateur sur le module. - Interface USB-UART qui fonctionne mal. -## Pinout important de l'ESP32 \ No newline at end of file +## Pinout important de l'ESP32 + +- IO16 : UART2 Rx +- IO17 : UART2 Tx + +## Communication MQTT +Une des principale tâche de l'ESP32 est la communication MQTT avec le broker. + +### Connexion WIFI +L'ESP32 va tout d'abord se connecter à un routeur WIFI spécifié dans le code : +```c +const char *ssid = "uni-ete2"; // WiFi name +const char *password = "uni-ete2-esp32"; // WiFi password +``` + +Le programme n'avancera pas si la connexion WIFI ne se fait pas. + +### Connexion MQTT +Une connexion MQTT va ensuite être établi entre le serveur et l'ESP32. + +Après que une connexion entre l'ESP32 et le broker MQTT est établi, L'ESP32 va pouvoir se subscribe au topics souhaités. + +### Echanges MQTT +L'ESP32 lors de son execution, va communiquer sur un topic et 3 de ses sub-topics. + +Il y a le topic **Cluster(0-n)**, qui est un topic unique dédié pour chaque ESP32. + +Ensuite il y a ses différents sub-topics : + +- **Cluster(0-n)/size** qui va permettre à l'ESP de publish la taille du cluster de matrices pour le broker MQTT. + +- **Cluster(0-n)/text** qui va permettre au serveur de publish un texte souhaité pour que l'ESP puisse mettre en place l'affichage du texte. + +- **Cluster(0-n)/image** qui va permettre au serveur de publish une image de la taille du cluster pour que l'ESP puisse mettre en place l'affichage de l'image. + + +Au début l'ESP32 va tout d'abord envoyer un petit message de salut au serveur, puis il va se subscribe au sub-topics **/text** et **/image**. + +```C +// Publish and subscribe +client.publish(topic_send, "Hi, I'm ESP32 ^^"); +client.subscribe(topic_img); +client.subscribe(topic_txt); +``` + +Pendant l'execution du programme, lorsque le serveur va faire des publish d'image ou de texte, l'ESP32 va récéptionner ses requêtes et pouvoir gérer l'affichage. Il va aussi pouvoir communiquer la taille du cluster de matrix au serveur. + +## Communication UART +L'autre tâche de l'ESP32 est de communiquer en UART avec le cluster de matrices. + +### Format message +Afin de permettre à l'ESP32 de communiquer avec l'HEPIALIGHT en UART, les messages doivent être formaté d'une certaine manière sinon l'HEPIALIGHT va ignorer le message. + +Format du message : +``` +Header : [0x77] +Len : [0x01-0xFF] +Data[0] : [0x00-0xFF] +Data[n] : [0x00-0xFF] +Crc : [0x00-0xFF] = Data[0] ^ Data[1] ^ Data[n] ^ Len +Footer : [0xAA] +``` + +### Commandes UART +L'ESP32 va pouvoir répondre à deux commandes UART en provenance de l'Hepialight: + +- La commande "ESP" qui va permettre à l'Hepialight de vérifier la présence de l'ESP, il retournera une réponse "OK". +- La commande "MATSIZE" qui va permettre à l'Hepialight d'informer l'ESP32 de sa taille de cluster. + +### Affichage Image +Lorsque l'ESP32 va devoir faire l'affichage d'une image, l'image va être séparé, afin d'envoyer chaque partie de l'image au différents matrices du cluster. + +### Affichage Texte +Pour l'affichage du texte, l'ESP32 va envoyer le message à la matrice la plus en bas à droite afin de faire le défilement sur toute la longueur. \ No newline at end of file diff --git a/src/mqtt_esp32/mqtt_esp32.ino b/src/mqtt_esp32/mqtt_esp32.ino index a9a223af6dc319be5a1f76f37cbdfd1280c82547..d42c1218a510f675248681a3e8f417158481ce9c 100644 --- a/src/mqtt_esp32/mqtt_esp32.ino +++ b/src/mqtt_esp32/mqtt_esp32.ino @@ -5,11 +5,11 @@ #define MATRIX_SIZE 10 // 10x10 #define IMG_DATA_SIZE MATRIX_SIZE * MATRIX_SIZE * 3 //DATA SIZE FOR ONE MATRIX = RGB * MATRIX_SIZE #define BUFFER_SIZE 128 -#define CLUSTER "cluster1" +#define CLUSTER "cluster2" // WiFi -const char *ssid = "uni-ete2"; // Enter your WiFi name -const char *password = "uni-ete2-esp32"; // Enter WiFi password +const char *ssid = "uni-ete2"; // WiFi name +const char *password = "uni-ete2-esp32"; // WiFi password // MQTT Broker const char *mqtt_broker = "192.168.1.102";