Recentemente ho iniziato a giocare con Arduino per collegare alcuni sensori. Ho usato un Arduino Nano per misurare temperatura, umidità, pressione dellaria e livello di luce.
Per memorizzare i dati in un database, ho usato un altro Arduino che ho collegato a un Raspberry Pi e ho lasciato parlare i due Arduino in modalità wireless tra loro tramite 433 MHz.
Funziona tutto abbastanza bene, ma la comunicazione a 433 MHz non è esattamente la più affidabile (spesso mi manca una trasmissione). Quando mi sono imbattuto nel modulo ESP8266, mi è sembrata la soluzione ottimale per la comunicazione. Quanto sarebbe bello se potessi semplicemente estrarre le informazioni tramite una chiamata HTTP dal Raspberry Pi?
Dopo aver giocato per molte ore, caricando molti firmware diversi, diventando sempre più frustrato perché non potevo Farlo fare qualsiasi cosa, finalmente lo faccio funzionare attraverso un modulo FTDI collegato in questo modo:
Uso un modulo di alimentazione MB102 per fornire i 3.3v richiesti dallESP8266. Risulta che è necessario collegare la massa dallMB102 alla massa del modulo FTDI per ottenere una risposta adeguata. Dopo averlo fatto, sono stato in grado di inviare comandi AT e ottenere le risposte appropriate. Potrei persino collegarlo al Wi-Fi di casa.
La prossima cosa che voglio fare è collegarlo ad Arduino. Ho trovato uno schema molto semplice per questo ( http://blog.huntgang.com/2015/01/20/arduino-esp8266-tutorial-web-server-monitor-example/ ), in cui colleghi RX a TX e TX a RX. Utilizzando lMB102 lho collegato in questo modo:
A quanto pare ora dovrei essere in grado di caricare uno schizzo vuoto su Arduino, quindi utilizzare di nuovo il monitor seriale per rilevare il comando AT, esattamente allo stesso modo in cui ho fatto quando ho utilizzato il modulo FTDI.
Il problema è che non ottengo nulla in questo modo. Non vedo nemmeno i miei comandi AT nella console. Vedo lESP8266 lampeggiare ogni volta che invio un comando (lo vedo anche ancora connesso al mio router, probabilmente ha ricordato le informazioni che invio tramite FTDI .. .?)
La domanda è: cosa sto sbagliando? Ho letto alcuni post sul TX di Arduino che è anche 5v e che devi fare qualcosa per riportarlo a 3.3v, ma lì ci sono anche molti tutorial che dicono che non è necessario.
Risposta
Il modo più semplice per lavorare con questi sviluppatori è connettersi a un paio di pin Arduino di riserva e utilizzare SoftwareSerial per la comunicazione (a meno che non si stia utilizzando uno degli Arduino con più di un UART). SoftwareSerial funziona fino a 9600 baud su dispositivi a 16 MHz, 4800 su dispositivi a 8 MHz, quindi sarà necessario per impostare ESP8266 per adattarlo. Attualmente spediscono a 115200 baud. È possibile utilizzare lUART hardware sui pin (0, 1) ma riprogrammare Arduino significa disconnettere & ricollegare temporaneamente lESP ogni volta e invecchiare abbastanza rapidamente.
Ecco cosa faccio con i nuovi ESP (se hai aggiornato nuovamente il tuo ESP, dovrai prima scaricare lemulatore del set di istruzioni AT e rifarlo con quello):
# To configure a new ESP module: # Connect the ESP and the FTDI as in your top diagram, set your # terminal-emulator to 115200 baud, and enter the following: AT # ESP should respond "OK" AT+RST # Resets the ESP AT+UART_DEF=9600,8,1,0,0 # Sets ESP UART: 9600,N,8,1,no flow ctl # Now change the terminal emulator baud rate to 9600 AT+CWMODE=1 # Set ESP to station mode (client) ATE0 # Set ESP"s echo off AT+CWLAP # List access points - after a short pause # the ESP returns a list of WiFi access points
Per riferimento futuro, ecco un collegamento al ESP8266 AT set di istruzioni .
Aggiornamento giugno 2020: il collegamento precedente è stato interrotto, ora corretto. È inoltre possibile trovare la documentazione in account github di Espressif (leggibile online, ma non pdf, a partire da questa data).
Commenti
- Mi sono appena reso conto che questa domanda è stata estratta dallarchivio di domande senza risposta di 6 mesi fa . Oh, beh, forse questa risposta aiuterà qualcun altro adesso o presto.
Risposta
Potrebbe esserci un problema con la velocità di trasmissione dal chip Nano FTDI a RX / TX e ESP8266. Ti sei disconnesso durante il caricamento dello schizzo?
Che ne dici di provare questo invece?
Saluti!
Commenti
- Quando lavoro con ESP8266, funziona a 115200 baud, tutto il resto dà solo spazzatura . Ho ‘ ho provato il codice dal blog collegato (cambiando solo la velocità di trasmissione), vedo che ‘ sta inviando il comando a ESP8266 (luce blu lampeggiante), ma non riesce quando tenta di eseguire Serial.find (” > “). Inoltre, non vedo alcun output dallESP8266. Ho scollegato lESP8266 durante il caricamento.
Risposta
Sono incappato in un buon tutorial qui, ho provato e fa il lavoro: https://blogs.msdn.microsoft.com/abhinaba/2016/01/23/esp8266-wifi-with-arduino-uno-and-nano/
Commenti
- Funzionerà ad eccezione del comando CIOBAUD che è stato sostituito.Il comando corrente per tutte le funzioni UART è:
AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>
oAT+UART_DEF-9600,8,1,0,0
per essere compatibile con SoftwareSerial. Sostituisci ” _DEF ” con ” _CUR ” se questa modifica è solo per la sessione; il primo comando lo rende limpostazione predefinita allaccensione. - Puoi espandere le informazioni di quel blog in questa risposta se il collegamento muore, ma anche per renderlo una risposta migliore
Risposta
Sì, se stai usando fonti di alimentazione diverse le masse devono essere sempre collegate, altrimenti le schede non sanno cosa zero volt è.
Il TX di Arduino è 5v, è necessario un cambio di livello per convertire 5v in 3,3v, qualcosa del genere ( https://shop.pimoroni.com/products/adafruit-4-channel-i2c-safe-bi-directional-logic-level-converter?utm_medium=cpc&utm_source=googlepla&variant=302017581&gclid=CPqujsPxlc0CFcYcGwodb8YIoA )
Il TX dellESP8266 è 3.3v e lRX di Arduino è 5V e avrai bisogno di un cambio di livello per gestirlo. Puoi usa lo stesso come elencato sopra, perché può convertire 4 segnali alti (5v) in 4 segnali bassi (3,3v).
La gente dice che puoi farlo con i resistori, ma ho anche letto che non funzionano abbastanza bene per gestire segnali digitali a commutazione rapida (quindi 300 Baud sul tuo seriale potrebbero andare bene, ma non 115000 :))
Persone a Quindi dì che non hai bisogno di convertitori di livello. Le cose vere potrebbero funzionare per un po senza di esse, ma prima o poi qualcosa scoppierà. Aumentando la tensione si accelererà il processo in modo da poter immaginare cosa succederebbe se si collegasse unalimentazione a 230 V direttamente su un dispositivo USB.
Un ultimo punto, sai che lESP8266 è un processore da 80 / 160MHz con 256KB di RAM, quando lo paragoni a te Arduino è come programmare il tuo PC tramite il tuo telefono. potresti provare a collegare lESP8266 tramite un modulo FTDI e programmarlo tramite lIDE di Arduino in Arduino C. È molto più semplice di tutte queste cose di connessione.