ESP-07 sur ARDUINO MEGA

Salut à tous,

Après 3 soirées de recherche sur le forum et sur le net, je suis désemparé…

J’ai réalisé un automate avec un afficheur et une carte à relais pour une piscine:

  • acquisition de la température
  • commande de la filtration
  • horloge
  • ecran de controle et de relevés

Le tout basé sur un MEGA avec un ensemble qui roule depuis que j’ai résolu mes problèmes de CEM.

L’an dernier je souhaitais ajouter une connexion réseau wifi à l’ensemble afin de remonter les infos sur un serveur MQTT et pouvoir démarrer des actionneurs à distance.

Le module CC3000 que j’utilisais à toujours présenté des problèmes de reconnexion qui ne se faisait pas suite à la perte du réseau, et j’ai donc décidé de passer sur un module wifi ESP.

J’ai donc acheté un ESP-07 (j’ai besoin de pouvoir mettre une antenne externe) un logic level shifter et j’ai commencé à essayer de comprendre le bon câblage, et c’est là que je lutte.

Pour faire mes tests j’utilise la librairie WifIESP et les sketchs de test.

J’ai juste changé les pins de la communication via SoftwareSerial vers l’ESP en 10 et 11.

J’ai essayé plusieurs combinaisons de câblage toujours en aval du logic level shifter:

ARDUINO/LLS ------------------ESP-07
RX ---------------RX
TX----------------TX
3.3V-------------VCC
GND-------------GND
3.3V-------------EN(CH-PD)
GND-------------RST
GND-------------GPIO15

En changeant le câblage de GPIO15 ou de RST pas de succès non plus, pareil en inversant TX/RX

Le sketch “bascitest” me retourne toujours “TIMEOUT”

Bref, je pense que quelque chose cloche dans mon câblage, mais je n’arrive pas à trouver de doc sérieuse sur le sujet. Du coup je commence à être perdu.

Merci par avance du coup de main,

Furby

_20170704-BasicTest.ino (3.38 KB)

Sur une mega ne pas utiliser software serial mais directement un port série hardware - vous en avez 4 et ce sera beaucoup plus robuste!

Un .ino attaché comme cela est trop pénible à lire sur mobile donc je ne peux pas regarder le code

oui c’est certainement mieux sur le sports série.

Mais le sketch normalement devrait quand même marcher et au moins voir l’ESP.

Voila le code ci-dessous:

/*
WiFiEsp test: BasicTest

Performs basic connectivity test and checks.
*/

#include “WiFiEsp.h”

// Emulate Serial1 on pins 7/6 if not present
#ifndef HAVE_HWSERIAL1
#include “SoftwareSerial.h”
SoftwareSerial Serial1(10, 11); // RX, TX
#endif

char ssid = “mikado”; // your network SSID (name)
char pwd = “xxxxxxxx”; // your network password
char pwdErr = “xxxx”; // wrong password

void setup()
{
Serial.begin(115200);
Serial1.begin(9600);
WiFi.init(&Serial1);
}

void loop()
{
assertEquals(“Firmware version”, WiFi.firmwareVersion(), “1.5.2”);
assertEquals(“Status is (WL_DISCONNECTED)”, WiFi.status(), WL_DISCONNECTED);
assertEquals(“Connect”, WiFi.begin(ssid, pwd), WL_CONNECTED);
assertEquals(“Check status (WL_CONNECTED)”, WiFi.status(), WL_CONNECTED);
assertEquals(“Check SSID”, WiFi.SSID(), ssid);

IPAddress ip = WiFi.localIP();
assertNotEquals(“Check IP Address”, ip[0], 0);
Serial.print("IP Address: ");
Serial.println(ip);

byte mac[6]={0,0,0,0,0,0};
WiFi.macAddress(mac);

Serial.print(“MAC: “);
Serial.print(mac[5], HEX);
Serial.print(”:”);
Serial.print(mac[4], HEX);
Serial.print(":");
Serial.print(mac[3], HEX);
Serial.print(":");
Serial.print(mac[2], HEX);
Serial.print(":");
Serial.print(mac[1], HEX);
Serial.print(":");
Serial.println(mac[0], HEX);
Serial.println();

assertEquals(“Disconnect”, WiFi.disconnect(), WL_DISCONNECTED);
assertEquals(“Check status (WL_DISCONNECTED)”, WiFi.status(), WL_DISCONNECTED);
assertEquals(“IP Address”, WiFi.localIP(), 0);
assertEquals(“Check SSID”, WiFi.SSID(), “”);
assertEquals(“Wrong pwd”, WiFi.begin(ssid, pwdErr), WL_CONNECT_FAILED);

IPAddress localIp(192, 168, 168, 111);
WiFi.config(localIp);

assertEquals(“Connect”, WiFi.begin(ssid, pwd), WL_CONNECTED);
assertEquals(“Check status (WL_CONNECTED)”, WiFi.status(), WL_CONNECTED);

ip = WiFi.localIP();
assertNotEquals(“Check IP Address”, ip[0], 0);

Serial.println(“END OF TESTS”);
delay(60000);
}

////////////////////////////////////////////////////////////////////////////////////

void assertNotEquals(const char* test, int actual, int expected)
{
if(actual!=expected)
pass(test);
else
fail(test, actual, expected);
}

void assertEquals(const char* test, int actual, int expected)
{
if(actual==expected)
pass(test);
else
fail(test, actual, expected);
}

void assertEquals(const char* test, char* actual, char* expected)
{
if(strcmp(actual, expected) == 0)
pass(test);
else
fail(test, actual, expected);
}

void pass(const char* test)
{
Serial.print(F("********************************************** “));
Serial.print(test);
Serial.println(” > PASSED");
Serial.println();
}

void fail(const char* test, char* actual, char* expected)
{
Serial.print(F("********************************************** “));
Serial.print(test);
Serial.print(” > FAILED");
Serial.print(" (actual="");
Serial.print(actual);
Serial.print("", expected="");
Serial.print(expected);
Serial.println("")");
Serial.println();
delay(10000);
}

void fail(const char* test, int actual, int expected)
{
Serial.print(F("********************************************** “));
Serial.print(test);
Serial.print(” > FAILED");
Serial.print(" (actual=");
Serial.print(actual);
Serial.print(", expected=");
Serial.print(expected);
Serial.println(")");
Serial.println();
delay(10000);
}

Avant de regarder le code, il faut être certain que le hard est sain.
L'ESP alimenté avec le 3,3V de la Mega ce n'est définitivement pas une bonne idée.
La pin 3,3V ne peut fournir que 50mA alors que l'ESP en demande presque 10x plus en pointe.

corrigez votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

Vous comprenez bien que le code

#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(10, 11); // RX, TX
#endif

dans le ifndef ne sera pas exécuté sur votre MEGA puisqu'il a un port série1 matériel? donc si vous avez branché votre module en 10 et 11 (sans modifier le commentaire qui parle de 7/6 ce qui n'est pas top, meilleur moyen de se mélanger les pinceaux) c'est normal que ça ne fonctionne pas, le code utilise le port série matériel --> Serial1 est un port série hardware, branchez vos fils sur les pins 19 (RX) and 18 (TX)

C'est une bonne suggestion, en effet je n'ai pas bien fait attention au code.

Je vais réessayer ce soir,

Par contre si quelqu'un était en mesure de me confirmer le câblage de l'ESP07 ca m'aiderait bien.

Furby

Et au fait mon ESP est bien alimenté en 3.3V par un module dédié et pas par l'ARDUINO directement

Vous avez quelle forme d'ESP07 ? Juste la puce ou sur un shield?

Juste la puce

OK - c'est quand même plus simple quand tout est câblé

la puce est en 3.3V - Pour connecter correctement Tx et Rx vous pouvez utiliser un te291 level shifter par exemple, il en existe à 2, 4, 8 entrées.

c'est important pour Tx de votre arduino qui va balancer 5V pour un HIGH dans l'entrée Rx de votre ESP qui ne peut pas recevoir plus de 3.3V en théorie et donc vous risquez d'endommager votre ESP-07

pour le Rx, l'ESP va balancer 3.3V pour un HIGH et sur les Arduino 5V c'est correctement reconnu comme un HIGH dans la plupart des cas

par exemple celui ci a 4 entrées et je l'utilise dans un montage (avec un composant Bluetooth HM-10) comme cela

ensuite il faut effectivement alimenter avec la bonne puissance votre composant, et s'assurer de connecter les GNDs des 2 cartes et (de mémoire - vérifiez en cherchant sur internet) mettre GPIO15 et GPIO2 à 3.3V, GPIO0 à GND pour avoir votre module en mode commande AT. je crois que par défaut ils sont à 115200 bauds

Petite précision ce n'est pas une puce mais un module qui n'est pas produit par la société Expressif mais par l'assembleur "AI-Thinker" et qui contient :

  • une puce esp8266 encapsulée dans un boîtier cms
  • une puce sram externe encapsulée dans un boîtier cms
    Les deux boîtiers eux même encapsulés dans le boiter métallique
  • une antenne
  • un circuit imprimé

Les sorties sur le circuit imprimé du module sont au pas de 2mm..
En attendant que les dernières résistances anglo-saxonnes au Système International s'effondrent, pour le raccorder facilement il existe sur Ebay de petits circuits imprimés spécialement prévus pour (environ 1€).