Esp8266 core 2.2.0

E’ uscita da circa 3 giorni la nuova versione del Core per Esp8266 da utilizzare con la IDE di Arduino. Le ultime versioni di questa notificheranno automaticamente la presenza dell’aggiornamento, che risolve numerosi bug rispetto la precedente. Il changelog si può consultare qui

http://esp8266.github.io/Arduino/versions/2.2.0/doc/changes.html

link da cui è possibile accedere a tutta la documentazione del Core (Reference e via dicendo).

 

Raspberry Pi3

pi3

Beh, alla fine un Pi3 l’ho preso. E visto che questo blog è pur sempre un sito sperimentale ho passato GrepPipeLinux sul Pi3, lasciandogli gestire solo quello. Mi sembra che la navigazione ne abbia guadagnato un po’, segno che il web server Apache trae maggior beneficio dal  clock più alto del processore e dal numero di core piuttosto che dalla velocità di accesso dello storage. Questa cosa non mi sorprende in quanto sui web server presenti nei data center, macchine di ben altra levatura,  ho verificato esattamente lo stesso comportamento. Diciamo che il Banana Pro con l’SSD collegato alla porta SATA vince a mani basse se sfruttato con un cloud server tipo Owncloud, dove l’I/O dello storage diventa determinante. In un sito WordPress invece le pagine web dopo la prima richiesta vanno comunque a finire sulla cache disco del sistema operativo e vengono prelevate più velocemente dalla RAM.

Detto questo mi rimangono sempre alcune perplessità riguardo il Pi3: va benissimo metterci un Arm 64 bit come processore, però tanto valeva portare a 2Gb la ram disponibile, senza alzare troppo i costi. Per ora sta girando una Raspbian a 32 bit, ma quando avranno realizzato la versione a 64 bit si accorgeranno (e ci accorgeremo) che 1Gb di ram potrebbe starci un po’ stretto per tante cose.

Wemos D1 Mini e El Capitan: risolto!

Ho trovato un link da cui scaricare una versione “signed” dei driver CH340/341 che mi ha permesso di riconoscere finalmente una porta per i Wemos D1 mini sotto OS X El Capitan.

Signed Mac OS Driver for Winchiphead CH340 serial bridge

wemos02

Ho semplicemente installato i driver nuovi sopra quelli preesistenti, riavviato il Mac ed è andato tutto a posto.

Tanto per dire come non bisogna arrendersi mai ed aspettarsi di tutto, il mio iMac nonostante avessi installato i driver “signed” continuava a non riconoscere la Wemos. Ho cambiato porta USB sul retro del desktop ed ha cominciato a vederlo. Che dire….

Wemos D1 mini. Finalmente arrivati!

wemos_01

Dopo quasi 40 giorni di attesa (di cui quasi la metà passati in attesa di essere smistati in Italia, diciamolo….) sono arrivati i 4 D1 mini che avevo ordinato. Eccone uno appena saldato; ho scelto il montaggio con i piedini per breadboard (ma ci sono nella confezione strip di ogni genere) e di mantenere in alto il lato con il led di programmazione visibile. Nella parte inferiore ci sono altri componenti tra cui un microscopico regolatore di tensione e il CH340 per la comunicazione seriale/usb.

Riguardo a questo devo segnalare che con OS X El Capitan non c’è stato verso di vedere assegnata una Porta a questa scheda, sia con i driver ufficiali “signed” che con quelli presenti nel sito Wemos. Per scrupolo ecco entrambi i link:

http://sparks.gogo.co.nz/ch340.html

http://www.wemos.cc/downloads/

ma non ho avuto ancora occasione di cercare sulla Rete approfondimenti a riguardo. Una certa delusione quindi per chi usa solamente OS X, ma qui lascio una porta aperta perché non è detto che il problema sia in qualche modo risolvibile. Sotto Linux invece (utilizzo una Mint 17.3 virtualizzata VMware su OS X) tutto è filato liscio come l’olio, come si può vedere dalla figura qui sotto.

wemos_02

C’è da dire che è un piacere programmare la scheda a 921600 baud invece dei “soliti” 115200. Nei prossimi giorni cercherò di assegnargli il ruolo almeno di nodo ambientale passivo acceso H24 per verificarne la stabilità operativa. C’è poi da trovare una soluzione al fatto che i driver CH340 per OS X non la riconoscono, cosa per me non bloccante ma obiettivamente fastidiosa per chi intende programmare queste Wemos da un Mac.

http://www.wemos.cc/Products/d1_mini.html

ESP8266 accesso diretto a MySql

Ho accennato tempo fa che stavo controllando se qualcuno avesse fatto il port per le schede ESP8266 della ottima libreria per l’accesso diretto di Arduino ad un database MySql reperibile alla url:

https://launchpad.net/mysql-arduino

Avevo trovato un link di un work in progress tempo fa ma poi non sono riuscito a recuperarlo. A questo punto ho trovato un po’ di tempo e ho provato a sistemare i problemi di mancata compilazione per conto mio dovuti più che altro a direttive #include da modificare e qualche altro particolare.

Alla fine ecco la libreria che ho modificato e che ai primi test funziona:

mysql_connector_esp8266-1.0.4gpp

Ho già trasferito il codice modificato (espmysql.cpp, espmysql.h, espsha1.cpp, espsha1.h) al livello principale della cartella quindi dopo l’installazione del .zip la libreria verrà riconosciuta subito.

Inoltre proprio perché ho rinominato i 4 file citati sopra questa libreria può convivere con quella per Arduino senza creare conflitti di riferimenti e via dicendo.

Sto effettuando dei test con degli sketch tipo questo che riporto sotto, che altri non è che il vecchio collector della Stazione Meteo che ho già presentato mesi fa adattato per funzionare con un ESP8266. Con Arduino questa è una libreria molto impegnativa in termini di consumo di memoria , ma la maggiore disponibilità di questa negli ESP8266 mi ha permesso di creare tranquillamente un buffer per le query di 2048 bytes senza molti problemi.

Consiglio caldamente a chi intenzione di testarla ed usarla di scaricare l’ottimo Reference Manual in formato PDF sempre presente al link che ho indicato. Come sempre grazie a Chuck Bell, il maintainer del progetto, per l’ottima libreria messa a disposizione.

Infine, tanto per avere un idea di come si può usare in INSERT lo sketch di test che sto usando che simula la scrittura dei dati di una Stazione Meteo su una tabella MySql. Lo sketch originale per Arduino si può trovare QUI, così come la DDL della tabella di test.

SKETCH DI TEST:

WordPress: TwentySixteen e Riassunti

Stavolta voglio condividere un’informazione che riguarda chi come me utilizza WordPress associato al tema TwentySixteen. Da diverso tempo volevo avere sulla pagina principale solamente i riassunti degli articoli, dal momento che spesso a causa degli Sketch che inserisco diventano molto lunghi e peggiorano la leggibilità della Prima Pagina.

Andare nelle impostazioni di WordPress ed impostare là la visualizzazione dei riassunti non porta a nessun effetto, per cui ho cominciato una “caccia” su Google per vedere cosa bisognava fare. In effetti ho trovato che bisogna editare a mano un file php, sostituendo (una volta sola) l’espressione the_content( con the_excerpt(.

Fin qui tutto bene, solamente che il file da modificare cambia da tema a tema, e non sono riuscito a trovare subito dove stava quello che serviva a me. Per cui sono andato alla ricerca nel file system per mio conto e alla fine l’ho trovato. Si tratta quindi di:

/var/www/html/wordpress/wp-content/themes/twentysixteen/template-parts/content.php

Ecco il pezzo di codice incriminato:

Dove ora c’è the_excerpt prima ovviamente si trovava the_content.

Tutto qua. Viva Google, come al solito….. 🙂

RTC DS3231 regolato da ESP8266

ds3231

Qualche mese fa avevo parlato di come settare (ed anche leggere naturalmente) questo modulo RTC da un Arduino dotato di Ethernet Shield, in modo tale da regolarlo tramite un Server NTP da Internet. Con le attuali schedine ESP8266, direi “quasi naturalmente” connesse ad Internet, lo sketch che usavo in precedenza con Arduino ha richiesto alcune modifiche, e ne ho comunque approfittato per gestire, in automatico stavolta, “l’iniezione” nel modulo anche del giorno della settimana, cosa che prima facevo manualmente.

Anche stavolta lo sketch è strutturato per impostare l’ora esatta via NTP una volta solamente alla partenza, ma non è difficile modificare il codice in modo tale che l’aggiornamento venga fatto una volta al giorno, o anche una volta a settimana, senza bloccare altro codice che si occupa di fare altre cose.

Faccio banalmente un esempio: qualora volessimo che nella nostra funzione loop() il modulo RTC venisse regolato ogni 24 ore chiamando un server NTP facendo in modo che questo ciclo di attesa sia “passante”, ovvero non blocchi il resto del codice in esecuzione, si potrebbe seguire questo schema:

Tutto questo per due motivi: primo, il nostro RTC è sufficientemente preciso per mantenere l’orario esatto al secondo almeno per una settimana e poi perché non è corretto tempestare qualsiasi server NTP di richieste ad esempio 1 volta ogni minuto, correndo il rischio (giustamente) di essere chiusi da un firewall per eccesso di traffico.

Premesso questo passiamo allo sketch:

Inserire SSID e password della rete Wi-Fi a cui si intende collegarsi. Il server NTP può essere lasciato invariato o sostituito con uno dei tanti disponibili su Internet.

Il codice di regolazione dell’orologio RTC, dovendo essere eseguito una volta sola, è nella funzione setup(). Ho usato come uscita dell’orario la Data Giuliana (data che conta i giorni dal mezzogiorno del 1 gennaio 4713 a.C.), quantità molto usata nei calcoli astronomici, che mi permette facilmente poi di calcolare il giorno della settimana (Calendario Perpetuo). Il protocollo NTP prevede di fornire l’informazione in UTC, ovvero il fuso di Greenwich, ed è bene regolare l’RTC con questo fuso per non avere problemi con l’entrata e l’uscita dell’Ora Estiva (DST). In caso di scrittura di Timestamp sui Db poi rimanere in UTC è quasi d’obbligo sempre per lo stesso motivo.

La funzione loop() serve solo per mostrare l’orario letto in continuazione dall’orologio RTC.

Funzioni per la gestione in lettura/scrittura del modulo RTC. L’ultima funzione può essere cambiata per avere data e ora nel formato che più ci fa comodo.

Funzioni di gestione del dialogo NTP tra ESP8266 e Server remoto.

Infine alcune funzioni per la gestione delle date, con a conclusione il nostro Calendario Perpetuo. Come avevo accennato qualche articolo fa, utilizzare funzioni come queste, in special modo quelle relative alla Data Giuliana, richiede l’uso di variabili double “vere”. Con la scarsa precisione di un Arduino Uno, Mega o Nano avremmo ottenuto risultati sballati. Arduino Due e credo anche Arduino Zero non hanno di questi problemi per fortuna. 🙂