Jumping Jack Flash weblog

Nuovi appunti su ESP8266

Posted in esp8266, hardware by jumpjack on 24 novembre 2017

E’ uscito il successore, ESP8285:

  • 1 Mbyte di memoria flash incorporata nel chip stesso
  • velocità di upload di 4 Mbps invece dei soliti 115200
  • Processore Tensilica L106 32-bit  (100% compatibile con SW di ESP8266, quindi probabilmente con Arduino IDE, previa reflash)
  • 80MHz (160 MHz)
  • RTC (Real Time Clock) incorporato
  • Predisposto per supporto per SD-Card
  • Predisposto per ricevitore IR (infrarossi)
  • 17 GPIO
    • Assegnazioni riservate:
    • Pin Name Pin Num IO Function Name
      MTCK 12 IO13 Button (Reset)
      GPIO0 15 IO0 Wi-Fi Light
      MTDI 10 IO12 Link Light
  • Assorbimento massimo: 160 mA in trasmissione, ma la documentazione parla di un piccco di 500 mA all’avvio del predecessore ESP8266. Per questo motivo è sconsigliato alimentare l’ESP dalla porta USB di un PC, che sopporta AL MASSIMO 500 mA, quindi è troppo al limite; il costruttore consiglia inoltre di alimentare l’ESP tramite un DC/DC converter (che trasforma tensioni sotto- o sopra-soglia nei 3.3V richiesti) o un Low DropOut regulator (che può gestire solo tensioni sopra-soglia, quindi per esempio passare da 5V a 3.3V), mentre sconsiglia di usare direttamente una batteria al litio (LiPo o NCM)perchè ha un range di tensione troppo ampio durante la scarica: 3.0-4.2V contro i 3.0-3.6 accettati dall’ESP. Andrevve invece bene una LiFePO4, che ha una tensione massima di 3.3, però scende fino a 2.8, che non è abbastanza, quindi non si sfrutterebbe appieno la carica.
    Esempio di LDO:AMS1117,

 

Board di programmazione (con USB e pulsanti):

https://wiki.wemos.cc/products:d1:d1_mini_lite 3.00 dollari su Aliexpress

 

Modulo da solo:

2.79 euro su Electrodragon, 8 dollari su Amazon.com .

 

Datasheet:

https://dziadalnfpolx.cloudfront.net/blog/wp-content/uploads/2016/06/ESP8285-datasheet-EN_V1.0_20160302.pdf

 

Rivenditore di “follie” Espressif/AiTinker (tra cui un modulo GSM+GPRS+GPS + SDCard a 6 euro tutto incluso!!):

https://anxinke.world.taobao.com/

 


Documentazione tecnica ufficiale su motivi di reset dell’ESP8266:

http://wiki.ai-thinker.com/_media/esp8266/faq/esp8266_reset_causes_and_common_fatal_exception_causes_cn.pdf

FAQ espressif (in cinese…): http://wiki.ai-thinker.com/_media/esp8266/faq/espressif_faq_cn.pdf

Stesse FAQ ma in inglese: http://espressif.com/sites/default/files/documentation/espressif_faq_en.pdf


Note tecniche:

L’ESP8266 incorpora due Watchdog Timer (WDT o WT), uno HW e uno SW, per default entrambi abilitati.

Il WT HW ha un timeout di 1.6 secondi, seguito  da un “interrupt handling interval” di 6.6 secondi (“tempo di riserva” disponibile per azzerare il WT prima che si resetti l’ESP), per un totale di 8.2 secondi: se il programma non resetta il  timer entro 1.6 secondi, l’ESP POTREBBE resettaresi; se non lo resetta entra 8.2 secondi, l’ESP si resetta di sicuro.

Per resettare il WT in uno sketch IDE si può usare un’istruzione delay() “a vanvera”, oppure l’apposita funzione ESP.wdtFeed(); in realtà è già “segretamente” implementata in modo trasparente in varie librerie, ma se non dovesse bastare (cioè se lo sketch si dovesse riavviare senza motivo) si può provare a resettare il  WT a mano.

Per esempio se nella routine loop() non c’è nemmeno un delay(), l’ESP si potrebbe resettare per timeout del WT.

 

il WT SW ha un timeout di 1.6 secondi e un “interrupt handling interval” uguale, di 1.6 secondi,  per un totale di 3.2 secondi.

 

il WT HW non può essere spento, il WT SW sì, ma solo tramite programmi scritti con l’SDK.

 

Per creare ritardi che non resettino l’ESp il costruttore raccomanda di non usare loop, ma callback o timer.


All’accensione l’ESP invia sulla seriale a 74880 bps questo messaggio standard di avvio:

ets Jan 8 2013,rst cause:X, boot mode:(Y,Z)

il valore di X può essere:

  1. .
  2. .
  3. .
  4. .

Quello di Y è dato dalla combinazione dei 3 “GPIO di avvio” (“strapping pin”, pin di bootstrap), 15, 0 e 2, che essendo 3 bit possono comporre numeri da 0 a 7:

0:Remapping

  1. UART Boot
  2. Jump Boot
  3. Flash Boot
  4. SDIO LowSpeed V2 IO
  5. SDIO HighSpeed V1 IO
  6. SDIO HighSpeed V2 IO
  7. SDIO HighSpeed V2 IO

Si tratta quindi di pin riservati al sistema e non possono essere usati nei propri progetti.

Questi 3 pin vengono letti 60 ms dopo che il pin CHIP_EN (Chip enable) è stato portato a 3.3V, che a sua volta deve avvenire dopo l’accensione; la sequenza di boot quindi è:

  • Azione esterna: alimentazione a 3.3V
  • Il pin di reset, inizialmente a 0V, passa automaticamente a 3.3V
  • Azione esterna: CH_EN alto
  • Azione interna: lettura strap-pin
  • Azione interna: attivazione porta seriale

Il pin CH_EN non ha un pull-up interno.

Il pin di reset ha un pull-up interno, cioè normalmente è a 3.3V se è scollegato; se viene posto a zero tramite azione esterna, il chip si resetta.


L’ADC interno è cablato con gli stessi circuiti del wifi, quindi ha frequenza di campionamento diversa a seconda se il WiFi è attivo(1000 campioni/sec) o no (100.000 campioni/s), ed ha una risoluzione interna di 12bit ma disponibile di 10 bit. Il costruttore sconsiglia di effettuare contemporaneamente letture ADC e uso del WiFi.


L’ESP8266 non supporta nativamente le SD-Card sui pin SDIO perchè questi sono configurati come slave, quindi l’ESP può fungere solo da dispositivo.


Tutti i pin tranne GPIO4, GPIO5 (collegati al flashing) e GPIO16  hanno un pullup integrato, cioè se scollegati sono a 3.3V.

Per GPIO4 e GPIO5 non si può usare una resistenza di pullup da 1 Mohm, ma al massimo da 100k.


Le board bianche predisposte per saldarci un ESP8266 in modo che abbia piedinatura standard, sono predisposte per un regolatore di tensione che PERO’ non può essere un classico 1117 perchè la piedinatura non corrisponde: serve un XC6206P332A o 6206A in package SOT89, perchè i piedini sono Vss, Vin e Vout; se si monta questo regolatore, bisogna eliminare la “finta resistenza” centrale da 0 ohm.

Un HT7333 è anche meglio perchè a riposo dissipa solo 0.004 mA invece che 5 mA (fonte)

 

 

 

Tagged with: , ,