Salve,
ancora una volta mi servirebbe una mano da parte della comunity.
Sto cercando di fare dei test col modulo ESP8266 esp01 (quello con solo 2 gpio), per alimentarlo uso un level shifter 5 - 3.3 v.
Ho usato questo schema di cablaggio un po' modificato, perche' il mio modello prevede di alimentare sia il lato 5v che il lato 3.3v sui pin centrali e rimangono quattro pin per il level shiting, i die a dx e i due a sx.
Ho provato col multimetro e il level shifter funziona correttamente. Se do 5v in uno dei 4 pin laterali, dall'altra parte leggo 3.25V
Ho scaricato questa libreria. Nello specifico, provando l'esempio GET IP il cui codice è questo:
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <ESP8266_Simple.h>
// These are the SSID and PASSWORD to connect to your Wifi Network
#define ESP8266_SSID "MIOSSID"
#define ESP8266_PASS "MIAPASS"
ESP8266_Simple wifi(8,9);
// See HelloWorld example for further comments.
void setup()
{
Serial.begin(115200); // Reduce this if your Arduino has trouble talking so fast
Serial.println("ESP8266 Demo Sketch");
wifi.begin(9600);
wifi.setupAsWifiStation(ESP8266_SSID, ESP8266_PASS, &Serial);
// A blank line just for debug formatting
Serial.println();
}
void loop()
{
// This example is just to show you how to grab the IP address of your
// device after it has connected, in case you want to do something with
// it.
// You can get it either as a 16 byte string, or as a long unsigned integer
// representation.
char ipAddressString[16]; // 16 bytes needed
unsigned long ipAddressLong; // only 4 bytes needed
// Either way, you get the address exactly the same.
wifi.getIPAddress(ipAddressString);
wifi.getIPAddress(ipAddressLong);
// And then do what you like with it.
Serial.print("The string IP is: ");
Serial.println(ipAddressString);
Serial.print("The unsigned long IP is: ");
Serial.println(ipAddressLong);
// You can convert from one to the other
strcpy(ipAddressString,"127.0.0.1");
wifi.ipConvertDatatypeFromTo(ipAddressString,ipAddressLong);
Serial.print("The IP address "); Serial.print(ipAddressString);
Serial.print(" has integer value "); Serial.println(ipAddressLong);
ipAddressLong = 0x36F1256B;
wifi.ipConvertDatatypeFromTo(ipAddressLong,ipAddressString);
Serial.print("The integer value "); Serial.print(ipAddressLong);
Serial.print(" has IP address "); Serial.println(ipAddressString);
Serial.println("End of Demo");
Serial.println();
delay(5000);
}
ma non funziona.
La seriale mi restituisce
Reset: General Error in loop.
Il led del modulo wifi diventa rosso , quindi suppongo che si accenda correttamente e poi quando è acceso nella rete vedo un dispositivo ai-thinker xx che compare e mi ci posso connettere con un certo ip.
Il problema sembra essere la comunicazione.
qualcuno puo' aiutarmi ?
Questo è lo schema.
L'unica differenza come vedete nel post prima, sta nella marca del level shifter.
Mi sono accorto col multimetro che lavora in modo strano. ovvero leggo sempre 5V da una parte e 3.3 v dall'altra, su tutti i piedini, anche se scollegati o anche se lo stato logico dovrebbe essere 0-
e' normale?
Attenzione che il tuo schema su fritzing non ha senso.
Non devi collegare i 3.3V di Arduino quindi togli quel cavo.
Il concetto è:
Arduino passa 5V (per intenderci nella parte alta della breadboard), il level shifter la trasforma a 3.3V e con quelli (parte bassa della breadboard) alimenta il modulo ESP-01.
Credo che tu abbia ragione guimex.
Sto stampando un porta-batterie AA da 3 cosi' da avere un poco piu' di 3.3v per poi abbassare la tensione con qualche diodo e avere ampere a sufficienza.
Il problema credo sia che il 3.3V mi fornisce 70mA reali, mentre la ESP 8266 ne richiede fino a 250.
Devo provare e poi lascio feedback
Sto lavorando con lo stesso modulo, per risolvere rapidamente il problema del level shifter ho usato un partitore resistivo per l'ingresso RX, e una resistenza di carico sul TX mi pare 470 ohm, per l'alimentatore ho sato un alimentatore a 3,3V. il modulo comunica e risponde ai comandi AT.
Per controllare che avvenga il traferimento dati ti suggerirei di usare un oscilloscopio e non un multimetro.
GiuMex:
Perché vuoi usare le batterie se hai già l'alimentazione di Arduino?
5V di arduino e level shifter vanno benissimo.
Ciao giumex.
Non credo di aver ben capito cosa intendi. Se non do un 3.3V di reference dalla parte LH del level shifter, e dall'altra (HV) metto i 5V dell'arduino, il modulo non si accende proprio.
Grazie mille per il tuo aiuto.
Edit:
Ho provato ad alimentare la parte 3.3V con 3 batterie AA 1.2V 1200mA.
Ho misurato col multimetro e il pacco batterie faceva 3.9V.
Per abbassare la corrente ho messo un diodo raddrizzatore in serie (1n4007) per abbassare la corrente e mi sono ritrovato i pedini a 3.1V entro il range di lavoro immagino.
Pero' ho sempre lo stesso risultato, la seriale mi da
Reset: General Error
Reset: General Error
Reset: General Error
...........
Ho provato a switchare i cavetti Tx e Rx del modulo e l'unica cosa che cambia è che il led blu lampeggia con frequesnza di circa 1s
firefox50:
Sto lavorando con lo stesso modulo, per risolvere rapidamente il problema del level shifter ho usato un partitore resistivo per l'ingresso RX, e una resistenza di carico sul TX mi pare 470 ohm, per l'alimentatore ho sato un alimentatore a 3,3V. il modulo comunica e risponde ai comandi AT.
Per controllare che avvenga il traferimento dati ti suggerirei di usare un oscilloscopio e non un multimetro.
Magari avessi un oscilloscopio e la competenza per usarlo al meglio . Forse non sarei così nabbo in elettronica =)
Mi faresti uno schizzo in fritzing della tua configurazione funzionante che la provo pure io e ti faccio sapere....
Grazie mille per il tuo aiuto
Ragazzi, davvero non ne vengo fuori.
Ero sicuro che con le batterie stilo, avendo abbastanza corrente di input sarei riuscito a farcela, invece ancora niente.
Una anima pia si prende la briga di farmi uno schemino in fritzing o su carta dei corretti collegamenti?
Potrebbe essere che le schedine ESP mi sono arrivate senza firmware dentro? (non credo perche' se nella rete, quando gli do corrente, vedo apparire un dispositivo AI thinker generico, credo che il firmware c'e' l'abbia)....
Per favore, datemi un aiuto a capire dove sto sbagliando!
Grazie infinite!
In ogni caso, se hai difficoltà, io ti consiglio di trovare una soluzione più semplice per alimentare ESP-01 utilizzando esclusivamente Arduino. Guarda ad esempio lo schema in allegato che hanno condiviso nel thread ufficiale del forum.
Ho capito successivamente che potevano esserci problemi a usare i 3.3V di arduino per colpa della poca intensità di corrente che puo' fornire quell'uscita e infatti ho attaccato le 3xAA batterie, semplicemente sostituendo il cavetto 3.3 v che partiva dall'arduino con quello che parte dalle batterie, ma non ho avuto risultati!!!
Potrebbe essere un problema di Firmware???
Stasera provero' anche con la seconda possibilità che mi hai dato, alimentando direttamente dai 5V con i diodi raddrizzatori. speriamo che riesca a capire qualcosa di piu'!
I segnali Tx e Rx che vanno dall'ESP al Level Converter sono invertiti
Idem per quelli che vanno dal Level Converter ad Arduino se hai usato SoftwareSerial xxx(8,9)
Le resistenze in serie, con un level Converter, non servono
Il 3.3v di Arduino non fornisce abbastanza corrente
Brunello,
intanto grazie infinite per avermi dedicato qualche minuto, siete fantastici!
Volevo risponderti ai punti
Hai ragione, l'ho dimenticato nello schema Fritzing, ma sulla mia breadboard ovviamente c'e' il cavetto GND su arduino =) (scusate per l'errore)
2e3) Se vedi il primo post, quella non è esattamente il modello di logic level converter che ho io. io ho quello che dovrebbe essere bi-direzionale su tutti i canali (quello con HV1 HV2 ... LV1 LV2... non TX1 RX1 ecc)
Ma siccome non ho chiaro su arduino quale ' RX e quale TX ognio volta che faccio un test con una configurazione diversa, li switcho e resetto arduino per vedere cosa succede (sempre e solo sulla parte 3.3v del LLC).
non ho inserito resistenze in serie, pero' mi potresti spiegare perche' le resistenze in serie con il LLc non servono ?
L'ho scoperto successivamente e ieri sera ho provato con 3x batterie AA che mi davano (dopo la caduta di tensione su un diodo 1n4007) 3.0V sui piedini e 1200mA nominali (batterie ricaricabili ni-mh)
Di un altra marca (blu invece che rosso, ma è lui)
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <ESP8266_Simple.h>
// These are the SSID and PASSWORD to connect to your Wifi Network
#define ESP8266_SSID "MIOSSID"
#define ESP8266_PASS "MIAPASS"
ESP8266_Simple wifi(8,9);
// See HelloWorld example for further comments.
void setup()
{
Serial.begin(115200); // Reduce this if your Arduino has trouble talking so fast
Serial.println("ESP8266 Demo Sketch");
wifi.begin(9600);
wifi.setupAsWifiStation(ESP8266_SSID, ESP8266_PASS, &Serial);
// A blank line just for debug formatting
Serial.println();
}
void loop()
{
// This example is just to show you how to grab the IP address of your
// device after it has connected, in case you want to do something with
// it.
// You can get it either as a 16 byte string, or as a long unsigned integer
// representation.
char ipAddressString[16]; // 16 bytes needed
unsigned long ipAddressLong; // only 4 bytes needed
// Either way, you get the address exactly the same.
wifi.getIPAddress(ipAddressString);
wifi.getIPAddress(ipAddressLong);
// And then do what you like with it.
Serial.print("The string IP is: ");
Serial.println(ipAddressString);
Serial.print("The unsigned long IP is: ");
Serial.println(ipAddressLong);
// You can convert from one to the other
strcpy(ipAddressString,"127.0.0.1");
wifi.ipConvertDatatypeFromTo(ipAddressString,ipAddressLong);
Serial.print("The IP address "); Serial.print(ipAddressString);
Serial.print(" has integer value "); Serial.println(ipAddressLong);
ipAddressLong = 0x36F1256B;
wifi.ipConvertDatatypeFromTo(ipAddressLong,ipAddressString);
Serial.print("The integer value "); Serial.print(ipAddressLong);
Serial.print(" has IP address "); Serial.println(ipAddressString);
Serial.println("End of Demo");
Serial.println();
delay(5000);
}
Esiste un qualche altro sketch di esempio che potrei usare per capire quando sono arrivato al punto di farlo comunicare correttamente?
#include "SoftwareSerial.h"
SoftwareSerial Esp_serial(8, 9); // RX, TX
void setup()
{
//Dato che l'ESP, a seconda del Firmware, puoùò essere impostato a Baud Rate diversi
// scegliere quello corretto tra le due seguenti configurazioni
Esp_serial.begin(9600);
//Esp_serial.begin(115200);
// Impostazioni della porta per il serial monitor
Serial.begin(115200); // serial port used for debugging
}
void loop()
{
if (Esp_serial.available()) // check if the ESP is sending a message
{
while (Esp_serial.available())
{
int c = Esp_serial.read(); // read the next character
Serial.write((char)c); // writes data to the serial monitor
}
}
if (Serial.available())
{
// wait to let all the input command in the serial buffer
delay(10);
// read the input command in a string
String cmd = "";
while (Serial.available())
{
cmd += (char)Serial.read();
}
// print the command and send it to the ESP
Serial.println();
Serial.print(">>>> ");
Serial.println(cmd);
// send the read character to the ESP
Esp_serial.print(cmd);
}
}
come mai la prima volta e' andato e poi i caratteri impazziscono ?
edit: ho notato che il modulo ESP parte a volte si e a volte no. il risultato detto sopra lo ottengo solo se faccio toccare fisicamente il pin CH_PD al secondo diodo che arriva io 3.3v dello schema del post precedente
edit dell'edit: se collego il pacco batterie che quando funziona arriva a 3.0V non serve fare la procedura del primo edit; la comunicazione parte a patto che io abbia il baud a 115200.