In un precedente articolo Scheda di sviluppo con ESP8266 (ESP-12F) è stata presentata la scheda, e sono state mostrate le sue caratteristiche.
Vediamo ora come leggere tramite il modulo ESP-12F e il sensore DHT11, i valori di temperatura e umidità rilevati e come mostrarli sul piccolo display OLED con interfaccia I2C.
Indice
Materiale occorrente.
Il nostro progetto prevede l’utilizzo dei seguenti componenti, tutti inclusi nella confezione del kit:
- Scheda di sviluppo IOT con ESP8266
- Un cavo di collegamento USB
- Display OLED 0,96″ 128×64 pixel
- Sensore DHT11 Temperatura e umidità
Dove trovare il kit
Il kit della scheda sviluppo ESP8266 con ESP-12F che abbiamo testato, è stata acquistata sul sito Banggood ad un costo di poco superiore ai 10 € più spese di spedizione.
Caratteristiche principali della scheda
- Tensione di lavoro: 5 V (alimentato tramite USB)
- Chip principale: modulo ESP8266 (ESP-12F)
- Interfaccia di espansione: 4Pin per OLED, 3 pin per DHT11
1 | Led indicatore di stato |
2 | Chip USB/Porta seriale |
3 | Led presenza tensione |
4 | Chip alimentazione da 5V a 3.3V |
5 | Porta USB |
6 | Porte I/O Alimentazione |
7 | Modulo ESP 8266 (ESP-12F) |
8 | Porte I/O Alimentazione |
9 | Connettore interfaccia DHT11 |
10 | Connettore OLED |
11 | Pulsante RESET |
12 | Pulsante BOOT |
Pin di interfaccia
Sulla scheda sono presenti due pin strip che permettono di accedere ai vari pin del modulo ESP-12F e due pin strip per il collegamento del Display OLED e del sensore di temperatura.
Per quanto riguarda il connettore P4 utilizzato per collegare il sensore, il pin dati è collegato al pin GPIO5 dell’ESP-12.
Per il connettore P3 a cui sarà collegato il display, i due pin SCL e SDA sono collegati ai pin GPIO12 e GPIO2 dell’ESP-12.
Display OLED
Nel kit è presente un display OLED (Organic Light-Emitting Diode) quindi diodo organico a emissione di luce. A differenza dei display LCD che hanno bisogno di una fonte luminosa esterna per essere visibili, questi OLED sono in grado di emettere luce propria.
Il display da 0,96″ ha una risoluzione di 128 x 64 pixel e utilizza il driver SSD1306 e deve essere interfacciato tramite una connessione I2C.
Per altre informazioni sul display leggete l’articolo Display OLED 0.96″ 128×64 pixel – interfaccia I2C
Sensore DHT11 Temperatura e umidità
Il kit è completato con un sensore di temperatura e umidità tipo DHT11 con uscita dei dati in formato digitale di facile gestione. Il sensore utilizza una tecnica digitale esclusiva che unita alla tecnologia di rilevamento dell’umidità, ne garantisce l’affidabilità e la stabilità. I suoi elementi sensibili sono connessi con un processore 8-bit single-chip.
Schema elettrico del modulo sensore
Il modulo fornito è simile al modulo KY-015 Temperature and humidity sensor module, di cui ne esistono varie versioni. Occorre fare attenzione alla disposizione dei pin che non è standard ma varia a seconda del produttore, in quello fornito, i pin di alimentazione sono ai due lati e quello di uscita dei dati è posto centralmente.
Schema di collegamento
In realtà non sarà necessario effettuare dei reali collegamenti tra il modulo ESP-12F e il sensore DHT11 (temperatura e umidità) in quanto questi risultano già effettuati tramite le piste presenti sul PCB. Ci si limiterà ad inserire nei rispettivi connettori il sensore e il display.
Comunque sotto è riportato lo schema equivalente.
Programmazione della scheda
Per programmare la scheda si potrà fare uso di ARDUINO IDE (scaricabile gratis dal sito di Arduino), dopo aver scaricato il SW IDE di ARDUINO , occorre configurare come da istruzioni seguenti.
Cliccare su File->Impostazioni
e inserire nel campo URL il seguente indirizzo
Una volta riavviato il programma che procederà a caricare i file necessari, cliccare su Strumenti e scegliere la scheda NodeMCU 1.0 (ESP-12E module) come da foto seguente
In questo modo il programma imposterà automaticamente i parametri necessari.
Verificate che la porta selezionata sia quella a cui è collegata la scheda
Programma utilizzato
Segue il programma utilizzato; per il suo funzionamento sono necessarie alcune librerie.
Per l’installazione delle librerie vedete anche l’articolo Arduino – Tutorial, come installare una libreria
Libreria per gestione OLED
La libreria utilizzata è stata realizzata dalla Adafruit. Per utilizzarla si può cercarla tra le librerie installabili nell’IDE, basterà inserire nel campo “ssd1306“, e si dovrà installare quella realizzata da Adafruit + mcauser. Una volta caricata sarà mostrata la dicitura “INSTALLED“.
Vedere a tale proposito l’articolo Display OLED 0.96″ 128×64 pixel – interfaccia I2C
Libreria per gestione del sensore DHT11,
Per la gestione del sensore DHT11, è sufficiente andare in Sketch > #include libreria > Gestione libreria , quindi inserite nel campo di ricerca “DHT” e selezionate la libreria fornita da Adafruit. Adesso nella versione 1.4.2.
A questo punto si effettuerà il download nella memoria del modulo del programma riportato sotto, finito il caricamento, se non vi saranno errori dovrebbero apparire i dati letti come nella foto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#include <Wire.h> #include <Adafruit_SSD1306.h> #include <DHT.h> #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 int setTextSize1 = 1; int setTextSize2 = 2; int delay1 = 1000; int delay2 = 2000; Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); //Impostazione sensore #define DHTPIN 5 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Wire.begin(2, 14); dht.begin(); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); for (;;); } display.clearDisplay(); display.setTextColor(WHITE); } void loop() { delay(delay1); //read temperature and humidity float t = dht.readTemperature(); float h = dht.readHumidity(); if (isnan(h) || isnan(t)) { Serial.println("Failed to read from DHT sensor!"); } // clear display display.clearDisplay(); // display temperature display.setTextSize(setTextSize1); display.setCursor(0, 0); display.print("Sensore Temp/Umidita'"); display.setTextSize(setTextSize2); display.setCursor(0, 16); display.print("T: "); display.print(t); display.print(" "); display.setTextSize(setTextSize1); display.cp437(true); display.write(167); display.setTextSize(setTextSize2); display.print("C"); // display humidity display.setTextSize(setTextSize2); display.setCursor(0, 37); display.print("H: "); display.print(h); display.print(" %"); display.setTextSize(setTextSize1); display.setCursor(15, 55); display.print("www.adrirobot.it"); display.display(); } |