ESP8266 - una giungla di firmware AT

Ciao a tutti!
Dopo aver sperimentato ed imparato molto sugli ESP8266, ancora non sono riuscito a fare una richiesta http con successo.
Con un modulo versione 12E (AT version 0.40 su per giù) riesco a connettermi al wifi, apro connessioni TCP, faccio una richiesta GET, ma ricevo SEMPRE risposte "400 Bad Request" scritte in mezzo al codice html.
Con un modulo versione 12 (AT version 0.21.0.0) non mi lascia nemmeno cercare le reti WIFI, perché dando un AT+CWLAP mi risponde sempre Error (e non sembra esistere manco UART_CUR o UART_DEF, ma solo il vecchio e deprecato UART).

Vorrei quindi fare l'upgrade dei firmware, che entrambi quando resettati dicono di avere Flash size di 4Mbit, ma ho qualche difficoltà a capire quale sia il firmware corretto, in quanto il sito della espressif è fatto abbastanza da cani.

Ho trovato sia il firmware con AT v 0.60 che v1.1 ma entrambi riportano che sono troppo grandi per flash da 4Mbit, quindi presumo che non vadano bene per il mio caso.

Quale firmware devo installare tramite esptool.py?

Prima di cambiare il firmware, dovresti farci vedere lo sketch che stai utilizzando.

Ma prima ancora, ci fai vedere i collegamento che hai fatto e come alimenti il modulo che richiede almeno 200mA?

Hai tenuto in considerazione che il modulo funziona a 3.3V e che per collegarlo al Arduino ci vogliono almeno due adattatori di livello per i pin Rx e Tx?

Ciao cyberhs,
per ora sto usando un adattatore usb-uart (come questo) e mi sto interfacciando direttamente con il modulo wifi attraverso il monitor seriale dell’arduino IDE, quindi niente sketch.

Sto però utilizzando questa configurazione:

Poiché ho notato dei continui riavii utilizzando i 5V forniti dall’adattatore (non credo siano stabilizzati), utilizzo un AMS1117 da 3.3V, che taglia i 5V presi dal pin dell’arduino (e quindi la corrente viene presa da un’altra porta usb) e non ho più problemi di riavvii.

Invece per adattare il livello del segnale dall’adattatore al modulo ESP utilizzo un circuito di clipping costruito tramite una resistenza e uno zener da 3.3V.
Per il segnale da modulo wifi a adattatore invece non uso niente, in quanto i 3.3V erogati dall’ESP come segnale logico alto “dovrebbero” essere abbastanza, o perlomeno per l’ATmega328 presente sull’arduino UNO i 3.3V sono sufficienti per essere interpretati come segnale analogico alto (pagina 308).
Non dico volontariamente TX o RX perché sull’arduino bisogna incrociarli, mentre sull’adattatore bisogna accoppiarli.
Quindi il TX dello schematico qua sopra in realtà è l’RX dell’adattatore.

Tutto questo l’ho imparato in questa discussione insieme a SukkoPera.

Nel frattempo ho scoperto che il modulo 12 non vedeva i wifi perché impostato solo su AP anziché su STA(tion). Una volta modificato va benone.

Ora ENTRAMBI i moduli mi restituiscono SEMPRE Bad Request.
Posto un esempio di dialogo sul monitor seriale con il modulo versione 12, tramite l’adattatore usb:

AT


OK
AT+GMR

AT version:0.21.0.0
SDK version:0.9.5

OK
AT+CIFSR

+CIFSR:STAIP,"192.168.1.32"
+CIFSR:STAMAC,"18:fe:34:da:6d:09"

OK
AT+CIPSTART="TCP","arduino.cc",80

CONNECT

OK
AT+CIPSEND=42


OK
> GET / HTTP/1.1\r\nHost: arduino.cc\r\n\r\n
busy s...

SEND OK

+IPD,172:<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.4.2</center>
</body>
</html>
CLOSED

Credo di sbagliare qualcosa nella richiesta di GET http, ma cosa manca?

…sto stringendo amicizia con il signor Nginx… è uno simpatico anche se di poche parole! :stuck_out_tongue:

quercus:
Nel frattempo ho scoperto che il modulo 12 non vedeva i wifi perché impostato solo su AP anziché su STA(tion). Una volta modificato va benone.

Anche io me lo dimentico sempre!

Perché non usi un semplice partitore resistivo al posto dello zener per adattare il livello da 5V a 3.3V?

Un resistore da 1800 più uno da 3300 potrebbe andar bene.

Non vedo il collegamento del pin Rx di Arduino con il Tx del modulo: per fare le cose bene occorrerebbero due resistori ed un transistor.

Quei collegamenti sono testati e collaudati :). Dovrebbe funzionare, e in effetti dubito che l'errore Bad Request possa essere dovuto a un problema di collegamento elettrico.

Hai provato il modulo con la libreria WiFiESP?

Intendi questa ( GitHub - itead/ITEADLIB_Arduino_WeeESP8266: An easy-to-use Arduino ESP8266 library besed on AT firmware. )? o quale altrimenti?

No, questa: GitHub - bportaluri/WiFiEsp: Arduino WiFi library for ESP8266 modules.

Ciao SukkoPera, grazie del consiglio e mi scuso per il ritardo.

Ho provato la libreria linkata, e provando l’esempio ScanNetworks, per un paio di minuti ha funzionato perfettamente, poi staccando e riattaccando la usb che gli fornisce corrente diceva che non c’era più alcun modulo collegato (>> TIMEOUT >> uno dietro l’altro), e ora appena sfiorandolo è ripartito a fare scansioni… non capisco se questa instabilità riguardi il software o le connessioni hardware. In ogni caso è molto frustrante.

ho notato però che è un po’ impreciso (ho impostato entrambe le seriali, software al modulo wifi e hardware per la comunicazione col pc, a 9600bps):

...

Scanning available networks...
Number of available networks:6
0) AP-casa Signal: -75 dBm Encryption: WPA2_PSK
1) AP-casa-1-DPF3ESnKcqwL_EXT Signal: -46 dBm Encryption: WPA_WPA2_PSK
2) testAPata2G Signal: -30 dBm Encryption: None
3) Tecnodata2Gwork-805 Signal: -89 dBm Encryption: None
4) TrentinoNetwork-805 Signal: -89 dBm Encryption: None
5) FASTWEB-1-DPF3ESnKcqwL_EXT Signal: -94 dBm Encryption: WPA_WPA2_PSK

la rete numero 1 si dovrebbe chiamare anch’essa AP-casa, ed è il secondo accesso access point che ho in casa.
la rete numero 2 in realtà si chiama testAP, e la sto creando col cellulare.

Inoltre, mentre sto scrivendo ho lasciato aperto il monitor seriale: il modulo wifi ha fatto un flash un po’ più deciso e si è piantato:

Scanning available networks...
Number of available networks:4
0) AP-casa Signal: -80 dBm Encryption: WPA2_PSK
1) AP-casa Signal: -43 dBm Encryption: WPA_WPA2_PSK
2) testAPata2G Signal: -23 dBm Encryption: None
3) Tecnodata2Gwork-805 Signal: -88 dBm Encryption: None

Scanning available networks...
[WiFiEsp] >>> TIMEOUT >>>
Couldn't get a wifi connection

anche qua la rete 2 è stata storpiata…

Avete consigli per stabilizzare il modulo? solo a me fa così? Ora provo a cambiarlo…

Allora.. ho sostituito il modulo con uno fresco di cina, l'ho saldato su un adattatore PCB (come consigliato qua), con l'adattatore usb seriale ho abbassato la velocità a 9600 baud (il firmware è vecchio e non esistono UART_CUR o UART_DEF ma solo UART), poi attaccandolo all'arduino sto facendo girare il test ScanNetworks della libreria WiFiESP, e in un paio di minuti, con una ricerca ogni 5 secondi, non si è mai piantato.

Invece credo che il fatto lo script faccia un pasticcio con i nomi delle reti sia dovuto al software.. è come se non resettasse l'array di char prima di riusarlo; credo che aprirò un bug report su github se mai riuscirò a far funzionare qualcosa:

...

Scanning available networks...
Number of available networks:5
0) AP-casa Signal: -85 dBm Encryption: WPA2_PSK
1) AP-casas casa Signal: -55 dBm Encryption: WPA_WPA2_PSK
2) Wireless casark-805 Signal: -80 dBm Encryption: WPA_PSK
3) Tecnodata2Gwork-805 Signal: -93 dBm Encryption: None
4) TrentinoNetwork-805 Signal: -90 dBm Encryption: None

Scanning available networks...
Number of available networks:3
0) AP-casa Signal: -86 dBm Encryption: WPA2_PSK
1) AP-casas casa Signal: -55 dBm Encryption: WPA_WPA2_PSK
2) Wireless casark-805 Signal: -80 dBm Encryption: WPA_PSK

Scanning available networks...
Number of available networks:5
0) AP-casa Signal: -87 dBm Encryption: WPA2_PSK
1) AP-casas casa Signal: -54 dBm Encryption: WPA_WPA2_PSK
2) Wireless casark-805 Signal: -82 dBm Encryption: WPA_PSK
3) Tecnodata2Gwork-805 Signal: -95 dBm Encryption: None
4) TrentinoNetwork-805 Signal: -95 dBm Encryption: None

Provando invece il test ClientTest, non riesco a connettermi ne alla rete di casa ne ad una realizzata tramite telefono, aperta e chiamata abcxyz (ho impostato char pwd = ""; ) .. che si sappia, questa libreria supporta solo certi tipi di crittografie?
Qua nel README è scritto "begin() - Not all authentication types" .. :cry: :angry:

quercus:
Qua nel README è scritto "begin() - Not all authentication types" .. :cry: :angry:

Credo si riferisca al fatto che da libreria non sono stati implementati tutti i possibili tipi di autenticazione che sono possibili con la WiFI shield originale di Arduino.
Ciò non toglie che tu potresti usare i comandi AT per il collegamento, anche da terminale senza Arduino. L'ESP8266 una volta collegato memorizza tutto nella flash in automatico per cui appena lo accendi, anche scollegato da Arduino, dovrebbe collegarsi da solo. Se non ricordo male perché ultimamente lo uso per i fatti suoi e non con Arduino.