// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>
#define rxPin 10
#define txPin 11
#define rx1Pin 12
#define tx1Pin 14
// set up a new serial port
SoftwareSerial Serial = SoftwareSerial(rxPin, txPin);
SoftwareSerial Serial1 = SoftwareSerial(rx1Pin, tx1Pin);
void setup() {
// define pin modes for tx, rx:
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
pinMode(rxPin1, INPUT);
pinMode(txPin1, OUTPUT);
// set the data rate for the SoftwareSerial port
Serial.begin(9600);
Serial1.begin(115200);
}
void loop() {
// ...
}
Ca sert à quoi cette ligne #include "SoftwareSerial.h" ?
Comme tu utilises Serial1, je suppose que tu utilises une carte avec plusieurs liaison séries hard et non SoftwareSerial.
Il n'y a aucune chance que cette ligne fonctionne correctement
if((Serial1.find("AT")) || (Serial1.find("ok")) || (Serial1.find("OK"))) // ESP8266 n'a pas bien répondu
Serial1.find("AT") recherche bien si AT est présent dans la transmission, mais s'il n'est pas présent les caractères sont lus et ne se présenterons plus jamais (tant que l'on n'aura pas envoyé de nouvelle commande), donc les deux Serial1.find suivant ne donnerons jamais rien.
Il faut que tu reçoive la réponse entière et ensuite tu analyse si elle contient "AT" ou "ok" ...
Ca sert à quoi cette ligne #include "SoftwareSerial.h" ?
Comme tu utilises Serial1, je suppose que tu utilises une carte avec plusieurs liaison séries hard et non SoftwareSerial.
Il n'y a aucune chance que cette ligne fonctionne correctement
if((Serial1.find("AT")) || (Serial1.find("ok")) || (Serial1.find("OK"))) // ESP8266 n'a pas bien répondu
Serial1.find("AT") recherche bien si AT est présent dans la transmission, mais s'il n'est pas présent les caractères sont lus et ne se présenterons plus jamais (tant que l'on n'aura pas envoyé de nouvelle commande), donc les deux Serial1.find suivant ne donnerons jamais rien.
Il faut que tu reçoive la réponse entière et ensuite tu analyse si elle contient "AT" ou "ok" ...
Que dois-je faire à la place des Serial.find dans ce cas ?
Et est-ce qu'au moins j'ordonne d'envoyer la commande AT ?
Pourriez-vous me proposer un petit code permettant de faire cela ? J'aimerais simplement m'assurer que je puisse envoyer des commandes AT depuis le code en lui même.
Merci d'avance,
void setup() {
Serial.begin(9600);
delay(2000);
Serial1.begin(115200);
delay(2000);
}
char msg[40];
void loop()
{
Serial1.println("AT");
int n=Serial1.readBytesUntil('\n',msg,sizeof msg-1);
msg[n]=0; // marque la fin de la chaine
Serial.println(msg); // pour debug
if (strstr(msg,"AT") || strstr(msg,"ok") || strstr(msg,"OK")) // teste si ESP8266 a 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
}
delay(2000);
}
#include "SoftwareSerial.h"
SoftwareSerial Serial1(2,3);
void setup() {
Serial.begin(9600);
delay(2000);
Serial1.begin(115200);
delay(2000);
}
char msg[40];
void loop()
{
Serial1.println("AT");
int n=Serial1.readBytesUntil('\n',msg,sizeof msg-1);
msg[n]=0; // marque la fin de la chaine
Serial.println(msg); // pour debug
if (strstr(msg,"AT") || strstr(msg,"ok") || strstr(msg,"OK")) // teste si ESP8266 a 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
}
delay(10000);
}
Je voudrais simplement envoyer une commande AT (ou AT+RST) et bien voir si le système répond ''OK''.
Il me semblerait que parfois votre code m'annonce des erreurs, parfois cela affiche AT parfois cela affiche OK parfois cela affiche rien et la connexion echoue...