Ciao a tutti!
oggi vi parlerò del modulo wifi ESP8266.
Questo modulo è davvero fantastico infatti ci permette di dotare i nostri progetti di una connessione wifi con un costo ridicolo!
Grazie a questo oggettino possiamo catapultarci nell' Internet of Things,
infatti con un prezzo che va dai 2 ai 5 euro potremo finalmente far twittare la nostra pianta quando ha sete (sto scherzando, ci sono applicazioni molto più utili ma adesso non mi vengono in mente ;) )
Il modulo in questione è questo:
Come vedete è anche molto piccolo, quindi è facilmente collocabile all'interno dei nostri progetti
Quello che faremo adesso è un semplice esempio per fare i primi passi con questo modulo,
in pratica sfrutteremo il modulo ESP8266 per creare una rete wifi e, dopo esserci connessi con un pc alla rete del modulo e aprendo la pagina html che creeremo, potremo inviare comandi all'Arduino premendo i pulsanti direttamente da un browser sul nostro pc.
Ecco il pinout del modulo:
Ecco lo schema di collegamento, il secondo Arduino è opzionale, serve solo per leggere le informazioni provenienti dal modulo ESP8266:
Questo schema presenta 2 criticità:
- la prima il collegamento dell'alimentazione 3.3v per il modulo ESP avviene in parallelo tra i 2 Arduino, in quanto uno solo non sarebbe sufficiente ad alimentare il modulo (il regolatore presente su Arduino eroga tipicamente 150 mA mentre il modulo ne richiede più di 200)
- il secondo problema è che anche la seriale del ESP8266 funziona a 3.3v quindi l'ideale sarebbe l'utilizzo di un level converter anzichè mettere semplicemente una resistenza.
Ecco un articolo dove ne parlo.
Se volete esistono dei moduli adattatori per l'ESP8266 che risolvono entrambi questi problemi:
questo è il link Ebay dove potete trovarli.
In quest'altro link eBay potete trovare i moduli ESP8266, noterete che il prezzo è veramente basso rispetto agli shield o alle schede ufficiali Arduino wifi.
Ed ecco lo sketch da caricare,
è un ottimo esempio che ho trovato su internet,
l'ho tradotto, testato ed ho fatto delle piccole modifiche per adattarlo al mio modulo in quanto alcuni ESP8266 (come il mio) hanno velocità di comunicazione (baud rate) diverse.
Sketch da caricare nel secondo Arduino (opzionale, serve solo per il leggere le informazioni provenienti dal modulo per vedere che non ci siano errori)
Questo invece è il codice Html per creare la pagina da dove controllare l'Arduino,
quello che dovete fare è:
- creare una nuova cartella
- creare all'interno della cartella un nuovo documento di testo
- copiare le righe di codice che vedete qui sotto nel documento e salvarlo
- rinominare il file e modificarne l'estensione in ".html" (ad esempio "myesp8266control.html")
- andare in questa pagina e cliccare col tasto destro, poi "salva con nome" e salvate il file nella cartella creata prima
Adesso dovrete cercare il modulo tra le connessioni wifi disponibili, connettervi, e aprire la pagina html che avete creato, premendo il pulsante relativo al pin 13 il led presente sul vostro Arduino dovrà cambiare di stato, quindi si accenderà o spegnerà.
Questo articolo è solo una bozza, comunque l'ho testato personalmente e funziona, se avete dubbi o curiosità vi rimando all'articolo originale in inglese,
al cui creatore faccio nuovamente i miei complimenti!
Se invece cercate un modulo più semplice per fare cose simili a queste vi consiglio di leggere questo articolo!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!
oggi vi parlerò del modulo wifi ESP8266.
Questo modulo è davvero fantastico infatti ci permette di dotare i nostri progetti di una connessione wifi con un costo ridicolo!
Grazie a questo oggettino possiamo catapultarci nell' Internet of Things,
infatti con un prezzo che va dai 2 ai 5 euro potremo finalmente far twittare la nostra pianta quando ha sete (sto scherzando, ci sono applicazioni molto più utili ma adesso non mi vengono in mente ;) )
Il modulo in questione è questo:
Come vedete è anche molto piccolo, quindi è facilmente collocabile all'interno dei nostri progetti
Quello che faremo adesso è un semplice esempio per fare i primi passi con questo modulo,
in pratica sfrutteremo il modulo ESP8266 per creare una rete wifi e, dopo esserci connessi con un pc alla rete del modulo e aprendo la pagina html che creeremo, potremo inviare comandi all'Arduino premendo i pulsanti direttamente da un browser sul nostro pc.
Ecco il pinout del modulo:
Ecco lo schema di collegamento, il secondo Arduino è opzionale, serve solo per leggere le informazioni provenienti dal modulo ESP8266:
Questo schema presenta 2 criticità:
- la prima il collegamento dell'alimentazione 3.3v per il modulo ESP avviene in parallelo tra i 2 Arduino, in quanto uno solo non sarebbe sufficiente ad alimentare il modulo (il regolatore presente su Arduino eroga tipicamente 150 mA mentre il modulo ne richiede più di 200)
- il secondo problema è che anche la seriale del ESP8266 funziona a 3.3v quindi l'ideale sarebbe l'utilizzo di un level converter anzichè mettere semplicemente una resistenza.
Ecco un articolo dove ne parlo.
Se volete esistono dei moduli adattatori per l'ESP8266 che risolvono entrambi questi problemi:
questo è il link Ebay dove potete trovarli.
In quest'altro link eBay potete trovare i moduli ESP8266, noterete che il prezzo è veramente basso rispetto agli shield o alle schede ufficiali Arduino wifi.
Ed ecco lo sketch da caricare,
è un ottimo esempio che ho trovato su internet,
l'ho tradotto, testato ed ho fatto delle piccole modifiche per adattarlo al mio modulo in quanto alcuni ESP8266 (come il mio) hanno velocità di comunicazione (baud rate) diverse.
- #include <SoftwareSerial.h>
- #define DEBUG true
- SoftwareSerial mySerial(9,10); //creazione di una porta seriale software per il collegamento con l'atra Arduino (facoltativa, serve solo per il debugging)
- void setup()
- {
- Serial.begin(115200); // inizializza la comunicazione con il modulo ESP8266 (cambiare la velocità se quella del tuo modulo è differente, di solito è 115200 o 57600 o 9600.
- mySerial.begin(9600); // inizializza la comunicazione con l'atra Arduino (facoltativa, serve solo per il debugging)
- pinMode(11,OUTPUT);
- digitalWrite(11,LOW);
- pinMode(12,OUTPUT);
- digitalWrite(12,LOW);
- pinMode(13,OUTPUT);
- digitalWrite(13,LOW);
- sendData("AT+RST\r\n",2000,DEBUG); // resetta modulo
- sendData("AT+CWMODE=2\r\n",1000,DEBUG); // configura come access point
- sendData("AT+CIFSR\r\n",1000,DEBUG); // ottieni un indirizzo ip
- sendData("AT+CIPMUX=1\r\n",1000,DEBUG); // configura per connessioni multiple
- sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); // avvia server sulla porta 80
- }
- void loop()
- {
- if(Serial.available()) // controlla se il modulo sta comunicando
- {
- if(Serial.find("+IPD,")) //Cerca nella comunicazione seriale la stringa di testo "+IPD," questa è una stringa che viene inviata quando premi il bottone nella pagina html
- {
- delay(1000);
- int connectionId = Serial.read()-48; //Ottieni il connection id, sottrai 48 perchè nella tabella ASCII lo zero è il 48.
- Serial.find("pin="); // adesso cerca "pin="
- int pinNumber = (Serial.read()-48)*10; //leggi il primo numero e moltiplicalo per 10, es per il pin 13 leggi 1 e moltiplicalo per 10
- pinNumber += (Serial.read()-48); //leggi il secondo numero e sommalo al primo, es per il pin 13 leggi 3 e sommalo a quello che avevamo prima (10)
- digitalWrite(pinNumber, !digitalRead(pinNumber)); //cambia di stato il pin 13 (impostando l'opposto di quello che c'è sul pin 13 stesso)
- // componi il comando di chiusura da inviare al modulo
- String closeCommand = "AT+CIPCLOSE=";
- closeCommand+=connectionId; // attacca il connection id
- closeCommand+="\r\n";
- sendData(closeCommand,1000,DEBUG); // invia il comando di chiusura
- }
- }
- }
- /*
- Funzione usata per inviare i dati al modulo ESP8266
- Parametri: command - il dato/comando da inviare
- timeout - il tempo massimo di attesa per una risposta
- debug - attiva o disattiva l'invio di dati per il serial monitor (true = si, false = no)
- Returns: la risposta dell' esp8266 (se c'è una risposta)
- */
- String sendData(String command, const int timeout, boolean debug)
- {
- String response = "";
- Serial.print(command); // invia il comando all' esp8266
- long int time = millis();
- while((time+timeout) > millis())
- {
- while(Serial.available())
- {
- char c = Serial.read(); // componi la risposta coi caratteri ricevuti dal modulo
- response+=c;
- }
- }
- if(debug)
- {
- mySerial.print(response);
- }
- return response;
- }
Sketch da caricare nel secondo Arduino (opzionale, serve solo per il leggere le informazioni provenienti dal modulo per vedere che non ci siano errori)
- void setup ()
- {
- Serial.begin(9600);
- }
- void loop ()
- {
- if (Serial.available())
- Serial.write(Serial.read());
- }
quello che dovete fare è:
- creare una nuova cartella
- creare all'interno della cartella un nuovo documento di testo
- copiare le righe di codice che vedete qui sotto nel documento e salvarlo
- rinominare il file e modificarne l'estensione in ".html" (ad esempio "myesp8266control.html")
- andare in questa pagina e cliccare col tasto destro, poi "salva con nome" e salvate il file nella cartella creata prima
- <html>
- <head>
- <title>ESP8266 LED Control</title>
- </head>
- <body>
- <!-- in the <button> tags below the ID attribute is the value sent to the arduino -->
- <button id="11" class="led">Toggle Pin 11</button> <!-- button for pin 11 -->
- <button id="12" class="led">Toggle Pin 12</button> <!-- button for pin 12 -->
- <button id="13" class="led">Toggle Pin 13</button> <!-- button for pin 13 -->
- <script src="jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- $(".led").click(function(){
- var p = $(this).attr('id'); // get id value (i.e. pin13, pin12, or pin11)
- // send HTTP GET request to the IP address with the parameter "pin" and value "p", then execute the function
- $.get("http://192.168.4.1:80/", {pin:p}); // execute get request
- });
- });
- </script>
- </body>
- </html>
Adesso dovrete cercare il modulo tra le connessioni wifi disponibili, connettervi, e aprire la pagina html che avete creato, premendo il pulsante relativo al pin 13 il led presente sul vostro Arduino dovrà cambiare di stato, quindi si accenderà o spegnerà.
Questo articolo è solo una bozza, comunque l'ho testato personalmente e funziona, se avete dubbi o curiosità vi rimando all'articolo originale in inglese,
al cui creatore faccio nuovamente i miei complimenti!
Se invece cercate un modulo più semplice per fare cose simili a queste vi consiglio di leggere questo articolo!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!
Grazie mille per questi tutorial, sono veramente molto utili.
RispondiEliminaUna domanda da neofita: non avrei potuto usare una SoftwareSerial per comunicare con l'ESP8266, lasciando così libera Serial per il log da USB?
Salve complimenti per la guida. una volta inviato il comando di avvio del server su arduino-esp8266 si legge tutto quello che viene trasmesso sulla porta 80 semplicemente tramite il comando Serial.read()?. il Codice Js sembra riferirsi al framework Jquery ma non vedo la libreria caricata nell'header della pagina html.
RispondiEliminaSi, direi che c'e' anche se, in effetti, e' in un posto non proprio bellissimo :)
Elimina(tolgo il minore iniziale e il maggiore finale perche' non me li fa postare)
script src="jquery.min.js"></script
Ciao come faccio per fare una richiesta http con questo modulo tramite arduino ???7
RispondiEliminagrazie
Ciao,
Eliminase può interesarti c'è una shield su Ebay basata con questo hardware ed un firmware che ti permette di pilotare il tuo progetto arduino tramite smarphone Ios e Android è semplice da usare con le librerie a corredo
Se ti può interessare basta che scrivi su Ebay:
arduino 5 minuti
e la trovi
Se non ho il secondo arduino, e collego il modulo direttamente ai 3.3V che succede? Non arriva la corrente sufficiente anche se il voltaggio lo è, e crea problemi oppure può funzionare?
RispondiEliminaQuesto commento è stato eliminato dall'autore.
RispondiEliminaBuongiorno complimenti per la guida. Ho seguito passo passo le sue istruzioni in merito a come collegare esp8266, però in fase di caricamento del modulo. Mi da il seguente errore:
RispondiEliminawarning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
Saprebbe indicarmi dove sbaglio?
Gazie mille
Allora ho configurato le due schede ESP8266 e connesse alla wifi adesso devo far in modo di inviare i dati dal arduino trasmettitore nel locale caldaia e farli ricevere dall'arduino ricevitore al piano di sopra. Consigli su come fare?
RispondiElimina