ESP826612-e e sensori analogici. Risolto.

Ci ho messo un po’ a capire, ma credo di aver risolto. Dopo aver provato ad installare il supporto per le schede ESP versione 2.0.1-rc2 e non aver notato progressi sono andato a rovistare nel codice in cerca di qualche ispirazione. In effetti la gestione della analogRead() è rimasta la stessa:

se si usa un Mac come nel mio caso, cercando in

 un file chiamato core_esp8266_wiring_analog.c  non ho trovato particolari indizi

se non quello che nella chiamata di questa funzione è vietato distrarsi e immettere come parametro di input ‘0’ invece di ‘A0′. 🙂

L’illuminazione mi è venuta guardando il codice di debug che io metto come testata nei miei sketch ESP e che ha avuto un effetto stabilizzante nei runtime dei moduli. Ecco qui il colpevole:

Anzi, il colpevole era questa maledetta riga:

che ha il compito evidentemente di mettere in output il pin ADC per leggere il Vref e che inibisce l’uso dello stesso pin come porta analogica….

Dopo aver dato qualche testata contro il muro per non averci fatto caso prima, ho tolto solo questa riga lasciando il resto, ho ricaricato lo sketch e il mio fotoresistore GL5539 ha miracolosamente preso a misurare correttamente fotoni, facendo il suo sporco lavoro.

Due cose soltanto mi lasciano un po’ perplesso: il pin ADC lasciato “a vuoto” non ritorna  0 ma un valore flottante compreso tra 10 e 15. Vabbè, ci posso anche stare. Ma la cosa più strana è che, multimetro alla mano, ho misurato che la porta satura (ovvero ritorna valore 1023) non a 1V come dichiarato, ma a 3.3V, il voltaggio di alimentazione. Tanto è vero che al di là della resistenza di pull-down (10Kohm) che ho lasciato, non c’è stato alcun motivo di usare nel circuito un classico partitore di tensione.

Verificherò questa cosa anche sulle altre schede in mio possesso, se così fosse sarebbe anche meglio, non perderei risoluzione sui sensori analogici. E’ strano, ma le misure dicono che è così…..

 

2 pensieri riguardo “ESP826612-e e sensori analogici. Risolto.”

  1. In realtà è normale: l’ADC dell’ESP-12E legge da 0 a 1 V, ma il nodemcu ha un partitore di tensione incluso on-board. Capisco il motivo di questa scelta che semplifica la vita agli utenti… peccato che sia scritto da nessuna parte, se non su blog sparsi in giro.

    1. E’ vero, andando a cercare in giro si parla di un internal voltage divider riferito agli ESP-12. Qualcuno addirittura parla del pin RSV adiacente a ADC che invece bypasserebbe il remapping. Potrebbe essere utile con un sensore del tipo LM35DZ che lavora meglio a 1,1V. Ora sono stanco e non mi va di metterci le mani, ma bisognerebbe prendere in mano i puntali e verificare….. 🙂

Lascia un commento