Quando si riceve in anteprima una scheda o un microcontroller per me è come iniziare un viaggio, una nuova avventura. Iniziare a studiarne caratteristiche e tecnologie porta sempre ad un arricchimento professionale. Con ESPertino è stato lo stesso, ecco quindi che vorrei condividere con voi il mio viaggio descrivendovi funzionalità, curiosità e possibilità di questa scheda ispirata ad Arduino e gli innumerevoli cloni esistenti. Progetteremo un software da caricare sulla scheda e un altro per Windows per pilotarla facendoli dialogare tramite la porta seriale e in futuro tramite il Blootooth. In pratica una demoboard ma software.
Introduzione
Scopo del progetto, come accennato, sarà realizzare sia un software per pilotare ESPertino, sia un eseguibile per Windows che possa dialogare e comandare ESPertino tramite comunicazione seriale. Collegheremo ad ESPertino diversi sensori e componenti e ogni volta monitoreremo l'attività di questi tramite i due programmi. Al termine del viaggio avremo toccato un po tutti i sensori che si possono collegare a questa scheda cercando d'imparare cose nuove e/o riutilizzandone di già conosciute.
Velocemente, per ogni sensore o componente usato, cercheremo di capirne le caratteristiche principali e come lavora.
DHT11
Il DHT11, vedi figura 1, è un piccolo sensore per misurare temperatura e umidità e dispone di una uscita digitale dei valori rilevati. In questo modo garantisce un'elevata affidabilità e stabilità anche a lungo termine. Questo sensore include una misurazione dell'umidità di tipo resistivo e un termistore per misura della temperatura il tutto collegato ad un microcontroller a 8 bit, che offre eccellenti qualità, velocità di risposta e anti-interferenza.
La calibrazione avviene in laboratorio da parte del produttore e i valori di riferimento sono immagazzinati nel microcontroller. L'interfacciamento è di tipo seriale monodirezionale. Dimensioni ridotte e basso consumo lo rendono perfetto per tutti i progetti di domotica e simili. E' interessante notare come in commercio ve ne siano versioni a 3 e 4 pin, anche se poi se ne usano sempre 3 per il funzionamento.
Nonostante sia un buon prodotto non dimentichiamo che è pur sempre un sensore nato per l'hobbistica, non mettetelo a contatto con sostanze liquide o lasciatelo solo il sole diretto per ore.
Alimentazione |
3-5.5V DC |
Segnale di uscita |
digitale tramite single-bus |
Elemento sensibile |
Resistenza in Polimero |
Campo di misura umidità |
20-90% di umidità relativa, temperatura di 0-50 gradi Celsius |
Precisione |
umidità + -4% RH (Max + -5% di umidità relativa), temperatura +-2.0 Celsius |
Sensibilità |
umidità 1% di umidità relativa, temperatura 0.1 Celsius |
Ripetibilità umidità |
+ -1% di umidità relativa temperatura +-1 Celsius |
Umidità isteresi |
+ -1% RH |
Stabilità a lungo termine |
+ -0.5% UR / anno |
Tempo di rilevazione |
medio: 2s |
Dimensioni |
12 * 15,5 * 5,5 millimetri (variabili a seconda del produttore) |
Iniziamo
Prepariamoci ad analizzare questa prima parte del progetto assicurandoci di avere tutto il necessario:
- ESPertino
- Cavo USB (uguale a quello che si usa per Arduino, USB A - micro USB)
- Sensore DHT11
- Una resistenza da 10K.
- PC con Windows 7, 8, 10 con l'IDE di Arduino installato.
- Visual Studio 2015.
Colleghiamo il DHT11 ad ESPertino come da schema in figura 2:
Adesso colleghiamo ESPertino alla porta seriale e facciamo l'upload dello sketch. Ricordate di selezionare la scheda dopo aver installato i corretti driver così come spiegato negli articoli precedenti. Io l'ho collegata anche come ESP32 Dev Module con successo.
//---------------------------------------------- // INTERFACCIA ESPERTINO - MAESTRO // ver. 1.0.0 //---------------------------------------------- // scritto da Gabriele Guizzardi (Brain & Bytes) //---------------------------------------------- // Copyright 2017 Elettronica Open Source //---------------------------------------------- #include <dht.h> #define sensor 4 dht DHT; // onboard LEDs const int ledPin5 = 5; const int ledPin13 = 13; // onboard Relays const int relPin14 = 14; //K1 const int relPin12 = 12; //K2 String readString; void setup() { // imposta la comunicazione seriale Serial.begin(9600); delay(500); // inizializza i LED e i Relé come OUTPUT pinMode(ledPin5, OUTPUT); pinMode(ledPin13, OUTPUT); pinMode(relPin14, OUTPUT); pinMode(relPin12, OUTPUT); digitalWrite(ledPin5, HIGH); digitalWrite(ledPin13, HIGH); Serial.println("Inizio..."); } void loop() { // ricezione dati da seriale if (Serial.available() > 0) { // while (Serial.available()) { delay(3); char c = Serial.read(); readString += c; } // lettura sensore DHT11 if (readString == "DHT") { dht11(); } // spengo il LED 05 if (readString == "L05") { digitalWrite(ledPin5, HIGH); Serial.println("LED 5 SPENTO"); } // accendo il LED 05 if (readString == "H05") { digitalWrite(ledPin5, LOW); Serial.println("LED 5 ACCESO"); } // spengo il LED 13 if (readString == "L13") { digitalWrite(ledPin13, HIGH); Serial.println("LED 13 SPENTO"); } // accendo il LED 13 if (readString == "H13") { digitalWrite(ledPin13, LOW); Serial.println("LED 13 ACCESO"); } // rilascio il relé 1 if (readString == "LK1") { digitalWrite(relPin14, HIGH); Serial.println("K1 (14) SPENTO"); } // eccito il relé 1 if (readString == "HK1") { digitalWrite(relPin14, LOW); Serial.println("K1 (14) ACCESO"); } // rilascio il relé 2 if (readString == "LK2") { digitalWrite(relPin12, HIGH); Serial.println("K2 (12) SPENTO"); } // eccito il relé 2 if (readString == "HK2") { digitalWrite(relPin12, LOW); Serial.println("K2 (12) ACCESO"); } readString=""; } } void dht11() { // sensore di temperatura/umidità DHT.read11(sensor); Serial.print(DHT.humidity); Serial.print(";"); Serial.println(DHT.temperature); delay(2000); }
Questo semplice programma getta le basi per un futuro ampliamento del codice per poter aggiungere sensori e funzionalità al nostro ESPertino. Vedremo infatti come il programma per Windows utilizzi i comandi di tre lettere per pilotare la scheda. In pratica automatizzeremo quanto stiamo per fare a mano via software.
Procediamo con ordine. Per testare subito se tutto funziona aprite il Monitor Seriale, impostatelo su 9600 baud e premente il pulsante di reset su ESPertino. Vedrete apparire il messaggio "Avvio..." (e forse anche una serie di caratteri spuri, nulla di allarmante) e potrete fare un primo test scrivendo nella casella di testo il comando H13 seguito da Invio. Il LED onboard collegato sul pin 13 della scheda si accenderà. Otterrete anche un messaggio di conferma. Allo stesso modo potete inviare un po tutti i comandi fino ad ora riconosciuti:
- H13 e L13 accendono e spengono il LED onboard sul pin 13
- H05 e L05 accendono e spengono il LED onboard sul pin 05
- HK1 e LK1 eccitano e diseccitano il RELE' onboard sul pin 14
- HK2 e LK2 eccitano e diseccitano il RELE' onboard sul pin 12
- DHT richiede una trasmissione di umidità e temperatura dal sensore DHT11 collegato sul pin 04
Come detto nel cappello dell'articolo, implementeremo altri comandi e funzionalità nei futuri articoli.
Se avete anche solo una minima esperienza su Arduino leggere il codice sarà uno scherzo, si tratta di una forma molto semplice di ricezione, dalla porta seriale, dei comandi ricevuti e successiva esecuzione dell'operazione desiderata. In pratica un minuscolo interprete. Come noterete, i LED e il Relé sono accesi o eccitati con dei semplici digitalwrite mentre la lettura del sensore avviene tramite richiamo della funzione DHT11 in fondo al codice.
[...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2379 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Davvero interessante e, soprattutto, molto utile. Bravo!!!!
Scusami, forse mi è sfuggita ma la libreria dht.h che includi nel file di progetto, l’hai implementata tu? Mi farebbe molto comodo in quanto a breve dovrei sviluppare un progetto proprio con questo sensore.
Salve, no la libreria l’ho trovata in rete, appena possibile posto qui il link per recuperarla.
Bell’esempio di software di comunicazione seriale tra microcontrollori e Windows.
Buona sera, in rete si trovano mille versioni della libreria DHT. Quella che ho trovato io con lo sketch mostrato non funzionava e ho dovuto modificare parte del listato. Per il resto tutto funzionante anche la parte in Visual Studio. Grazie dell’esempio e attendo ulteriori articoli per altre periferiche.
Complimenti, sarebbe interessante se EOS facesse qualche tutorial su Python ed Espertino.