ESP8266

Da wiki.piffa.net.
WiFi Serial Transceiver Module.jpg


ESP8266 E' un SoC WiFi integrato con un MCU a 32bit LX106, e' un sistema adatto a fornire connettivita' WiFi a schede come Arduino e simili ma e' possibile utilizzarlo direttamente per creare progetti IoT (Internet of Things) connessi alla rete. Come semplice modulo WiFi e' possibile gestirlo tramite comandi AT, in modo autonomo e' programmabile con l'IDE arduino in modo simile ad Arduino, in LUA, in Python e in C/C++. Il chip ESP8266 e' disponibile su varie schede, dal piu' semplice ESP-01 con 8 pin, le schede 07 e quelle *NodeMcu* a 30 pin. Per un uso autonomo si consiglia una scheda con un numero abbondante di pin per GPIO. Anche le piu' piccole essendo abilitate a I2C possono essere comunque utilizzate con un port Expander come il MCP23017 .


Informazioni generali[modifica]

Primo test[modifica]

La scheda funziona a 3.3v non a 5v.

Per testare il corretto funzionamento basta collegare i pin + e - e dovrebbe accendersi il LED rosso sulla scheda, il LED blu dovrebbe brilla re un paio di volte durante l'avvio. Se il led Blu non lampeggia collegare a +3 anche il pin CH_PD : questo indica che avete la versione 2 della mini scheda. A questo punto facendo una scansione delle reti WiFi tramite un cellulare / tablet dovreste poter vedere un nuovo Access Point, il mio da nuovo aveva un ID AI-THINKER_###### .

Utilizzo[modifica]

Per utilizzare direttamente le schede piu' piccole senza connettore USB (seriale) come la ESP-01 si dovra' utilizzare un adattatore FTD tipo: http://www.banggood.com/FT232RL-FTDI-USB-To-TTL-Serial-Converter-Adapter-Module-For-Arduino-p-917226.html, per il collegamento si veda: https://importhack.files.wordpress.com/2014/11/esp8266-push-button-web.png?w=590&h=355 , si ricorda di settarlo a 3v!

In oltre la scheda necessita di circa 300mAh su 3.3v: non potete alimentarla con Arduino! Il modo piu semplice probabilmente e' avere un trasformatore da BreadBoard: http://www.banggood.com/it/Wholesale-MB102-Breadboard-Power-Supply-Module-Adapter-Shield-3_3V-or-5V-For-Arduino-Board-p-47473.html .

Seriale[modifica]

Dopo aver collegato la scheda al FTDI e alla alimentazione (usare un ground condiviso con FTDI ma non tenere il Vc del FTDI collegato all'alimentazione esterna) si puo' avviare una connessione seriale:

   screen /dev/ttyUSB0 9600

La scheda potrebbe essere settata a 115200 bound invece che 9600, questo e' problematico per un successivo uso con Arduino che ha problemi a lavorare cosi' veloce. Riavviando la scheda dovrebbe comparire a schermo un po' di spazzatura: e' normale, dovrebbero essere i messaggi di boot che girano a un boundrate diverso, possono essere soppressi cambiando (U0TXD,U0RXD) to (MTDO,MTCK).


Per i primi comandi AT potete provare:


Usare Ctrl + A + k per terminare la sessione di screen, Ctrl + A + i per vedere l'attuale stato e configurazione del terminale. Per provare qualche comando seguire: http://www.madebymarket.com/blog/dev/getting-started-with-esp8266.html

<Y������������xT��8���>���HHWV,V�H�AT  // E stato dato il comando AT

OK
AT+GMR    // Visualizza la versione del firmware
0020000903
compiled @ Dec 15 2014 19:43:31
AITHINKER-20141206

OK  // Abilita' la modalita' Access Point e Station
AT+CWMODE=3

OK
AT+CWLAP  // Visualizza gli AP disponibili nelle vicinanze
+CWLAP:(3,"myAP",-44,"74:ea:3a:a2:14:a8",4)
+CWLAP:(3,"Vodafone-SCAI COOP SOCIALE ",-93,"90:35:6e:9f:00:d8",11)
+CWLAP:(0,"Vodafone-WiFi",-91,"92:35:6e:9f:00:da",11)

AT+CWJAP="myAP","password"  // Connessione all'AP locale

OK

AT+CIFSR   // Visualizza l'IP assegnato
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"1a:fe:34:9b:c8:5f"
+CIFSR:STAIP,"192.168.0.30"
+CIFSR:STAMAC,"18:fe:34:9b:c8:5f"

OK

AT+CIOADC  // legge il valore di ADC, range 0-1v con 10bit di precisione
230

AT+CIOREAD0 // legge GPIO0 (dovrebbe essere HI se non e' tirato giu'): output digitale
1:HIGH

OK
AT+CIOREAD0 // Legge GP100 (ora e' collegato a ground)
0:LOW

OK

Dovreste poter pingare la scheda, nell'esempio ping 192.168.0.30 . Vedere anche: http://www.electrodragon.com/w/Wi07c#First_time_use_guide

Level Shifter[modifica]

Level-shifter.jpg

Se contate di utilizzarla connessa con Arduino dovrete preoccuparvi di trasformare i segnali 5v di Arduino in 3v (e viceversa nel caso dei PIN GPIO): il componente piu' indicato e' un Logic level converter tipo: http://www.banggood.com/it/Two-Channel-IIC-I2C-Logic-Level-Converter-Bi-Directional-Module-p-970227.html (lavora in entrambe le direzioni) oppure potete usare dei transistor 2N7000 in un Level Shifter o un divisore di voltaggio con delle resistenze (es 1k + 2k ohms, questo potrebbe essere un po' lento per trasmissioni che richiedono velocita'). Per una connessione seriale il divisore di voltaggio dovrebbe essere necessario solo dalla TX di Arduino alla RX della scheda, la RX seriale di Arduino dovrebbe funzionare senza problemi con un l'input a 3.3v della scheda WiFi. Per maggiori info su Level Shifter per I2C: http://cdn.sparkfun.com/tutorialimages/BD-LogicLevelConverter/an97055.pdf

divisore di voltaggio

Dopodiche' e' possibile utilizzare la scheda in vari modi:

Aggiornamento firmware[modifica]

Nodemcu e Lua[modifica]

Si veda la pagina dedicata: NodeMcu

Arduino IDE[modifica]

Dalla versione 1.6.4 dell'IDE e' possibile installare il supporto per diverse piattaforme , tra le quali anche ESP8266, Assicurarsi di avere una versione dell'IDE aggiornata (al momento in Debian non c'e' niente superiore alla 1.5.6 quindi dovrete procurarvi il software manualmente dal sito di Arduino), aprire File->Preference in fondo alla scheda in Additional Board Manager URLs aggiungere http://arduino.esp8266.com/package_esp8266com_index.json .

Ora da Tools->Board->Board-Manager installare il supporto per [ESP8266 https://github.com/esp8266/Arduino]

Risorse[modifica]

ESP-12e Arduino[modifica]

ESP-12E: not breadboard friendly

Per caricare uno sketch di arduino su un modulo ESP-12E seguire il cablaggio da http://www.esp8266.com/wiki/doku.php?id=getting-started-with-the-esp8266 , il PIN GPIO15 deve tirare a LOW per l'upload e HI / libero per esecuzione. Al primo avvio il modulo risulta configurato a 115200bps.


   TXD (goes to the 3.3V RxI of the UART USB adapter to the PC)
   CH_PD (enable/power down, must be pulled to 3.3v directly or via resistor)
   REST (reset, must be pulled to 3.3v)
   VCC (3.3v power supply)

The inner row (top and bottom have square pads)

   GND (connect to power ground)
   GPIO 2
   GPIO 0 (leave open or pull up for normal, pull down to upload new firmware)
   RXD (goes to the 3.3V TxO of the UART USB adapter to the PC)

If GPIO 15 is broken out, then it must be pulled low at power-on or after reset to get out of the boot-loader.

Blink[modifica]

Il tipico esempio Blink:

int led = 2; // Il LED onboard corrisponde al PIN 2 - GPIO02
             // E' invertito (HI-LO) rospetto al led azzurro on board!

void setup() {                
  pinMode(led, OUTPUT); 
}
void loop() {
  digitalWrite(led, HIGH);  // Mette il PIN del LED in stato acceso
  delay(200);              // Aspetta un secondo (mille millisecondi)
  digitalWrite(led, LOW);   // Mette il PIN del LED in stato acceso
  delay(200);               // Aspetta mezzo secondo
}

Il LED ON BOARD corrisponde al PIN 2 -> GPIO02 della scheda. Sull'esemplare testato risulta invertito rispetto al LED BLU onboard: quando il primo brilla il secondo si spegne e viceversa. Gli altri pin con Arduino IDE 1.6.5 sembrano essere mappati correttamente, il numero di PIN nel codice corrisponde al GPIO. La scheda ha richiesto 72mah per l'esecuzione di questo sketch.

UPLOAD[modifica]

GPIO15 -> LO. Esempio di un upload corretto (generic ESP8266 module):

<code>Sketch uses 201,106 bytes (46%) of program storage space. Maximum is 434,160 bytes.
Global variables use 44,608 bytes (54%) of dynamic memory, leaving 37,312 bytes for local variables. Maximum is 81,920 bytes.
/home/eaman/.arduino15/packages/esp8266/tools/esptool/0.4.5/esptool -vv -cd ck -cb 115200 -cp /dev/ttyUSB0 -ca 0x00000 -cf /tmp/build7883660123930716884.tmp/blink_0.cpp.bin 
esptool v0.4.5 - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>
	setting board to ck
	setting baudrate from 115200 to 115200
	setting port from /dev/ttyUSB0 to /dev/ttyUSB0
	setting address from 0x00000000 to 0x00000000
	espcomm_upload_file
	stat /tmp/build7883660123930716884.tmp/blink_0.cpp.bin success
opening port /dev/ttyUSB0 at 115200
	tcgetattr
	tcsetattr
	serial open
opening bootloader
resetting board
trying to connect
	setting character timeout 0
	done
	setting character timeout 1
	done
	espcomm_send_command: sending command header
	espcomm_send_command: sending command payload
trying to connect
	setting character timeout 0
	done
	setting character timeout 1
	done
	espcomm_send_command: sending command header
	espcomm_send_command: sending command payload
	espcomm_send_command: receiving 2 bytes of data
	espcomm_send_command: receiving 2 bytes of data
	espcomm_send_command: receiving 2 bytes of data
	espcomm_send_command: receiving 2 bytes of data
	espcomm_send_command: receiving 2 bytes of data
	espcomm_send_command: receiving 2 bytes of data
	espcomm_send_command: receiving 2 bytes of data
	espcomm_send_command: receiving 2 bytes of data
	espcomm_open
Uploading 205248 bytes from /tmp/build7883660123930716884.tmp/blink_0.cpp.bin to flash at 0x00000000
	erasing flash
	size: 0321c0 address: 000000
	first_sector_index: 0
	total_sector_count: 51
	head_sector_count: 16
	adjusted_sector_count: 35
	adjusted_size: 023000
	espcomm_send_command: sending command header
	espcomm_send_command: sending command payload
	setting timeout 10000
	setting character timeout 100
	done
	setting timeout 1
	setting character timeout 1
	done
	espcomm_send_command: receiving 2 bytes of data
	writing flash
.........................................................................................................................................................................................................
starting app without reboot
	espcomm_send_command: sending command header
	espcomm_send_command: sending command payload
	espcomm_send_command: receiving 2 bytes of data
closing bootloader

Nota: per caricare un nuovo sketch bisogna comunque resettare la scheda (togliere alimentazione funziona). Al termine dell'UPLOAD lo script entra immediatamente in esecuzione anche se il PIN GPIO15 e' ancora su LO, in caso di RESET si dovra' staccare GPIO15 e lasciarlo libero o HI per eseguire lo sketch.

Link Utili[modifica]