Aaah ecco perche! Ho capito grazie mille .
Come faccio pero' a dire al mega di fare lavorare tutti gli altri componenti con la seriale
Serial2.begin(9600);
????
Aaah ecco perche! Ho capito grazie mille .
Come faccio pero' a dire al mega di fare lavorare tutti gli altri componenti con la seriale
Serial2.begin(9600);
????
Se gli altri vanno a 115200 puoi settare anche l'ESP8266 con il comando che ti ha scritto Brunello prima.
Oppure cambi quello degli altri dispositivi.
Oppure usi anche la terza seriale.
Resta sempre l'obbligo che due seriali, per parlare tra loro, devono andare alla stessa velocità, usare lo stesso numero di bit (8 ma qualcuno va a 7), usare la stessa parità (di solito è nessuna ma a volte mi è capitato Even insieme ai 7 bit) e lo stesso numero di bit di stop (di solito 1 ma se i bit sono 7 spesso quelli di stop sono 2). Quindi il settaggio più comune è 8N1, cioè 8bit, nessuna parità e un bit di stop.
Non so che altri dispositivi usi, devi vedere la loro documentazione perché potrbbero esserci altre complicazioni, ad esempio l'handshake.
Ciao, io devo controllare attraverso l ESP8266-01:
-Modulo tenperatura ed umidità "dht11"
-Sensore ultrasuoni "HC-SR04"
-Schermo LCD
-2 led
-1 led RGB
-Fotoresistenza
-4 motori DC
-1 servomotore da 180°
-1 sensore EMF
Prima di passare al controllo via web attraverso il wifi utilizzavo il bluetooth con la comunicazione a 9600.
Ora che l ESP funziona a 115200 mi sta un po scombussolando tutto
Lo puoi lasciare a 9600.
Non conosco il sensore EMF ma gli altri non vanno sulla seriale.
Ovvio che ti scombussola tutto, prima tu comunicavi in seriale via bluetooth. Puoi fare lo stesso con l'ESP8266, ci sono un paio di sketch (che non ricordo e non ho mai usato però) che trasformano l'ESP8266 in un adattatore seriale ethernet. Quindi sull'ESP8266 ci sarà un server che ascolterà su una porta. In questo modo lo sketch della Mega resta uguale, al posto del bluetooth metti l'ESP8266 configurato per la tua WiFi.
Il software di controllo cambia nel senso che adesso apri un socket sulla porta dellESP8266 dopodiché tutto quello che mandi sul socket va a finire alla Mega.
Se invece vuoi usare il WEb devi stravolgere tutto ma in rete ci sono parecchi esempi su come presentare i dati raccolti dal tuo affare che dai sensori sembra un robot a 4 ruote con sensore anteriore ad ultrasuoni.
Sempre in rete ci sono esempi sul controllo di piccole macchine via Web.
Ti anticipo che, a seconda del controllo che stai implementando, avrai dei ritardi. Se per esempio lo guidi in remoto è possibile che il robot risponda in ritardo. Se succede dovresti passare ad una gestione differente usando pacchetti UDP invece che TCP/IP.
Scusami pero' non ho capito una cosa... . Lasciare a 9600 tutti gli altri cosa vuol dire?
Perche' io ho l'ESP che lavora a 115200 e di conseguenza anche l'arduino mega lavora a 115200 perche' se no non mi funziona. Gli altri componenti li collego semplicemente cosi oppure devo specificargli un
Serial2.begin(9600);
??
Comunque ci hai preso, e' un rover a 4 ruote automatizzato e non che mi era stato chiesto di fare 2 anni fa con comunicazione bluetooth e poi adesso di cambiarla in wifi. Gia' all'inizio avevo avuto qualche difficolta' a far lavorare tutti i componenti fra loro utilizzando la funzione
millis();
poi, fortunatamente, ero riuscito a risolvere anche abbastanza infretta. Adesso invece sto cavolo di moduletto rompe abbastanza.
Il sensore EMF e' quello per la misurazione della pressione.
Lollo9906:
Come faccio pero' a dire al mega di fare lavorare tutti gli altri componenti con la seriale
Ecco, non ho capito. Gli altri componenti non vanno sulla seriale.
-Modulo tenperatura ed umidità "dht11" ha una sua interfaccia che non è la seriale.
-Sensore ultrasuoni "HC-SR04" Questo lavora ancora in modo diverso ma non usa la seriale.
-Schermo LCD Non usa la seriale, usa una parallela a 8 o 4 bit oppure I2C con apposito integrato o anche 74HC95
-2 led Non usano la seriale
-1 led RGB Non usa la seriale
-Fotoresistenza Non usa la seriale
-4 motori DC Non usano la seriale
-1 servomotore da 180° Non usa la seriale
-1 sensore EMF forse usa la seriale?
Se per WiFi intendi interfaccia web, cioè usi un browser, devi rifare quasi tutto. Se invece via web c'è il solo collegamento allora la via di usare un ESP8266 come convertitore WiFi-seriale è la via più veloce, sebbene il WiFi mi sa che è meno efficiente.
Aah ok ora ho capito scusami e grazie
Comunque ho gia fatto l'interfaccia web, ti faccio vedere la parte di codice
WiFiEspClient client = server.available();
if (client) {
Serial.println("New client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
ascoltatore.concat(c); //concatena i caratteri del client
if (c == '\n' && currentLineIsBlank) { //se arrivo a fine riga
if (ascoltatore.indexOf("GIGIO=0") > 0) { //controllo che nell'url ci sia GIGIO=0
Serial.println("AVANTI");
avanti();
}
else if (ascoltatore.indexOf("GIGIO=1") > 0) { //controllo che nell'url ci sia GIGIO=1
Serial.println("INDIETRO");
indietro();
}
else if (ascoltatore.indexOf("GIGIO=2") > 0) { //controllo che nell'url ci sia GIGIO=2
Serial.println("STOP");
ferma();
}
else if (ascoltatore.indexOf("GIGIO=3") > 0) { //controllo che nell'url ci sia GIGIO=3
Serial.println("DESTRA");
destra();
}
else if (ascoltatore.indexOf("GIGIO=4") > 0) { //controllo che nell'url ci sia GIGIO=4
Serial.println("SINISTRA");
sinistra();
}
else if (ascoltatore.indexOf("GIGIO=5") > 0) { //controllo che nell'url ci sia GIGIO=5
Serial.println("AUTOMATICA");
ostacoli(); //inizio void per la modalità automatica
}
else {
Serial.println("STOP");
ferma();
}
Serial.println("Sending response");
// send a standard http response header
// use \r\n instead of many println statements to speedup data send
client.print(
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html\r\n"
"Connection: close\r\n" // the connection will be closed after completion of the response
"Refresh: 20\r\n" // refresh the page automatically every 20 sec
"\r\n");
client.print("<!DOCTYPE HTML>\r\n");
client.println(); //necessario per non buggare
client.print("<html>\r\n");
client.println("<head>\r\n");
client.println("<title>\r\n");
client.println("GIGIO2.0");
client.println("</title>\r\n");
client.println("<link rel='shortcut icon' type='image/x-icon' href='http://i44.servimg.com/u/f44/16/84/89/65/23570310.png' />");
client.println("</head>\r\n");
client.println("<body>\r\n");
client.println("<center>\r\n");
client.println("<h1>\r\n");
client.println("GIGIO 2.0 ");
client.println("</h1>\r\n");
client.println("<a href='/?GIGIO=0'>\r\n<img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/avanti.gif\" width='200' height='150' ></a>\r\n");
client.println("<a href='/?GIGIO=1'>\r\n<img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/indietro.gif\" width='200' height='150' ></a>\r\n");
client.println("<a href='/?GIGIO=2'>\r\n<img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/ferma.jpg\" width='200' height='150' ></a>\r\n");
client.println("<a href='/?GIGIO=3'>\r\n<img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/destra.gif\" width='200' height='150' ></a>\r\n");
client.println("<a href='/?GIGIO=4'>\r\n<img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/sinistra.gif\" width='200' height='150' ></a>\r\n");
client.println("<a href='/?GIGIO=5'>\r\n<img src = \"http://gigiowifi.altervista.org/wp-content/uploads/2017/10/automatica.gif\" width='200' height='150' ></a>\r\n");
client.println("<table border='1' align='center'>\r\n");
client.println("<tr>\r\n");
client.println("<td>\r\n");
client.println("Temperatura");
client.println("</td>\r\n");
client.println("<td>\r\n");
client.println("Umidita'");
client.println("</td>\r\n");
client.println("<td>\r\n");
client.println("Intensia' luminosa");
client.println("</td>\r\n");
client.println("<td>\r\n");
client.println("Pressione ATM");
client.println("</td>\r\n");
client.println("</tr>\r\n");
client.println("<tr>\r\n");
client.println("<td>\r\n");
client.println(t);
client.println("</td>\r\n");
client.println("<td>");
client.println(h);
client.println("</td>\r\n");
client.println("<td>");
client.println(IntLux);
client.println("</td>\r\n");
client.println("<td>\r\n");
client.println(emf);
client.println("</td>\r\n");
client.println("</tr>\r\n");
client.println("</table>\r\n");
client.println("</body>\r\n");
client.println("</html>\r\n");
//fine codice html
break;
ascoltatore = "";
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(10);
// close the connection:
client.stop();
Serial.println("Client disconnected");
}
Dove ci sono gli if per i movimenti ho messo dei serial.print per simulare le manovre, mentre "ascoltatore" e' una variabile.
Ciao, ho una nuova domanda. Con cosa posso alimentare il modulo ESP? Per fare le prove ho utilizzato una power bank da 16000mAh con output di 5V e 3.4A. Per evitare di usare quella, dato che è enorme ne ho trovata un altra da 3000mAh con output da 5V. Usando questa piu piccola il programma non riesce a vedermi il modulo, mentre con quella grande lo trova al primo colpo. Per quale motivo fa cosi?
Il sospetto è che quella più piccola, pur essendo da 3000mAh, abbia una presa USB che eroga pochino, però se c'è solo il modulo ESP8266 almeno 500mAh li dovrebbe dare e ci bastano. A meno che sia difettosa.
Ho appena fatto tutte le piu' possibili misure di tensione e corrente tra la batteria e modulo e tra modulo e arduino. Con la batteria quella da 16000mAh, ai capi dell'ESp-01 arrivano i 3.3V con un assorbimento di circa 145 ma. Sempre con la stessa i pin TX ed RX comunicano con arduino a 5V. Qui tutto ok (questa e' la batteria con cui funziona). Con la batteria da 3000mAh (questa e' la batteria con cui non funziona), ai capi dell'ESP-01 arrivano 3.3V con un asorbimento di circa 140mA. Sempre con la stessa i pin TX ed RX comunicano con arduino a 5V.
L'unica differenza che c'e' tra le due batterie e' che la piu' grande possedendo la tecnologia iSmart, quella che riconosce i dispositivi collegati, non vede il modulo wifi a causa del troppo basso assorbimento. Per ovviare a questo problema, mentre la batteria sta alimentando il circuito dell'ESP io la collego in carica al pc in modo che l'alimentazione rimanga attiva. Come ulteriore prova (che mi e' venuta in mente all'ultimo) per far rimanere la batteria accesa, e' stata quella di collegare all'altro OUTPUT della stessa PowerBank (da 16000mAh) il mio cellulare in carica.
In questo modo la batteria rimane accesa e alimenta il circuito. Anche qui ho fatto tutte le prove di tensione e corrente e sono OK. La mia ipotesi e' che il collegamento della batteria al pc influisca sul funzionamento di tutto il complesso.
Vero? no?
Che sta succedendo?
Non saprei. I miei powerbank sono stupidi e alimentano comunque di tutto, lampade LED, ventilatorini, arduini.....
Alcuni sono addirittura realizzati riciclando vecchie batterie di portatili, quelli spessi che oggi non ci sono più, dentro avevano le 18650.
I tuoi power bank sono artigianali
Pure io ho un power bank semplice semplice che alimenta tutto però non sta volta
Ho risolto, era un problema di masse. ora funziona. Adesso mi dedico a finire il programma sperando non fuoriesca qualche altro problema
Lollo9906:
I tuoi power bank sono artigianali
Pure io ho un power bank semplice semplice che alimenta tutto però non sta volta
Sono dei powerbank che vengono venduti senza la batteria che poi aggiungi tu, le 18650 sono abbastanza diffuse nei prodotti cinesi e non solo. Le batteria delle auto Tesla sono fatte con batterie di quel formato.
Più che come powerbank le ho prese per alimentare circuiti anche se fino ad ora non in maniera continuativa. Fanno il loro lavoro e mi permettono di riciclare batterie che altrimenti andrebbero buttate.
Buono a sapersi, mi hai dato un informazione molto ultile grazie
Ciao, ho dei nuovi problemi con l'ESP.
Con un programma semplice semplice che crea dei pulsanti e una tabella funziona tutto correttamente.
Non appena ci implemento qualche altra funzione (esempio collegare il sensore temperatura ed umidità o lo schermo LCD) sulla seriale dopo essersi collegato al modem mi da dei TIMEOUT 371 se non sbaglio. Cosa puo voler dire?
Stava funzionando tutto bene...
Quanta RAM libera hai?
Se intendi di arduino quando carica mi dice questo
"Lo sketch usa 29128 byte (11%) dello spazio disponibile per i programmi. Il massimo è 253952 byte.
Le variabili globali usano 3150 byte (38%) di memoria dinamica, lasciando altri 5042 byte liberi per le variabili locali. Il massimo è 8192 byte."
Oppure invece del timeout quando provo a collegarmi alla pagina attraverso l'ip il browser comincia a caricare all'infinito senza mai connettersi e sul monitor seriale non appare scritto nulla. Rimane cosi
[WiFiEsp] Initializing ESP module
[WiFiEsp] Initilization successful - 2.1.0
Attempting to connect to WPA SSID: Telecom
[WiFiEsp] Connected to Telecom
You're connected to the network
SSID: Telecom
IP Address: 192.168.1.4
To see this page in action, open a browser to http://192.168.1.4
[WiFiEsp] Server started on port 80