Invia comandi AT a ESP8266 da Arduino Uno tramite una porta SoftwareSerial


10

OBBIETTIVO

Da Arduino UNO, invia comandi AT a ESP8266 tramite una porta SoftwareSerial e ricevi i risultati.

STATO ATTUALE

O invio comandi AT e non ottengo nulla indietro ( schema di cablaggio 1 ) oppure invio comandi AT e ricevo immondizia ( schema di cablaggio 2 ).

Usando Arduino come pass-through (come spiegato nel tutorial elencato nella sezione risorse), posso inviare comandi AT. Ho scoperto che posso comunicare con ESP8266 a 115200 baud.

Questo è il risultato dell'esecuzione AT+GMR:

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04

SCHEMA DI CABLAGGIO 1

!! Ho il filo verde attaccato al pin 3 sull'Arduino Uno e il filo giallo attaccato al pin 2; non 1 e 0 come suggerisce l'immagine !!

inserisci qui la descrizione dell'immagine

SCHEMA DI CABLAGGIO 2

Stesso cablaggio di cui sopra, ma ho RX e TX invertiti. Il filo verde è attaccato al pin 2 e il filo giallo è attaccato al pin 3.

CODICE

Questo è in esecuzione su Arduino Uno

#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

RISULTATI DALLA SCHERMATA IN FUNZIONE

Schema di cablaggio 1

Started

Schema elettrico 2

Started
�����

Ho testato ESP8266 tramite le istruzioni elencate nel tutorial nella sezione Risorse che ho usato di seguito. ESP8266 funziona perfettamente quando si inviano istruzioni tramite il prompt seriale.

RISORSE CHE HO UTILIZZATO http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

DOMANDA

Qualcuno sa se ciò che sto cercando di fare è possibile? E se lo è, cosa sto facendo di sbagliato?


Prova come suggerito nel PDF per usare arduino come bypass al seriale (usa le connessioni come in immagine). Dopo aver provato, impostare baud su 115200 e testarlo utilizzando il monitor seriale. È necessario inviare \ r \ n anche al termine della riga. Se esp non risponde, prova 9600 baudrate. Se ottieni un buon output, passa al seriale del software con il baudrate funzionante. Puoi anche provare ad aggiornare il firmware di esp all'ultima versione se non l'hai già fatto.
Brtiberio,

Puoi pubblicare il codice seriale del software?
Magic-Mouse

@Personagem, grazie. Ho fatto quella risoluzione dei problemi (cioè controllando che posso inviare comandi AT usando Arduino come bypass). Ho scoperto che posso comunicare con esp a 115200. Proverò ad aggiornare il firmware come mi hai suggerito.
Paolo,

@ Magic-Mouse SoftwareSerial è una libreria fornita, credo, da Arduino. Grazie per l'aiuto sulla domanda, ma non penso che pubblicare la libreria qui sarebbe utile.
Paolo,

So qual è la libreria seriale del software, voglio vedere il codice in cui si utilizza la seriale del software.
Magic-Mouse,

Risposte:


9

Qualcuno sa se ciò che sto cercando di fare è possibile?

Assolutamente possibile :)

E se lo è, cosa sto facendo di sbagliato?

SoftwareSerial non è in grado di supportare una velocità di trasmissione di 115200 baud (nonostante "consenta" questa impostazione). Alcuni rapporti suggeriscono che 57600 è realizzabile, sebbene nella mia esperienza 9600 sia la migliore per affidabilità. Come modificare la velocità di trasmissione su ESP8266 dipenderà dalla versione del firmware. Ho avuto successo con AT+IPR=9600. Hai solo bisogno di eseguire questo comando una volta (è un'impostazione persistente). Suggerirei, in base alla tua descrizione, che questo sia il colpevole più probabile che sta causando l'output "immondizia" che descrivi.

Un paio di altre note:

  • ESP8266 funziona su 3v3, non su 5v, quindi non dovresti averlo collegato direttamente ai pin digitali: devi passare attraverso un convertitore di livello logico. Eseguendo 5v puoi friggere il tuo ESP8266.
  • L'uscita 3v3 di Arduino ha una corrente insufficiente per supportare l'affidabilità dell'ESP8266 (Arduino 50mA contro un massimo di 300mA per l'ESP8266 secondo alcuni account), che fa funzionare l'ESP8266 con un'alimentazione separata. Probabilmente non influirà su comandi semplici come, ATma quando si tenta di connettersi a una rete, ecc., Potrebbe causare reimpostazioni impreviste del dispositivo.
  • Come notato da altri, è necessario inviare \ r \ n - quindi assicurarsi che la finestra seriale sia impostata per inviare entrambi (questo è un menu a discesa nella finestra seriale)

1
Si noti che AT + IPR a volte può bloccare ESP8266. Maggiori dettagli su: arduino.stackexchange.com/questions/24156/…
Emir

7

Bene, puoi provare questo:

Inizia caricando il blink sketch sul tuo Arduino, quindi collegalo al tuo ESP8266 in questo modo: TX-TX e RX-RX.

Ora apri Serial Monitor e invia il comando AT e vedi se risponde. In tal caso, puoi controllarlo utilizzando Arduino ricollegandolo a TX-RX e RX-TX.

PS: non dimenticare di impostare la fine della linea nel monitor seriale su Newline o Ritorno a capo.

Utilizzare questo codice per connettersi a ESP8266:

#include <SoftwareSerial.h>

const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266

// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200); // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
}

void loop() {
  Serial.println("Sending an AT command...");
  ESP8266.println("AT");
  delay(30);
  while (ESP8266.available()){
     String inData = ESP8266.readStringUntil('\n');
     Serial.println("Got reponse from ESP8266: " + inData);
  }  
}

Poiché l'interfaccia seriale hardware sarà occupata quando è collegata al computer, è necessario utilizzare un'altra interfaccia seriale per comunicare con ESP8266. In questo caso, il software Serial è utile.


Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - Dalla recensione
Ricardo,

1
Sì, immagino tu abbia ragione. Ho modificato la mia risposta.
Ikbel,

@KiraSan perché è richiesto il ritardo (30)?
Rahul Rastogi,

@RahulRastogi solo per questo esempio, puoi usare il ritardo per consentire all'ESP di rispondere, 30ms è solo un valore casuale ma in un programma di vita reale, dovresti evitarlo e utilizzare un altro meccanismo per verificare la risposta.
Ikbel,

1

Qualcuno sa se ciò che sto cercando di fare è possibile? È possibile, l'ho fatto con 2 arduinos in cui uno stava simulando ESP8266 (in attesa di un ordine eBay).

E se lo è, cosa sto facendo di sbagliato?

Quello che stai facendo è sbagliato sulla maggior parte dei livelli, ma penso che tu sia stato più risolto.

Un'idea è quella di implementare questo piccolo amico: il cambio di livello logico ti farà risparmiare molti problemi in seguito.

Sul tuo "WIRING SCHEME 1" stai usando la porta seriale Hardware di Arduino per parlare direttamente con il dispositivo come se fosse collegato tramite un cavo TTL o FTDI.

Ciò significa che in teoria il dispositivo Arduino legge dall'hardware quando parla anche ESP8266, se si dispone di un altro Arduino o un cavo TTL, provare a collegarlo ai gate 2 e 3 sull'Arduino "principale" e si dovrebbe ottenere un simile risultato come per il tuo esempio risultato 2. Dal momento che avresti in questo modo proxy attraverso Arduino. Altrimenti quello sarebbe un posto per iniziare il debug.

Inoltre, potrei solo raccomandarti di investire in un TTL 3,3v o un convertitore di livello logico. Quando ho ricevuto il cavo tutto ha funzionato fuori dalla scatola.


1

Ho avuto anche molti problemi. Nel mio caso i problemi sono quasi risolti passando da SoftwareSerial a AltSoftSerial . Sembrava che su Uno la libreria seriale software standard non funzionasse per me. Dopo il passaggio ho iniziato a recuperare i risultati per la prima volta. (Ho anche usato il cambio di livello e l'alimentazione esterna per 3.3V)


E per quasi risolto intendo: di tanto in tanto continuo a lamentarmi sul terminal. Quindi anche AltSoftSerial non è una soluzione perfetta. Stavo usando ESP-07 con una velocità dati di 115200 bps.


Puoi aggiungere alla tua descrizione? Sarebbe utile sapere come è stata cablata la connessione tra Uno ed ESP. Grazie!
dlu,


0

Ecco alcuni suggerimenti quando si utilizza il modulo ESP8266.

  1. Non utilizzare il software seriale in quanto inaffidabile soprattutto a baud rate più elevati.

  2. Collegare sempre il modulo ESP al computer e testare tutti i comandi AT prima di interagire con Arduino per assicurarsi di lavorare nella giusta direzione

  3. Crea una scheda adattatore di alimentazione per rendere il modulo ESP compatibile con l'alimentazione Arduino 5v

Controlla anche questo link per maggiori dettagli

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.