Problema scheda ESP8266

Sì, però non sei obbligato a farlo, nulla ti vieta di usare l'ESP unicamente come "scheda wireless" per interfacciare un Arduino, se ti trovi più a tuo agio così. Hai già provato questa libreria?

https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

SukkoPera: Sì, però non sei obbligato a farlo, nulla ti vieta di usare l'ESP unicamente come "scheda wireless" per interfacciare un Arduino, se ti trovi più a tuo agio così. Hai già provato questa libreria?

https://github.com/itead/ITEADLIB_Arduino_WeeESP8266

Grazie per la segnalazione; l'avevo già vista ma non l'ho mai provata. In pratica a me interessa sfruttare la scheda per la connessione WiFi (in pratica ho bisogno di inviare pacchetti TCP, oppure direttamente HTTP). In questo caso può funzionare il sistema, in modo che possa già sfruttare le librerie per Arduino ?

Beh, direi di sì. In verità per ora con quella libreria ho fatto poco, ma a breve dovrei iniziare a usarla un po' più seriamente. Dagli esempi sembra che non ci siano problemi a fare connessioni TCP o direttamente HTTP.

SukkoPera:
Beh, direi di sì. In verità per ora con quella libreria ho fatto poco, ma a breve dovrei iniziare a usarla un po’ più seriamente. Dagli esempi sembra che non ci siano problemi a fare connessioni TCP o direttamente HTTP.

Salve,
allora ho caricato il seguente programma:

/**
 * @example ConnectWiFi.ino
 * @brief The ConnectWiFi demo of library WeeESP8266. 
 * @author Wu Pengfei<pengfei.wu@itead.cc> 
 * @date 2015.03
 * 
 * @par Copyright:
 * Copyright (c) 2015 ITEAD Intelligent Systems Co., Ltd. \n\n
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version. \n\n
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
#include "ESP8266.h"
#include <SoftwareSerial.h>

#define SSID        "laMiarete"
#define PASSWORD    "laMiaPassword"

SoftwareSerial mySerial(3, 2); /* RX:D3, TX:D2 */
ESP8266 wifi(mySerial);

void setup(void)
{
    Serial.begin(9600);
    Serial.print("setup begin\r\n");

    Serial.print("FW Version: ");
    Serial.println(wifi.getVersion().c_str());
    
    
    if (wifi.setOprToStation()) {
        Serial.print("to station ok\r\n");
    } else {
        Serial.print("to station err\r\n");
    }

    if (wifi.joinAP(SSID, PASSWORD)) {
        Serial.print("Join AP success\r\n");
        Serial.print("IP: ");       
        Serial.println(wifi.getLocalIP().c_str());
    } else {
        Serial.print("Join AP failure\r\n");
    }
    
    Serial.print("setup end\r\n");
}

void loop(void)
{
}

I collegamenti sono:

VCC 5 Volt->+
GND → -
D2 → TX
D3 → RX

E ottengo il seguente risultato:

setup begin
FW Version: 
to station err
Join AP failure
setup end

Ho sbagliato qualcosa ?

Utilizzo l’adattatore mostrato nell’immagine in questo link.

Prova a scambiare TX e RX. Peraltro ti ci vorrebbe anche un partitore di tensione per adattare i 5V sul TX di Arduino ai 3.3 che si aspetta l'ESP. Procurati due resistori, uno il doppio dell'altro.

SukkoPera: Prova a scambiare TX e RX. Peraltro ti ci vorrebbe anche un partitore di tensione per adattare i 5V sul TX di Arduino ai 3.3 che si aspetta l'ESP. Procurati due resistori, uno il doppio dell'altro.

Ho provato a scambiare il TX e RX, sia sui PIN 0 e 1, sia sui 3 e 2 come indicato nel programma. Come ho già scritto io uso un adattatore per collegare Arduino alla scheda WiFi ESP8266, in modo da non avere "problemi" di alimentazione dell'uscita 3.3 V di Arduino. Hai qualche altro suggerimento ?

Per il momento no, ieri ho provato a smanettarci anch’io senza cavare un ragno dal buco. Anzi, credo di avere rovinato il firmware di due moduli. Prossima settimana riprendo lo smanettamento.

L’adattatore esterno per alimentare l’ESP è essenziale comunque, può assorbire anche 300 mA, che sono 6 volte tanto quel che può erogare Arduino. Ho provato un regolatore collegato al VIN ma non è ancora sufficiente.

Hai collegato le masse insieme?

Cambia

ESP8266 wifi(mySerial);

in

ESP8266 wifi(mySerial, 115200);

scaricando l'ultima versione della libreria. I nuovi moduli ESP vanno a 115200 non a 9600.

Credo che la SoftwareSerial comunque non li regga. Se è così li devi riprogrammare per farli andare a velocità minori.

Ah, questa informazione non l'ho trovata da nessuna parte! Comunque sì, credo che la SoftwareSerial vada al max a 19200.

Mi pare l’abbiano scritto in una delle prime 50 pagine → http://forum.arduino.cc/index.php?topic=265682.0

:disappointed_relieved:

PaoloP: Cambia

ESP8266 wifi(mySerial);

in

ESP8266 wifi(mySerial, 115200);

scaricando l'ultima versione della libreria. I nuovi moduli ESP vanno a 115200 non a 9600.

Credo che la SoftwareSerial comunque non li regga. Se è così li devi riprogrammare per farli andare a velocità minori.

Ho provato a fare la modifica che hai indicato ma nulla. Ho collegato anche una resistenza in serie da 1 kohm tra il pin D3 di Arduino e il RX dell'adattatore, a cui è collegato la scheda WiFi. In pratica lo schema è il seguente:

VCC 5 V -> + GND -> - D3 1Kohm (Serie) -> RX D2 -> TX

Ottengo sempre il medesimo errore, qualche aiuto ? Mi piacerebbe proprio riuscire a far funzionare questa scheda WiFi !

Bisogna convertire i livelli,

dai 5v ai 3.3v tramite un partitore 1k-2k2

e dai 3.3v ai 5v tramite porta logica , molte volte funziona anche senza niente

icio: Bisogna convertire i livelli,

dai 5v ai 3.3v tramite un partitore 1k-2k2

e dai 3.3v ai 5v tramite porta logica , molte volte funziona anche senza niente

Grazie per la risposta. Quindi il tuo suggerimento sarebbe quello di modificare i collegamenti TX e RX attraverso un partitore di tensione, in modo che l'adattatore legga una tensione di 3.3 V, è corretto ?

Nel messaggio 1 e 4 hai detto che hai già l'Adattatore ADP-01 che comprende sia il riduttore di tensione a 3.3v che l'adattatore di livello, come confermato anche dai messaggi successivi, ora siamo al 34 messaggio e ancora cosa non ti è chiaro?

icio: Nel messaggio 1 e 4 hai detto che hai già l'Adattatore ADP-01 che comprende sia il riduttore di tensione a 3.3v che l'adattatore di livello, come confermato anche dai messaggi successivi, ora siamo al 34 messaggio e ancora cosa non ti è chiaro?

La situazione è questa: ho capito il ruolo dell'adattatore e il motivo del suo utilizzo per la scheda WiFi. Il problema è che il codice che ho indicato, non funziona, ovvero ottengo un errore in fase d'esecuzione mentre provo a collegarmi alla mia rete WiFi. Ho provato diverse combinazioni tra i collegamenti RX e TX ma niente. Non so più cosa fare :(

E' possibile che sia guasto o abbia un difetto, se ne hai solo uno questa cosa non è possibile verificarla

Lo schema del messaggio4 è quello giusto

icio: E' possibile che sia guasto o abbia un difetto, se ne hai solo uno questa cosa non è possibile verificarla

Lo schema del messaggio4 è quello giusto

Ho fatto richiesta di una nuova scheda WiFi e farò sapere se il problema è relativo a tale dispositivo. Lo schema a cui si riferisce è il seguente:

Arduino->Adattatore->Scheda WiFi

VCC 5 V -> + GND -> - D3 -> RX D2 -> TX

Ho ripreso a giocare un po' coi miei modulini e sono riuscito a concludere qualcosa. Ho innanzitutto capito che la prima domanda da porsi è: che firmware c'è sull'ESP??? I miei sono arrivati col NodeMCU, che non va bene se si vuole usare l'ESP solo come "scheda wireless" per un Arduino. In tal caso bisogna metterci il firmware AT (Ultima versione disponibile qua: http://bbs.espressif.com/viewtopic.php?f=46&t=1123).

La libreria di cui sopra funziona solo con il firmware AT. Ho scoperto che per i moduli più recenti bisogna scaricare il branch "develop", che è più aggiornato. All'interno di ESP8266.h è possibile settare un paio di #define, uno per usare la SoftwareSerial e uno per usare i comandi AT 0.18 o 0.22: in realtà l'unica differenza sembra essere la velocità a cui viene impostata la seriale, rispettivamente 9600 o 115200 bps. Sugli ultimi firmware la velocità di default è la seconda, per cui bisognerebbe impostare la libreria su 0.22.

Tuttavia, SoftwareSerial non può arrivare a questa velocità, per cui se si vuole usare una Uno, un'alternativa è impostare l'ESP in modo che si colleghi a una velocità inferiore. Per fare questo serve un adattatore USB-Seriale (o un Arduino Uno in Serial Passthrough, o eventualmente si potrebbe scrivere uno sketch da usare una tantum), collegarsi all'ESP con un terminale e poi IN TEORIA dare il comando:

AT+IBR=9600

Peccato che questo sembri "brickare" il modulo con molte versioni del firmware :(. Non saprei se sulle ultime funzioni (EDIT: No, anche la 0.50 è buggata), ma fortunatamente esiste un'alternativa funzionante:

AT+UART_DEF=9600,8,1,0,0

(Da http://www.esp8266.com/viewtopic.php?f=6&t=1997)

Con questo non ho risolto tutti i problemi, ma sono riuscito a fare qualcosa. Altre cose da non sottovalutare sono quelle ripetute mille volte: non alimentare il modulo dal 3.3 di Arduino, ma usando un regolatore esterno e usare il partitore sul TX di Arduino per portarlo a 3.3v.

Grazie per la condivisione!

Ho scaricato il firmware AT e dentro, nel README, leggo che si parla di due modalita: boot mode e non boot mode.

La spiegazione sarebbe scritta qui http://bbs.espressif.com/viewtopic.php?t=1137

boot mode : After connected to AP, ESP8266 can upgrade the AT firmware through WiFi by command "AT+CIUPDATE". This mode need the flash size to be 1MBytes or larger than that.

non-boot mode : ESP8266 can not upgrade the AT firmware through WiFi. The flash size can be 512KB.

Per cui chi ha i comuni moduli da 512K dovrebbero seguire le seguenti direttive

eagle.flash.bin 0x00000 eagle.irom0text.bin 0x40000 blank.bin Flash size 4Mbit: 0x3e000 & 0x7e000

o sbaglio?