Ciao a tutti. Chiedo aiuto perché è da qualche giorno che ci sbatto la testa e non riesco a venirne a capo. So cercando di utilizzare questo modulo wifi: Crowtail- Serial Wifi - Elecrow.
Si tratta di un modulo ESP8266 e cercando online non ho trovato nessuno che riesca a risolvere il problema. In sostanza, se collego il modulo ai pin 0 e 1 di un arduino UNO, riesco ad interfacciarmi molto bene e senza errori con il modulo tramite il monitor seriale. Utilizzando invece la libreria "SoftwareSerial" e i pin 2 e 3, la prima parte del testo la ricevo correttamente mentre il resto arriva corrotto e incompleto. Ho settato il baud rate del modulo a 9600 sapendo che questa libreria non supporta le velocità superiori, ma non risolve il problema. Voglio utilizzare questo secondo metodo per far sì che sia arduino a gestire il modulo wifi in automatico. Non voglio utilizzare le porte 0 e 1.
Allego codice e screenshot del monitor seriale.
Grazie in anticipo per l'aiuto.
#include <SoftwareSerial.h>
#define DEBUG true
SoftwareSerial esp(3,2);
void setup() {
Serial.begin(115200);
esp.begin(9600);
pinMode(3,INPUT);
pinMode(2,OUTPUT);
init_esp();
}
void loop() {
}
void init_esp(){
sendData("AT+CWMODE=1\r\n", 1000, DEBUG);
sendData("AT+CWLAP\r\n", 10000, DEBUG);
}
void sendData(String command, const int timeout, boolean debug){
String response = "";
esp.print(command); // send the read character to the esp8266
long int time = millis();
char ch;
while ( (time + timeout) > millis()) {
while (esp.available()) {
ch = esp.read();
response += ch;
}
}
if (debug) {
Serial.print(response);
}
return response;
}
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie.
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell'apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
Io non so dove tu sia andato a trovare il codice che hai postato, ma buttalo via...
Riscrivilo senza usare oggetti Stringa e senza restituire qualcosa in una funzione void, e senza inizializzare i piedini 2 e 3, ci pensa la libreria
Io ho trovato giovamento nel tenere le velocità delle due seriali a pari, ma non credo che nel tuo caso sia utile
#include <SoftwareSerial.h>
SoftwareSerial esp(3,2);
void setup() {
Serial.begin(9600);
esp.begin(9600);
esp.print("AT+CWLAP\r\n");
}
void loop() {
if (esp.available()) { // ESP wants to talk to you
Serial.write(esp.read()); // Log out what ESP wants to say
}
}
Ma ottengo sempre lo stesso risultato, ovvero testo incomprensibile.
Sei sicuro che l'ESP stia trasmetterno a 9600? Perché se tu imposti su Arduino 9600, ma l'ESP sta trasmettendo ad altra velocità, quello che vedi è incomprensibile ... :
... se invece parte del testo è ok ed il resto no, la velocità è probabilmente giusta, ma ... potrebbe essere insufficiente il buffer della SoftwareSerial() e quindi, dopo N caratteri, il resto te li perdi.
Mentre usando i pin 0 e 1 con il monitor seriale va bene?
Che strano...
Per rispondere invece a Guglielmo...
Se il primo pezzo è ok la velocità e la parità sono ok
Semmai forse è lo esp che si impiantato, e quello che vediamo è il suo debug
gpb01:
... se invece parte del testo è ok ed il resto no, la velocità è probabilmente giusta, ma ... potrebbe essere insufficiente il buffer della SoftwareSerial() e quindi, dopo N caratteri, il resto te li perdi.
Guglielmo
Le velocità sono identiche e leggo bene solo la prima parte del testo. Penso anch'io che sia un problema di buffer ma non so proprio come si possa risolvere.
Standardoil:
Non mi convince la questione velocità...
Semmai si rialza la seriale usb...
Il_Palmi:
Le velocità sono identiche e leggo bene solo la prima parte del testo. Penso anch'io che sia un problema di buffer ma non so proprio come si possa risolvere.
Le dimensioni del buffer della SoftwareSerial() sono definite nel codice della libreria ...
... ti basta provare ad ingrandirlo e vedere se la cosa migliora.
Guglielmo
P.S.: Ho avuto lo stesso problema con i dati di un GPS