Table des matières

Maîtriser la connexion WIFI du MEGA WIFI, test du MQTT

Pour mon projet, je vais essayé d'utiliser mon Mega-WIFI de Robodyn.
Doc du produit
En gros il s'agit d'un Arduino Mega couplé avec un ESP sur la même carte au dimension du Mega.
Grace à des minidip, on peu utiliser l'arduino ou l'esp seul, relié par le port RS232 TX3/RX3 du mega à l'ESP, ou ensemble.
Du coup on a un arduino Mega avec toute sa mémoire et sa puissance, que l'on peu connecter au WIFI vie l'ESP.

Quelques liens:

Il y a sans doute d'autre site, mais ceux cités permette déjà de bien comprendre le fonctionnement.
Comme le programme principal va se trouver sur le Mega dans mon projet, comment utiliser le WIFI de l'ESP ?
Pour cela j'avais plusieurs solutions :

  1. Créer un programme pour l'ESP qui lit le port série3 et renvoi les data en WIFI.
  2. Utiliser le firmware NODEMCU avec les commandes AT.
  3. Utiliser un firmware déjà fait, comme esp-link de Jeelabs

( Une appli avec esp-link )

Entre parenthèses, ces recherches m'ont permis de découvrir des firmware alternatifs qui permettent de créer des petites applis avec un ESP sans se fatiguer à programmer.
Voici une petite liste :

Tests des solutions

La première chose est de voir si on peu programmer facilement le Mega et l'ESP.
Pour le Mega, pas de soucis, je l'ai utilisé sans problème pour le TFT.
Pour l'ESP il faut changer les minidip comme suis :

8 = OFF
7 = (ON pour programmer, OFF pour utiliser)
6 = ON
5 = ON
4 = OFF
3 = OFF
2 = OFF
1 = OFF

Avec cette configuration on peu programmer et lire les données via le port microUSB du Mega,
Il suffit de basculer le minidip 7 en fonction de ce que veut faire.

Pour mon premier essai, je vais essayer d'utiliser le firmware NODEMCU avec les commandes AT.
Mon premier essai donner “ERROR” avec une liaison série via le moniteur de l'IDE arduino, du coup je suis parti a flasher l'ESP.

( Après multiples essais, je me suis rendu compte qu'il faut utiliser le moniteur série avec “les deux NL et CR” sinon on a ERROR
Donc bien mettre ce choix avant d'essayer de flasher son ESP )

Flashe de l'ESP

Il y a plein de doc sur le web, donc en gros, on récupère le firmware, esptools.py puis on flashe avec.
Une doc assez complète
En Français (c'est cool aussi)
la méthode que j'ai suivi est la suivante :

  1. Téléchargement du firmware - quelques choix.
      • Si vous arriver a faire fonctionner le prog fourni avec… moi je suis sous Linux.
  2. Téléchargement de esptools.

Ensuite On ouvre un terminal (LINUX) puis on exécute ces commandes :
Sauvegarde du firmware présent

sudo esptool.py --port /dev/ttyUSB0 read_flash 0x00000 0x100000 votrefichier.bin

Effacement du précédent firmware

sudo esptool.py --port /dev/ttyUSB0 --baud 115200 erase_flash

Flashe du nouveau firmware.

sudo esptool.py --port /dev/ttyUSB0 write_flash -fm dio -fs 4MB 0x00000 ESP_8266_BIN0.92.bin

Pour éviter les pb's, bien débrancher votre ESP entre les commandes afin que les modifs soient prises en compte.
Ensuite on test , changement du minidip 7 puis on ouvre un moniteur série avec l'IDE d'arduino.
ATTENTION : bien mettre avec “les deux NL et CR” !
On tape AT - un OK devrait vous répondre.
La commande AT+GMR - renvoi les version de logiciel.
Pour ceux qui veulent en savoir plus sur les cmd AT : https://room-15.github.io/blog/2015/03/26/esp8266-at-command-reference/

Cool ça fonctionne du coup on bascule en mode Mega avec ESP sur TX3 avec les minidip.

8 = OFF
7 = OFF
6 = OFF
5 = OFF
4 = ON
3 = ON
2 = ON
1 = ON

Voici un petit programme de test pour voir si ça marche.
Il est basé sur ce lien

// EspDebug - Test sketch for ESP8266 module
 
// emulate Serial1 if not present
/*#ifndef HAVE_HWSERIAL1
  #include "SoftwareSerial.h"
  SoftwareSerial Serial1(6, 7); // RX, TX
#endif
*/
 
void setup()
{
  Serial.begin(115200); // serial port used for debugging
  Serial3.begin(115200);  // your ESP's baud rate might be different
}
 
void loop()
{
  if(Serial3.available())  // check if the ESP is sending a message
  //Serial.println("serial3 OK");
  {
    while(Serial3.available())
    {
      int c = Serial3.read(); // read the next character
      Serial.write((char)c);  // writes data to the serial monitor
    }
  }
 
  if(Serial.available())
  {
    // wait to let all the input command in the serial buffer
    delay(10);
 
    // read the input command in a string
    String cmd = "";
    while(Serial.available())
    {
      cmd += (char)Serial.read();
    }
 
    // print the command and send it to the ESP
    Serial.println();
    Serial.print(">>>> ");
    Serial.println(cmd);
 
    // send the read character to the ESP
    Serial3.print(cmd);
  }
}

En gros on configure le Mega pour renvoyer/recevoir les char de sa liaison série vers la liaison série3 (connecter à l'ESP.
Si on envoi AT, on doit recevoir le OK.

Ca marche pas mal, reste plus qu'a trouver comment envoyer/recevoir du MQTT avec ce système.
Pour ça il faut que je test cette solution :
https://create.arduino.cc/projecthub/thingsboard/temperature-dashboard-using-arduino-uno-esp8266-and-mqtt-5e26eb

Je vais donc enlever tout ce qui concerne la DHT, Thingsboard (projet sympa) et ne garder que la comm MQTT. (A FAIRE)

Solution créer un programme pour l'ESP

J'ai trouvé ceci sur un forum :
https://forum.arduino.cc/index.php?topic=498256.0
On peu essayer cette solution en changeant quelques paramètres sur le Mega (serie3)

Il y a plein de doc sur le site, sinon un site qui décrit toutes les possibilités, c'est alléchant !.
http://domoticx.com/esp8266-wifi-esp-link-firmware/

C'est peut être une solution top pour le Mega WIFI, on pourrait télécharger le programme à distance et utiliser l'ESP comme bridge.

Sinon un petit projet étudiant

hackster.io qui montre ce projet :
https://www.hackster.io/niesse/serial-to-mqtt-gateway-02057c
Le github :
https://github.com/njesse/MQTTSerialGateway
Ce projet transforme une liaison série en mqtt et vice versa. C'est basé sur des librairies éprouvées. il peu avantageusement remplacer le firmware.