Jumping Jack Flash weblog

Ancora sull’hacking della centralina GSM/GPS/GPRS Greengo Icaro / Zhidou ZD

Posted in hardware by jumpjack on 16 marzo 2019

Puntata precedente: https://jumpjack.wordpress.com/2019/03/10/esame-della-centralina-gsm-gps-greengo-icaro/

Sostituendo la SIM originale della movistar con una generica SIM Wind, sono riuscito ad ottenere l’aggancio alla rete GPRS!

Purtroppo il comando di connessione non è molto chiaro:

AT+CGDCONT=1,”IP”,”%1?….4.?..b#”

Il terzo parametro dovrebbe essere l’indirizzo IP dell’APN dell’operatore…. ma sembra scritto in codice binario invece che come stringa, quindi non si capisce a chi tenti di collegarsi.

In binario: 25 31 3F 10 10 06 04 34 07 3F 01 02 62 23

La buona notizia è che però a questo comando della MCU, e al successivo ATD*99***1# ,  il modulo GSM risponde con CONNECT, quindi l’aggancio avviene di sicuro.

…dopodichè non si capisce più niente: tutta la comunicazione passa da testuale (comandi AT) a binaria!

Leggendo come testo quello che la MCU invia al modem… si vede questo:


~?}#?!

}!}!} }4}"}&} }

 } } }%}&eglj}'}

"}(}"?m~

~?

}#?!}"}!} }2}"}&

} } } } }#}$?#}

'}"}(}"??~

~?#GPRS~?}#?!}!}#

} }.}"}&} } } }

 }'}"}(}"*?~

~?#~

~?!~?!/~

~?!~?!~?!??~

~!E?

_n?-? (?a~

~!E

?

_n?x?ls~

~!E0? ??~

~!E

}]

?

_n?4Vx?Jg~

~!En?p ??~

~!E

{

?

_n?4Vx~!

E_n???~

~!E?4Vx~

!E

_n???~

~!E?q~!E?

_n??I:~

~!E~

~!Et

?

_n?x?o.~

~!E0? ?~

Espresso in esadecimale non è che sia molto più chiaro…:
7E3F7D233F21
7D217D217D207D347D227D267D207D
207D207D207D257D2665676C6A7D277D
227D287D223F6D7E
7E3F
7D233F217D227D217D207D327D227D26
7D207D207D207D207D237D243F237D
277D227D287D223F3F7E
7E3F230102475052537E3F7D233F217D217D23
7D207D2E7D227D267D207D207D207D
207D277D227D287D222A3F7E
7E3F2301047E
7E3F2101057E3F2101062F7E
7E3F21010703067E3F2102017E3F2101083F3F7E
7E21453F04
5F6E3F16042D073F0102080928083F617E
7E2145
3F04
5F6E3F160478053F010104026C737E
7E2145303F160402203F3F7E
7E2145
7D5D
3F04
5F6E3F1604123456780204053F010104024A677E
7E21456E3F16047002203F3F7E
7E214506
7B
3F04
5F6E3F1604123456787E21
455F6E3F160404023F3F7E
7E21450B3F123456787E
214504
5F6E3F16040104023F3F7E
7E21453F717E21453F04
5F6E3F16043F01010402493A7E
7E2145047E
7E214574
3F04
5F6E3F160478053F010104026F2E7E
7E2145303F160402203F7E
Tutta roba incomprensibile, però qui c’è qualche indizio su cui investigare:
https://www.embeddedrelated.com/showthread/comp.arch.embedded/40457-1.php
Potrebbe cioè trattarsi di una comunicazione su protocollo PPP; devo quindi o studiarmi il protocollo a basso livello, o trovare un decodificare automatico.

Questo è invece quello che risponde il modem subito dopo aver risposto CONNECT:
~ÿ}#À!}!}!} }2}"}&} } } } }#}$À#}'}"}(}"Ý”~~ÿ}#À!}$}!} }*}%}&eglj`…~~ÿ}#À!}"}#} }.}"}&} } } } }'}"}(}"}4¼~~À#
In hex:

7EFF7D23C0217D217D217D207D327D227D267D207D207D207D207D237D24C0237D277D227D287D22DD947E7EFF7D23C0217D247D217D207D2A7D257D2665676C6A60857E7EFF7D23C0217D227D237D207D2E7D227D267D207D207D207D207D277D227D287D227D34BC7E7EC0230204000500AA5E7E7E8021030500
030600000000C6A17E7E8021030600
030600000000C1777E7E802101010004BB997E7E8021030700
0306
B506E685837E7E8021020800
0306
B506E68A397E

Tutto questo avviene al banco, con la centralina scollegata dalla icaro.


Alcuni link utili:
Protocollo PPP:
http://www.powerfast.net/maxtnt/~ascend/MaxTNT/admin/ppprime.htm
http://www.netfor2.com/ppp.htm
Decoder:
https://hpd.gasmi.net/  – hex decoder generico – 1
http://packetor.com/ – hex decoder generico – 2

 

Tagged with: , , , ,

Esame della centralina GSM/GPS GreenGo Icaro

Posted in hacking, hardware by jumpjack on 10 marzo 2019

L’anno scorso ho provato a smontare ed esaminare la centralina GPS/GSM che rende(va) la Icaro (o meglio i.car.0) una “interconnected car”, inviando a una centrale di monitoraggio remoto decine e decine di telemetrie, come descritto in questo thread:

https://www.forumelettrico.it/forum/centralina-gsm-gps-t2437.html

Alcune foto della centralina.

Qui si vede il contenitore dell SIM card e un connettore a pettine a 12 pin:

Questo è il modulo GPS, un “GA71 V4.0 SiRF star III” a 20 canali:

 

Alcune marcature utili per l’identificazione:

Visione d’insieme; in alto la batteria-tampone ricaricabile al NiMH da 3.6V:

Questi pin, apparentemente interessanti… si sono rivelati completamente muti e inutili:

 

 

Quelli che invece si sono rivelati molto interessanti sono quelli dello strip maschio a 12 pin: collegandolo a un adattatore TTL/seriale per il PC, sono riuscito a dare una sniffata, scoprendo questo:

Per il momento non sono riuscito ad agganciare la rete, nemmeno togliendo la SIM originale e mettendo la mia, ma farò ovviamente altre prove.

Probabilmente, infatti, solo una volta che la scheda riesce ad agganciare la rete fa un tentativo di agganciarsi ai server remoti che un tempo leggevano queste telemetrie; bisogna vedere poi:

  • se la scheda aspetta una risposta dal server prima di inviare dati, o se li invia “a fondo perduto”
  • se è possibile riprogrammare a mano l’indirizzo a cui la scheda tenta di collegarsi
  • varie ed eventuali

Comandi AT:

Studio di fattibilità – antenna esterna per Sonoff Pow Rev2

Posted in hardware by jumpjack on 4 gennaio 2019

Il Sonoff pow prima versione era predisposto per collegare, al posto dell’antennina interna di 2 cm, un antennone esterno “grosso a piacere”: bastava infatti saldare un connettore UFL sulle piazzole predisposte sul circuito stampato, e spostare un condensatore:

 

 

 

Adesso è uscito il Sonoff Pow “Rev 2” (da non confondere col “Sonoff Pow 2.0”, vedi immagine comparativa più avanti), che ha due brutte novità: non c’è più il fusibile, e soprattutto non c’è più la predisposizione per l’antenna esterna:

 

Da un’analisi del nuovo circuito sembra però che ci si potrebbe comunque arrangiare senza troppe complicazioni: anche se non ci sono le 3 piazzole necessarie per il connettore UFL, in realtà il connettore UFL ha 4 terminali, ma in realtà 3 sono in comune e corrispondono alla massa, e uno corrisponde al segnale:

 

UFL connector dimensions and pinout

Si potrebbe allora forse semplicemente collocare il  connettore UFL in questa posizione, saldando solo il pin di destra con la piazzola di massa soprastante:

Sonoff POW 2 External antenna on UFL connector

Probabilmente bisognerà anche tagliare la traccia che porta all’antenna incorporata, perchè, anche se non può fare contatto col pin centrale di massa del connettore, potrebbe entrare in risonanza con l’antenna esterna e ridurre, invece che aumentare, la portata (ma ci vorrebbe qualcuno che ci capisca un po’ di più di antenne…)

Chi dispone di un saldatore ad aria calda, che permette di saldare i component SMD appoggiandoli direttamente sulle piazzole stagnate, si potrebbe pensare anche a un montaggio più pulito, spostando il connettore di pochi mm più in alto:

 

Ecco infine una comparativa fra le due versioni (e mezzo) di Sonoff POW:

Tagged with: , , ,

Appunti su aria condizionata termoelettrica per veicoli (TE-HVAC o TEAC)

Posted in auto elettriche, hardware by jumpjack on 30 dicembre 2018

Thermo-Electric Heating, Ventilation and Air Conditioning

  1. Experimental validation of the optimum design of automotive air-to-air thermoelectric air conditioner (TEAC) – Alaa Attar, HoSung Lee, Sean Weera
  2. “Vehicular Thermoelectric Applications Session – DEER 2009” – John W Fairbanks – Department of Energy – Vehicle Technologies – Washington, D.C. – August 5, 2009: “total cooling power required to cool the zone of a single occupant is around 630 W while 3.5 to 4.5 kW is needed to cool the entire cabin”
  3. Modeling a Thermoelectric HVAC System for Automobiles,” Journal of Electronic Materials, vol. 38, no. 7, pp. 1093-1097, 2009: “For ambient temperatures of 25°C and 30°C, the conventional auto HVAC system has cooling capacity of five times higher than the thermoelectric HVAC system at the same input power”
  4. Design and Analysis of a Thermoelectric HVAC System for Passenger Vehicles” SAE International, Vols. 2010-01-0807, 2010.”, D. C. D. a. L. J. Wang – Esperimento con 6 celle peltier da 48W l’una (tot 288W): temperatura dell’abitacolo abbassata a 7°C!
  5. Thermoelectric Air Cooling For Cars” – Manoj S. Raut, Dr.P. V. Walke  (grande quantità di dati numerici e formule)

Dalla ricerca 5:

  • Calore specifico aria a 30°C: 1007 J/KgK
  • Densità aria: 1.164 kg/m3
  • Volume abitacolo: 1m3 –> 1.164 kg
  • Temperatura interna: 23°C
  • Temperatura esterna: 30°C
  • Differenza temperatura: 7°C

Per abbassare di 7°C la temperatura dell’aria che esce da un “raffreddatore termoelettrico” di 0.0054128 cm2 di diametro alla velocità di 5 m/s (=0.027064 m3/s = 97 m3/h) servono 222W di “potenza raffreddante” (Qc):

P = m * C * DeltaT

  • m= massa d’aria per secondo = rho * volume/secondo = 1.164 * 0.0270640.031502496 [kg/s]
  • C = calore specifico aria
  • DeltaT = Differenza di temperatura ingresso/uscita

P = 0.031502496 * 1007 * 7 = 222 W

L’autore usa 6 celle di peltier “TEC1-12704” in “disposizione mista serie/parallelo”, ognuna con potenza raffreddante minima di 36W alimentata a  15.4V/4.1A/63.14W (quindi 1:1.75 circa), ma a 12V assorbe invece 3.2A/38.4W

 

Questi i grafici presi da alcune schede tecniche:

Schede tecniche:

 

 

 

 

Diario elettrico Greengo Icaro – 23/12/2018: il blocco di sicurezza per la presa Mennekes

Posted in 3d, Diario elettrico GreenGo Icaro, hardware, minicar elettriche by jumpjack on 23 dicembre 2018

Download file 3d stampabile: https://skfb.ly/6Gtzn

Un post su un forum mi ha fatto tornare in mente un vecchio problema su cui avevo pensato di lavorare, ma che mi era poi passato di mente perchè piuttosto complicato e rimandato a “prima o poi”.

Ok, è arrivato il poi.

La presa mennekes sulla Icaro non prevede il blocco automatico della spina durante la ricarica, cosa che normalmente avviene, sia lato-auto che lato-colonnina, per mezzo di un perno metallico che si introduce in apposito foro nella spina, per evitare che per errore o per vandalismo il cavo venga sconnesso durante la ricarica senza prima aver spento la colonnina; la cosa non dovrebbe danneggiare niente, perchè uno dei 5 pin è stato progettato appositamente più corto degli altri in modo da scollegarsi per primo e comandare lo spegnimento elettronico della colonnina in caso di disconnessione prematura del cavo; però è anche vero che questo blocco torna utile per evitare che qualche “dispettoso” ci sfili il cavo durante la ricarica sperando così che la colonnina lo sblocchi anche sul suo lato, per poter ricaricare la sua macchina o semplicemente per fregarci 200 euro di cavo.

Meglio quindi disporre di questo dispositivo di sicurezza.

Nel catalogo SCAME il meccanismo che attiva il perno metallico (tecnicamente detto “di interblocco”) viene chiamato “BLOCCO SPINA SUPERIORE PRESA T2S-T2C” e ha codice 200.23260BS, per un costo di 65 euro; presso altri fornitori si trova a prezzi più bassi, ma a non meno di 30 euro.

In realtà, però, si tratta di un semplice perno azionato da un relè, quindi, se la propria auto ne è sprovvista, piuttosto che buttare 65 euro se ne possono spendere 10 per comprare online questo pezzo inventato da me (oppure stamparselo da soli al costo di pochi centesimi se si ha una stampante 3d), e altri 5 euro per comprare una qualunque spina industriale, da cui andremo a estrarre uno dei pin piccoli, da 5mm, da usare come “perno manuale”.

Normalmente ecco come si presenta la presa con montato il meccanismo standard di interblocco:

 

Dettaglio del meccanismo di interblocco:

La presa di ricarica della Icaro è protetta dal rivestimento plastico nero dell’interno dell’abitacolo; se non si vuole smontare l’intera parte di rivestimento del bagagliaio, si può ritagliare un foro intorno alla sporgenza in corrispondenza con la presa, in modo da accedere al retro della presa stessa, stando attenti, quando si arriva a tagliare la parte bassa, a non andare troppo a fondo nel taglio per non toccare i cavi.

Io per effettuare il taglio ho usato un dremel, perchè la plastica è spessa e il taglierino è impreciso. L’operazione ha richiesto meno di 10 minuti.

Nel mio caso il buco nel tessuto isolante era un po’ piccolo e rendeva scomodo lavorare, quindi l’ho allargato un po’ con un  taglierino, in modo da accedere comodamente alla presa.

Dopo aver rimosso il rivestimento nero e scoperto il connettore, è necessario rimuovere temporaneamente la fascetta metallica che tiene la guarnizione fissata alla presa, sia per poter estrarre la presa dall’esterno ed esaminarla, sia per poter estrarre la piccola guarnizione rettangolare che nasconde il foro di interlock della presa; nella foto che segue il foro centrale superiore è già stato privato della guarnizione, che è invece ancora in posizione nel foro 1, rendendolo di fatto totalmente invisibile a prima vista:

Qui è possibile vedere le tre guarnizioni, che hanno una sporgenza che si inserisce nel buco di interlock.

La prossima foto mostra il buco centrale superiore con e senza spina inserita:

 

Tornando alla foto iniziale che mostra la presa inserita nella carrozzeria, si può dedurre, ora che è nota la posizione del buco, che esso è in posizione difficilmente accessibile perchè aderente alla carrozzeria e intralciato da tessuto isolante e rivestimento plastica; tuttavia, il perno di blocco funziona anche se inserito diagonalmente, e non deve essere preciso al decimo di mm rispetto al buco.

Ho quindi progettato questo pezzo da stampare in 3d, che realizza un supporto inclinato da inserire al posto della guarnizione, nella sua stessa slitta:

Il forellino laterale serve a far passare un filo da legare al perno, che essendo manuale va sfilato quando non serve; legandolo a questo buco si evita di perderlo in giro per la macchina.

Ecco come appare il perno inserito a mano nel pezzo, accanto alla guarnizione che va a  sostituire:

Anche se il pezzo funziona egregiamente già così, ho deciso di fare qualche miglioramento, in questo secondo progetto:

Le novità sono il foro “di appoggio”, così non si deve lasciare il perno a ciondolare nel bagagliaio quando non è in uso, e il foro passa-filo di forma adesso triangolare, così le stampanti a filo possono stamparlo senza supporto, fastidioso da rimuovere e causa sempre sbavature. C’è inoltre un ispessimento graduale dei lati del pezzo, in modo che, inserito a fondo nella slitta, rimanga incastrato. In ogni caso, però, la grossa guarnizione della presa,  tenuta ferma dalla fascetta, impedisce che il pezzo (così come la guarnizione che c’era prima) si sfili.

Ecco come appare il nuovo pezzo stampato:

Con questa seconda stampa ho avuto modo di verificare se il buco di appoggio è sufficientemente largo: da progetto ha un diametro di 5mm, ma anche se al calibro il perno misura 4.90-4.95, c’entra un po’ a forza; se da una parte non è un problema per il  foro di parcheggio, renderebbe però scomodo l’uso del foro “di lavoro”, perchè non si capirebbe bene quando il perno arriva fino in fondo, motivo per cui ho fatto il foro di lavoro grande quanto il foro della presa e rettangolare, in modo che il perno ci entri con ampio gioco.

Anche se già così funziona bene e il perno blocca perfettamente la spina inserita, probabilmente farò un terzo progetto, con foro di lavoro tondo ma magari largo 5.5 o 6 mm; la seccatura è che per ogni nuovo progetto bisogna aspettare tre quarti d’ora per la stampa…

Per il momento il lavoro completato appare così:

Dovrò comunque allargare un po’ il buco sulla parte superiore, perchè il perno è molto lungo e, nonostante l’inclinazione, risulta comunque un po’ troppo scomodo inserirlo.

 

Ingrandimento:


Aggiornamento:

Ho realizzato un’ultima versione del supporto per il perno, col buco di appoggio 2mm più largo, e quello di lavoro più stretto e inclinato, per facilitare l’inserimento del perno. Qui c’è il file STL stampabile:

Download file 3d stampabile: https://skfb.ly/6Gtzn

Chi non ha una stampante 3d può farselo stampare online e inviare a casa cliccando qui, al costo di 5,00 euro + spedizione.

Nota: E’ comunque necessario anche allargare un po’ il buco nel rivestimento plastico della Icaro, per fare un po’ di spazio sopra al perno, rispetto alla figura sopra.

 

 

 

 

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: , ,

Appunti ESP8266 – Come risolvere problemi di stabilità

Posted in esp8266, hardware by jumpjack on 10 giugno 2017

Sembra che l’ESP8266 sia famoso per la sua instabilità, cioè la facilità con cui perde la connessione WiFi si resetta; queste ottime pagine spiegano come ovviare al problema: link1, link2.

Riassumendo:

  • Il comando “delay()” resetta il WatchDog Timer (WD o WT); si tratta di un contatore che, se raggiunge un valore troppo alto (maggiore di 5 secondi e non modificabile), fa riavviare il dispositivo; è un sistema di sicurezza per evitare che il sistema, se si blocca, resti bloccato indefinitamente: in “sottofondo” è infatti sempre attivo un controllo hardware sul watchdog, anche quando uno sketch si blocca; se rimane bloccato per troppo tempo, il processore va in autoreset e quindi lo sketch si riavvia; quindi lo sketch deve essere predisposto per potersi riavviare da solo senza l’intervento dell’utente.
  • Forse anche il comando wdt_feed()  resetta il watchdog, ma probabilmente è un comando dell’SDK di ESP, quindi per utenti evoluti.
  • Utilizzando l’ESP8266 come access point (ossia come router o come sever), bisogna evitare di gestire l’attesa dei comandi web durante alla funzione standard loop(), perchè sembra che la loop() interferisca con i meccanismi del wifi; bisogna invece implementare una funzione di callback che viene chiamata quando il client connesso all’ESP gli invia un comando (sketch di esempio: link).
  • La connessione WiFi può spesso cadere senza motivo, quindi uno sketch deve sempre prevedere nella funzione loop() un monitoraggio della connessione, per ristabilirla se cade.
    Queste righe servono a verificare se è attiva la connessione tra l’ESP e un router, non tra un dispositivo e l’ESP:
    while (WiFi.status() != WL_CONNECTED) {
      Serial.print(“.”);
      delay(500);
    }
    Quindi vanno dopo la riga:
    WiFi.begin(ssid, password);
    Dove “ssid” è il nome del router.
    Invece, per rilevare la connessione di un dispositivo bisogna usare questo codice:
    #include <ESP8266WiFi.h>
    WiFi.disconnect(true); // Più che disconnettere, cancella dalla PROM i parametri di connessione usati finora;
    WiFi.persistent(false); // Evita che tali parametri vengano poi memorizzati
    WiFi.mode(WIFI_AP); // Imposta la modalità di connessione su Access Point
    WiFi.softAP(ssid); // Imposta il nome della rete e accende l’access point (senza password)
    delay(1000); // Ritardo per azzerare il watchdog
    WiFi.onEvent(WiFiEvent); // Rileva tutti gli eventi WiFi nella funzione “WiFiEvent(WiFiEvent_t event);
  • Quando usa il WiFi, l’ESP8266 ha bisogno di molta più corrente dei 500 mA che può fornire la porta USB di un PC, quindi va alimentato con un trasformatore.
  • Anche utilizzare un adattatore USB/seriale può causare interferenze nel WiFi e perdita di connessione, quindi una volta terminate le prove, usare sempre un alimentatore per alimentare l’ESP.
  • Ad ogni richiesta http GET proveniente da un client, l’ESP “perde un po’ di memoria (heap)”, per liberarla solo “dopo un po’ “, quindi non si può inondare l’ESP di richieste http GET, bisogna aspettare almeno due minuti tra l’una e l’altra (fonte).
  • Un “bug noto” impedisce a SoftAP() di funzionare (cioè di impostare l’ESP come accesspoint)  se l’ESP non è anche connesso a un router.

Esiste anche una libreria WiFi specifica che effettua la riconnessione automatica in caso di disconnessione, ma è per una Arduino collegata a un ESP:

https://github.com/ekstrand/ESP8266wifi

 

Programmare l’ESP8266 con Arduino IDE

Posted in arduino, hardware, Uncategorized by jumpjack on 15 gennaio 2017

Brevissimo tutorial su come rendere il NodeMCU Amica con ESP8266 ESP12 a bordo programmabile tramite IDE Arduino.

  1. Scaricare esp8266_flasher.exe.
  2. Scaricare i file del firmware ESP_Easy (*).
  3. Collegare il NodeMCU (ad esempio Amica o Lolin) al PC tramite USB
  4. Avviare l’IDE arduino per verificare quale porta sia stata associata al dispositivo (menu Strumenti –> Porta)
  5. Aprire il monitor seriale di Arduino
  6. Premere e rilasciare il tasto reset sul NodeMCU per verificare se effettivamente il dispositivo comunica con l’IDE attraverso quella porta
  7. Chiudere l’IDE
  8. Avviare esp8266_flasher.exe
  9. Impostare il numero di porta
  10. Caricare il file .bin corretto, che dipende dalle dimensioni della flash a bordo del dispositivo (4MB o 4096 kbyte sull’ESP12, montato su Huzzah Adafruit, NodeMCU Lolin, NodeMCU Amica)
  11. Tenere premuto il tasto FLASH sul dispositivo, premere il tasto reset, rilasciare reset e rilasciare il tasto FLASH: in questo modo il dispositivo si predispone per la riprogrammazione (re-flashing)
  12. Cliccare DOWNLOAD: in realtà non verrà scaricato un file DA internet, ma inviato il firmware al dispositivo
  13. Attendere il completamento dell’operazione.
  14. Riaprire l’IDE di Arduino
  15. Ripetere il punto 11
  16. Caricare sul dispositivo uno sketch di esempio che stampi qualcosa sul monitor seriale

 

Metodo alternativo:

Per flashare il firmware è possibile usare direttamente anche il file eseguibile presente nel pacchetto ESP_Easy (*), che però è un po’ meno intuitivo. Una volta nota la porta a cui è collegato il dispositivo (v. punto 4 sopra) e la memoria disponibile (v. punto 10 sopra), mettere il dispositivo in modalità FLASH (punto 11 sopra), avviare esptool e indicare in sequenza il numero di porta, la dimensione della flash e la versione del fimware, cioè il numero dopo la “R” nel nome del file; ad esempio, ESPEasy_R108_4096.bin è la versione 108 per l’ESP da 4096 kbyte.

Nota: per scoprire quant’è grande la Flash RAM sul dispositivo si potrebbe usare questo comando:

esptool.py flash_id

Ma la cosa richiede di preinstallare e configurare un interprete python, che è una noia e una rogna, sto cercando un modo più semplice e alla portata di tutti.

 

(*) Il file .zip contiene vari file .bin, che sono firmware adatti a moduli ESP con Flash RAM di dimensioni diverse: 512 kbyte, 1924 kbyte, 4096 kbyte; ad esempio, il file ESPEasy_R108_1024.bin è per un ESP da 1024 kbyte (1Mbit); R108 è il numero di “build”, cioè di versione.

 

 

Analisi di lampadina led a filamento

Posted in elettricita, hardware by jumpjack on 4 gennaio 2017

L’anno scorso ho comprato una di queste nuovissime lampadine LED a filamento:

led-filamento-lampada-intera

La lampadina è marcata:

  • LIFE
  • 32.920351C 4.4W 40mA
  • 220-240V 50 Hz
  • 3000K 450lm 97

Non ricordo assolutamente dove l’ho comprata, però ho trovato questo link.

Purtroppo si è già bruciata…. così ho deciso di vivisezionarla per SE e QUALE circuito ci può mai essere nel pochissimo spazio dell’impanatura.

Dopo un po’ di frullino…

led-filamento-lampada-segata

e un po’ di lavorio di pinze, ecco il risultato: c’è davvero un minuscolo circuito che riesce, in così poco spazio, a convertire 220V alternati in “pochi” (?) volt continui!

 

led-filamento-circuito

I componenti che ho individuato sono:

  • Un ponte raddrizzatore MB6S, a quanto pare piuttosto comune nelle lampade LED
  • Un driver a corrente costante SM2082B
  • Un condensatore da 400V/4.7uF
  • Una “grossa” resistenza, forse da 1/4 o 1/2W (in realtà l’intero circuio è grosso quanto la punta di un dito)
  • 3 resistenze a montaggio superficiale, quindi a bassissima potenza

Pare che sia un circuito di pessima qualità…

Il datasheet del SM2082B suggerisce questo schema:

led-filamento-circuito

 

Collegamento di un CellLog8S/8m ad Arduino o a ESP8266

Posted in auto elettriche, batterie, hardware, scooter elettrici by jumpjack on 2 gennaio 2017

L’utente pa.hioficr sul forum https://endless-sphere.com/forums/viewtopic.php?f=14&t=20142 ha scoperto che è possibile leggere in tempo reale i dati di log di un CellLog (sia 8S con memoria che 8S senza memoria) semplicemente “agganciandosi” al pin TX dell’Atmel montato sul CellLog.

Questo significa che invece di spendere 40-50 euro per comprare un CellLog8S con memoria e infilarlo nel sottosella per poi aspettare di arrivare a casa per scaricare i dati letti, è in linea di principio possibile collegare al CellLog8M da 15 euro un ESP8266 da 8 euro che tramite Wifi invia dati a uno smartphone che li mostra in tempo reale sullo schermo durante la marcia; probabilmente è anche possibile scrivere un SW che legge i dati da più di un celllog contemporaneamente, sfruttando l’emulatore di porte seriali.

Questo è lo schema elettrico originale dell’autore:

celllog-000

 

Questa è una sua successiva modifica per implementare anche avvio del logging e reset del CellLog:

celllog-001

Di seguito la spiegazione del funzionamento che ho dedotto io dallo schema, inserita anche nella seconda edizione del mio libro “Guida alla costruzione di una batteria al litio per mezzi elettrici”, di imminente pubblicazione:

 

8.1.2. Materiale occorrente
Q1 = 2n3906 o altro PNP
R1 = R4 = R6 = R7 = 220 ohm
R2 = R5 = 330 ohm
R3 = 4700 ohm
U1 = U2 = optocoupler/fotoaccoppiatore a 2 canali, 5V, 8 pin, uscita a fototransistor di tipo NPN (es. Vishay ILD615, Fairchild MCT61, Isocom ISP827,… )
8.1.3. Spiegazione del funzionamento
Il circuito può essere suddiviso in 4 parti: le prime due ricevono dati dal CellLog tramite il primo fotoaccoppiatore e li inviano al microcontrollore esterno; le altre due ricevono invece dati dal microcontrollore e li inviano al CellLog tramite il secondo fotoaccoppiatore.
8.1.3.1. Rilevamento accensione
In Figura 127 è riportata la parte dedicata al rilevamento dell’accensione; notare che nella figura il transistor è stato capovolto rispetto allo schema originale reperito su internet, per renderlo coerente con la notazione standard di avere la corrente che scorre dall’alto verso il basso; inoltre lo schema è stato semplificato e ripulito, per facilitarne la comprensione, lasciando però inalterati i collegamenti e i componenti.
Il microcontrollore (MCU) è programmato per leggere sul pin MCU_CL8.1_DETECT lo stato del CellLog: quando il pin è “basso” (0V), vuol dire che il CellLog è acceso; normalmente questo pin è invece a 5V perché connesso all’alimentazione dell’MCU tramite R5 (che serve a limitare a 15mA la corrente Collettore-Emettitore quando il transistor è in conduzione); quando però il CellLog viene acceso, i suoi 5V arrivano, tramite la resistenza R4 (che limita la corrente a 23 mA) sul pin 4, e mettono in conduzione il fotodiodo 3-4, che mette a sua volta in conduzione il fototransistor 5-6, che mette a massa il pin MCU_CL8.1_DETECT.
celllog-002
Figura 127 – Rilevamento accensione
8.1.3.2. Lettura dati
Dobbiamo far “riflettere” sul piedino RX del microcontrollore esterno lo stato del pin TX del CellLog, tramite il fotoaccoppiatore; per farlo, usiamo il pin TX del CellLog per controllare la base di un transistor collegato all’ingresso del fotoaccoppiatore; il transistor serve a far sì che basti prelevare dal CellLog una piccolissima corrente (1 mA grazie a R3 da 4300 ohm) per attivare il fotodiodo, che richiede invece alcune decine di mA; in pratica è un transistor di disaccoppiamento, che cioè rende indipendenti gli assorbimenti di corrente di CellLog e fotoaccoppiatore.
celllog-003
Figura 128 – Circuito TX-RX con transistor PNP o NPN
Il progettista ha scelto di usare un transistor di tipo PNP, che viene acceso da una tensione di base negativa rispetto all’emettitore; l’emettitore va quindi collegato stabilmente alla tensione di alimentazione 5V, in modo che il transistor entri in conduzione quando TX va a 0V. Quando questo accade, succederà quanto segue, in sequenza:
1. Q1 si accenderà
2. Passerà una corrente nel fotodiodo 1-2
3. Si accenderà il fototransistor 7-8
Dobbiamo ora fare in modo che tutto ciò risulti in una tensione di 0V sul piedino RX del microcontrollore esterno, corrispondente al piedino 8 del primo fotoaccoppiatore, che è il collettore del fototransistor di uscita; per farlo, dobbiamo fare in modo che il piedino 8 si trovi normalmente a 5V, e venga portato a 0V solo quando si accende il fototransistor 7-8; bisogna quindi tenere il pin 8 costantemente collegato ai 5V del microcontrollore esterno, e il pin 7 alla sua massa; in questo modo, l’accensione del fototransistor 7-8, che avviene quando TX del CellLog va a 0, collegherà il pin 8 a massa tramite il 7, cioè metterà RX del microcontrollore esrerno a 0, riflettendo così esattamente lo stato del pin TX del CellLog.
Se non dovessimo avere disponibile un transistor PNP ma solo un NPN, occorrerà invertire la logica del circuito.
8.1.3.3. Reset
Il “cervello” del CellLog, un microcontrollore ATMEL, è dotato di un piedino di reset, che possiamo controllare tramite il nostro microcontrollore esterno; per farlo, al pin di reset colleghiamo il collettore del fototransistor 5-6 del secondo fotoaccoppiatore (pin 5); controlliamo questo fototransistor tramite il rispettivo fotodiodo 3-4, collegato al pin MCU_CL8.1_RESET del nostro microcontrollore esterno; basterà quindi mettere alto questo pin per mettere in conduzione il fotodiodo e il fototransistor e quindi resettare il CellLog.
celllog-005
8.1.3.4. Avvio log
Per far partire il logging è necessario premere per 3 secondi il pulsante 2 del CellLog (SW2); possiamo farlo fare al nostro microcontrollore esterno collegando l’interruttore in parallelo a un’uscita del secondo fotoaccoppiatore: quando sull’ingresso ci sarà una tensione di 5V (impostata via software), il fototransistor di uscita entrerà in conduzione chiudendo l’interruttore e avviando così il logging.

celllog-004