ESP8266-01 issue

Bonjour,

Je souhaite récupérer la température d'un LM35 et envoyer ces données sur un channel thingspeak grâce à un ESP8266 (J'ai une carte arduino).

J'arrive à me connecter parfaitement à mon WiFi local et à récupérer les températures mais je n'arrive pas à me connecter au serveur Thingspeak (comme si je ne recevais pas les réponses AT) , je peux fournir mon code si vous le souhaitez.

Quelqu'un a une idée ?
¨
Merci,

je peux fournir mon code si vous le souhaitez.

ça aiderait à voir s'il y a un bug....

/* ----------------------------------------- */
/* -----      Librairies utilisées     ----- */
/* ----------------------------------------- */

#include "WiFiEsp.h"
// Emulate Serial1 on pins 10/11 if not present
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(10, 11);// RX, TX
#endif
#define TSIP "184.106.153.149"                        // L'adresse IP de la plateforme thingspeak.com
#define TSAPIKey "GET /update?api_key="   // La clef récupérée sur thingspeak.com, à utiliser pour envoyer les données

/* ----------------------------------------- */
/* -- Définition des variables globales -- */
/* ----------------------------------------- */

char ssid[] = "XXXX";                // your network SSID (name)
char pass[] = "XXXX";       // your network password
int status = WL_IDLE_STATUS;                   // the Wifi radio's status
String apiKey = "XXXX";           // API Thingspeak channel
int ledPin = 13;
int lm35Pin = 0;

/* ----------------------------------------- */
/* -- Boucle qui ne se lance qu'une fois --- */
/* ----------------------------------------- */

void setup()
{
 // initialize the digital pin as an output.
 pinMode(ledPin, OUTPUT);
 // initialize serial for debugging
 Serial.begin(9600);
 delay(500);
 // initialize serial for ESP module
 Serial1.begin(115200);
 delay(500);
 // initialize ESP module
 WiFi.init(&Serial1);
 delay(500);

 // check for the presence of a shield
 if (WiFi.status() == WL_NO_SHIELD) {
   Serial.println("WiFi shield not present");
   delay(1000);
 }

 // attempt to connect to WiFi network
 while ( status != WL_CONNECTED) {
   Serial.println(" ");
   Serial.print("Attempting to connect to WPA SSID: ");
   Serial.println(ssid);
   Serial.println(".");
   delay(400);
   Serial.println(".");
   delay(400);
   Serial.println(".");
   delay(400);
   Serial.println(".");
   delay(400);
   Serial.println(".");
   delay(400);
   Serial.println(".");
   delay(10);
   // Connect to WPA/WPA2 network
   status = WiFi.begin(ssid, pass);
   delay(1000);
   
 }

 Serial1.println("You're connected to the network");
}

/* ----------------------------------------- */
/* ------ Loop qui se lance en boucle ------ */
/* ----------------------------------------- */

void loop()
{
 // print the network connection information every 30 seconds
 /*Serial.println();
 delay(500);
 */

 printCurrentNet();  // Fonction qui donne le SSID, BSSID, RSSI
 printWifiData(); // Fonction qui donne l'IP et l'adresse MAC
 printTempData();// Fonction qui récupère les temp
 // les envoies à Thingspeak
    
 delay(10000);
}

void printTempData()
{
   // faire clignoter la LED on board
 digitalWrite(ledPin, HIGH);   
 digitalWrite(ledPin, LOW);

 // read the value from LM35.
 // read 10 values for averaging.
 int val = 0;
 for(int i = 0; i < 10; i++) {
     val += analogRead(lm35Pin);   
     delay(500);
 }
 // convert to temp:
 // temp value is in 0-1023 range
 // LM35 outputs 10mV/degree C. ie, 1 Volt => 100 degrees C
 // So Temp = (avg_val/1023)*5 Volts * 100 degrees/Volt
 float temp = val*50.0f/1023.0f;

 // convert to string
 char buf[16];
 String strTemp = dtostrf(temp, 4, 1, buf);
 Serial.println(" ");
 Serial.println(strTemp); // affichage de la température (25.9)

 String getStr = TSAPIKey;
 byte cpt = 1, i;
 
 Serial1.println("AT+CIPSTART=\"TCP\",\"TSIP\",80");
 Serial1.flush();                                  // Vider le buffer de reception du port
 delay(1500);

 if((Serial1.find("OK")) || (Serial1.find("ok")) || (Serial.find("OK")) || (Serial.find("ok")))                 // ESP8266 n'a pas bien répondu
 {
   Serial.println("Connexion au serveur réussie");                 // Affichage Ordinateur
 }
 else    // ESP8266 n'a bien répondu
 {
   Serial.println("Echec de la Connexion au serveur !");             // Affichage Ordinateur

 }
 // prepare GET string

getStr = getStr + "&field" + cpt;
getStr = getStr + "=" + strTemp;

 Serial1.print("AT+CIPSEND=");
 Serial1.println(getStr.length());
 delay(20000);

 
if(Serial1.find(">")) // envoie des données 
{ 
   Serial1.println("Données bien envoyées !");
   
   delay(100);
 }

else
{ 
   Serial1.println("Données non envoyées !");
   delay(100);
}

}



void printWifiData()
{
 // print your WiFi shield's IP address
 IPAddress ip = WiFi.localIP();
 delay(1000);
 Serial.print("IP Address: ");
 delay(2000);
 Serial.println(ip);
 delay(1000);

 // print your MAC address
 byte mac[6];
 delay(1000);
 WiFi.macAddress(mac);
 delay(1000);
 char buf[20];
 sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]);
 delay(1000);
 Serial.print("MAC address: ");
 delay(2000);
 Serial.println(buf);
 delay(1000);
}

void printCurrentNet()
{
 // print the SSID of the network you're attached to
 Serial.println(" ");
 Serial.print("SSID: ");
 delay(2000);
 Serial.println(ssid);
 delay(1000);

 // print the MAC address of the router you're attached to
 byte bssid[6];
 delay(1000);
 WiFi.BSSID(bssid);
 delay(1000);
 char buf[20];
 sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", bssid[5], bssid[4], bssid[3], bssid[2], bssid[1], bssid[0]);
 delay(1000);
 Serial.print("BSSID: ");
 delay(1000);
 Serial.println(buf);
 delay(1000);

 // print the received signal strength
 long rssi = WiFi.RSSI();
 delay(1000);
 Serial.print("Signal strength (RSSI): ");
 delay(1000);
 Serial.println(rssi);
 delay(1000);
}

Tiens celle là je ne l'avais jamais vue :slight_smile:

char buf[16];
String strTemp = dtostrf(temp, 4, 1, buf);

Vous avez lu la doc de dtostrf()?

flush() ne vide pas le buffer de reception

if((Serial1.find("OK")) || (Serial1.find("ok")) || (Serial.find("OK")) || (Serial.find("ok")){

Sérieusement ???

Vous êtes sûr?
Serial[color=red][b]1[/b][/color].println("Données bien envoyées !");

Et où avez vous envoyé getStr?

---> revoyez votre code pour comprendre exactement ce qui est envoyé à l'ESP et débarrassez vous de l'usage de la classe String, changez la vitesse de votre esp-01 à quelque chose de moins rapide que 115200 (et passez donc la console arduino à 115200).

Bonjour merci de votre réponse,

J'ai changé le dtostrf mais pas sûr que cela change quelque chose j'ai encore un String.

J'ai enlevé les deux Serial.find lol, et également modifié en Serial.println("Données bien envoyées")

Comment ça où j'ai envoyé mon getStr ?

J'ai revu encore un peu, mais je ne vois vraiment pas et je ne peux pas baisser la vitesse de mon esp-01 sinon il ne se connecte même pas au WiFi.. :frowning:

Comment ça où j'ai envoyé mon getStr

Ben oui quoi, c'est quelle ligne qui l'envoie?