Firmware

TETI è di fatto pensato per essere compatibile con il principale firmware per questo tipo di dispositivi - gli idrometri digitali - ovvero l'omonimo iSpindle che definisce anche il nome di tutta la categoria.
Il firmware utilizzato è essenzialmente quello originale sviluppato da Samuel Lang, ma con alcune modifiche dovute in parte alla necessità di integrare componenti diversi e in parte alla volontà di aggiungere alcune funzioni a mio avviso utili e che invece non trovano spazio nel firmware ufficiale.
Firmware Unico vs. Hardware Differenti
Uno dei primi problemi che ho incontrato mentre cercavo di migliorare l'hardware usato per i miei iSpindle è stata la scarsa compatibilità del firmware con la tremenda moltitudine di versioni di schede "D1 MINI" che si trovano in circolazione.
Lasciando perdere per un attimo tutto il gran putiferio attorno al discorso clone vs. originale, il problema principale è che per migliorare le prestazioni dell'iSpindle bisogna anche migliorare l'hardware utilizzato. E così facendo si finisce per scontrarsi con prezzi che superano il budget, fattori di forma inadeguati, e problemi di compatibilità.
D1 Mini: clone vs. originale
Partiamo da una certezza, una delle poche quando si parla di schede "D1" o "WEMOS": le originali sono attualmente quelle prodotte da LOLIN, che ha acquisito il marchio WEMOS da tempo e continua a produrre schede con questo marchio.
E qui finisce anche l'unica certezza, perchè i prodotti LOLIN arrivano sul mercato anche con piccole differenze rispetto "alla norma" che secondo me derivano da vari fattori, come la disponibilità di componenti in quel momento o il cambio di paradigma del mercato.
Un esempio su tutti: il D1 Mini che usa un connettore USB-C al posto del vecchio MicroUSB. Si tratta dell'unica differenza, per il resto le schede sono identiche, comprese le serigrafie e i componenti più piccoli come quarzo e condensatori. E funzionano altrettanto bene.
I cloni sono di solito prodotti "che assomigliano" agli originali, ma che hanno significative differenze: chip di memoria economici e spesso fallati, condensatori di vecchia generazione, traccia dell'antenna mal realizzata, PCB dalla forma diversa, serigrafie alterate o sbagliate (es. "d1 m1n1" o "mini d1") etc. Per esperienza, meglio evitare questi prodotti perchè le proabilità di rottura durante l'uso sono piuttosto alte e il risparmio non vale la seccatura di trovarsi, magari a metà fermentazione, con un iSpindle difettoso che non fornisce più dati.
Ma questo non vuol dire che non si trovino in vendita anche ottimi cloni: un esempio altrettanto classico sono i cloni che usano sempre l'ESP8266 come chip principale ma nel package 08/12-e(F/S) su una scheda di formato e piedinatura compatibili con il D1 Mini. In questo caso l'uso di un "clone" non è affatto un problema, e a patto di scegliere un fornitore serio non avrete alcun problema di prestazioni con il vostro iSpindel.
Io preferisco sempre utilizzare i D1 Mini prodotti dalla LOLIN, anche se negli ultimi mesi il loro prezzo è schizzato alle stelle arrivando a costare tra i 5.47€ e i 5.67€ a scheda, spedizione inclusa. Il che francamente mi sembra una esagerazione colossale per un ESP8266X con 4MB di flash, ma intanto il mercato è saturo di cloni spesso difettosi e per avere una certa affidabilità si è costretti a spendere di più.
Ho realizzato tuttavia modelli con "cloni di buona qualità" - come quelli della AZDelivery - che usano semplicemente un package differente per l'ESP8266(EX) e funzionano perfettamente a distanza di tempo.
D1 MINI PRO: non tutti i "mini" nascono uguali
Il primo e più importante aspetto che volevo risolvere è legato alle prestazioni WiFi limitate del D1 MINI.
Il footprint del D1 MINI è così ridotto che basta una millimetrica imprecisione nell'etching del PCB per peggiorare significamente le prestazioni di trasmissione in WiFi. Senza contare che dovendo necessariamente affidarsi allo spettro dei 2.4Ghz si finisce per combattere anche con il sovraffollamento delle frequenze e il disturbo dato dal rumore di fondo specie in contesti densamente popolati.
Per questo motivo ho voluto utilizzare il D1 MINI PRO, che consente di collegare una antenna esterna da 3.5 dbi tramite connettore dedicato.
Ma ecco la sorpresa: il D1 MINI PRO ha un "difetto" di progettazione per il quale non è possibile riassegnare liberamente i PIN di comunicazione SDA/SCL! Il che significava che malgrado la piedinatura fosse compatibile con il D1 MINI, non poteva essere utilizzato come drop-in replacement sul classico PCB degli iSpindel perchè i collegamenti dovevano essere modificati fisicamente.
Quindi anche se avessi voluto semplicemente usare il D1 MINI PRO per via della sua antenna in ceramica (infatti questo modello di base non utilizza la classica "antenna traccia" come gli altri modelli) c'era bisogno di modificare il firmware.
MPU6050: chi diavolo sei adesso ?
Ma i problemi non si limitavano a questo: avendo assemblato svariati iSpindle ho notato - come certamente sarà capitato a tutti - che le probabilità di avere un giroscopio non funzionante sono piuttosto alte e circa 1 su 5 sembrava "rotto".
All'inizio non ci ho fatto caso, e ho dato la colpa ai venditori su cui avevo dovuto ripiegare per via della penuria di chip, ma al 5° o forse 6° modulo che stava per finire nel cestino mi è venuta voglia di vederci chiaro. Possibile mai che la soglia di errore nella linea di produzione di un componente così semplice e diffuso fosse davvero così alta?!
A quanto pare non è così, e chissà quanti accelerometri ho scartato pensando fossero difettosi mentre in realtà funzionavano correttamente. Il firmware dell'iSpindle adotta infatti una "poco nota" misura di identificazione dei chip MPU-6050 GY-521 per distinguere quelli palesmente falsi - che quindi non forniscono alcun dato circa l'inclinazione - da quelli funzionanti. Per farlo si avvale del meccanismo identificativo insito nel GY-521 che è programmato per fornire un codice identificativo hardware in risposta ad uno specifico comando: il firmware esegue questo comando all'avvio e se il codice rilevato è diverso da quello presente nei suoi archivi ignora il modulo MPU-6050 considerandolo "non attendibile".
Fin qui nulla di male, se non fosse che "il mondo è bello perchè vario" ed esistono due casi che fanno da eccezione a questa regola:
-
I casi in cui il produttore del modulo MPU-6050 GY-521 non ha rispettato le linee guida per l'assemblaggio, rendendo quindi nullo il comando di indentificazione: per farla breve, in questo caso il modulo invia una risposta vuota al posto di fornire il proprio identificativo hardware. Statisticamente si è visto che questi moduli sono anche tra i meno precisi e più soggetti a dare errori astronomici in fase di misura; per questo motivo il firmware li esclude e considera il giroscopio "non valido".
-
I casi in cui il modulo MPU-6050 GY-521 pur funzionando correttamente e rispecchiando le linee guida del produttore risponde alla richiesta di identificazione con un valore diveso, nuovo. Questo non vuol dire che il modulo non funzioni, anzi: nella mia esperienza questi nuovi moduli sono più precisi e stabili nelle misurazioni. Ma poichè il firmware non riconosce questo nuovo "codice identificativo" il giroscopio è considerato "fallace" e le sue letture ignorate.
Per risolvere questo problema, ancora una volta bisognava modificare il firmware e aggiungere alla lista di controllo i nuovi identificativi hardware.
Gyro e HW Identifier: a long story...
Spulciando la lista degli ISSUE su Git ho scoperto che in realtà il problema dei giroscopi non è propriamente "fresco fresco di cotta" ma anzi è qualcosa che svariati membri della comunity discutono da tempo.
Eppure - e francamente mi sfugge il perchè - non è mai stata accettata una pull request che introducesse la lista dei nuovi hardware identifier per risolvere il problema.
Di recente è stata introdotta, come unica miglioria rispetto al problema, una modifica che ha espanso la lista identificativi aggiungendo il secondo e più diffuso identificativo hardware per i moduli GY-521.
Inoltre i moduli giroscopio che non forniscono un identificativo vengono considerati "de facto" difettosi e quindi non compatibili: capisco l'esigenza a priori di evitare errori, però avrei preferito che in quel caso comparisse un avviso e i valori venissero comunque riportati così da poter capire se il dispositivo fosse realmante fallato o meno.
Fatta una Ale...si prova una IPA!
Arrivato al punto di dover modificare necessariamente il firmware, un'altra "alcolica" idea ha iniziato a farsi strada nella mia mente: tanto valeva sfruttare l'occasione e cercare di migliorare anche altri aspetti del sistema, come ad esempio l'ottimo algoritmo di compensazione della OG in base alla temperatura!
(altra cosa che inspiegabilmente è finita nella lista de "bello ma no grazie!" sul Git. e che invece ritengo sia di grandissima utilità per aumentare la precisione di questo strumento).
Questa e altre piccoli fix - come ad esempio la necessità di indicare un indirizzo diverso da cui scaricare il FW per il PCB TETI - hanno portato al rilascio di un FW "customizzato" per certi aspetti.
Riassumendo
-
TETI è compatibile con il firmware iSpindle? Si, in pratica il PCB esegue la stessa identica versione salvo qualche piccolo accorgimento.
-
Posso flashare TETI con il FW che trovo sul GIT di universam1? Purtroppo no, perchè l'assegnazione PIN del D1 MINI PRO è diversa da quella standard considerata da universam1 per il D1 MINI.
-
Posso compilare e flashare la mia versione del FW iSpindle su TETI? Ovviamente si! Basta ricordarsi di modificare l'assegnazione dei PIN SDA e SCL in base al pinout del D1 MINI PRO.
-
Posso usare altri FW di derivazione iSpindle su PCB TETI? Certo, a patto di controllare sempre la compatibilità del pinout. Non posso purtroppo mettermi a testare ogni singola derivazione del FW per iSpindle che c'è "là fuori".
-
Dove trovo il FW per TETI ? Qui sulla pagina dedicata.