Non vi sono articoli nel carrello

Introduzione alla Wemos D1 Mini

Tutorial Wemos D1 Mini e sensore DHT11.

31 ago 2017

In questo primo articolo andremo ad analizzare il modulo Wemos Di Mini, un prodotto molto interessante, con un costo contenuto e particolarmente indicato per coloro che desiderano muovere i primi passi nel mondo del IoT, della domotica e della comunicazione Wi-Fi. Inizieremo con una breve panoramica del modulo approfondiremo la programmazione con l'IDE di Arduino e descriveremo un semplice sistema per il rilevamento dell'umidità e della temperatura sviluppato utilizzando lo shield Wemos DHT, i dati rilevati dal sensore potranno essere letti da un server remoto.

Analizzeremo anche la connessione I2C realizzando un semplice sistema per il rilevamento della luminosità utilizzando una Wemos D1 Mini e un sensore TSL2561.


Descrizione
In questo primo articolo andremo ad analizzare il modulo 
Wemos Di Mini, un prodotto molto interessante per coloro 
che sono interessati al mondo IoT, della domotica e della 
comunicazione Wi-Fi.
Inizieremo con una breve panoramica del modulo 
approfondiremo la programmazione con l'IDE di Arduino 
e termineremo descrivendo un semplice sistema per il 
rilevamento dell'umidità e della temperatura.In questo primo articolo andremo ad analizzare il modulo Wemos Di Mini, un prodotto molto interessante per coloro che sono interessati al mondo IoT, della domotica e della comunicazione Wi-Fi.Inizieremo con una breve panoramica del modulo approfondiremo la programmazione con l'IDE di Arduino e termineremo descrivendo un semplice sistema per il rilevamento dell'umidità e della temperatura.

Il Modulo WeMos D1 mini è basato sul microcontrollore Wi-Fi ESP8266 ESP-12F (datasheet) che può essere programmato utilizzandol'IDE di Arduino oppure NodeMCU. La semplicità della programmazione che può essere effettuata anche in modalità wireless e l'ampia disponibilità di shield aggiuntivi permettono di sviluppare il proprio progetto di "Internet delle cose" in tempi estremamenterapidi. Il modulo WeMos D1 mini è dotato di una interfaccia USB realizzata tramite il convertitore seriale-USB CH340 (datasheet), dal connettore USB viene anche prelevata l'alimentazione a 5V, un regolatore interno tipo RT9013 (datasheet) si occupa di generarel'alimentazione a 3,3V per il modulo ESP-12F. Per evitare confusione tutti i pin di I/O sono chiaramente etichettati. Nota: Tutti gli I/O supportano una tensione massima di 3,3V


 

Specifiche tecniche:

• 11 I/O digitali, tutti i pin sono provvisti di interrupt e supportano PWM, I2C , One-Wire (D1-SCL-D2 -SDA)
• Un Pin analogico (tensione massima di ingresso 3.2V)
• Connessione Micro USB
• Compatibile con Arduino e con nodemcu


      Immagine del modulo nella busta antistatica                                     Contenuto della busta antistatica
                                       





     Modulo con i connettori scelti per il montaggio                                   Modulo con connettori montati




 Componenti presenti sul modulo lato componenti                   Componenti presenti sul modulo lato saldature



Schema elettrico del modulo Wemos D1 Mini



Sul lato superiore del modulo Wemos D1 Mini sono presenti:

• Il Modulo ESP12F con antenna Wi-Fi e un led Blu

Sul lato inferiore del modulo Wemos D1 Mini sono presenti:

• 11 un pulsante con funzione di RESET
• Un un regolatore di tensione tipo RT9013 per ridurre la tensione da 5V ai 3.3V con relativi condensatori di livellamento
• Il chip CH340G utilizzato per la conversione seriale dei dati da USB a UART necessaria ad interfacciarsi con il chip ESP8266
• Due transistor NPN S8050 (datasheet) in contenitore SOT23


Installazione del driver per il chip CH340G

Come spiegato la scheda utilizza come convertitore USB-seriale il chip CH340G invece dei più diffusi chip di FTDI o Atmega32U4, siccome Windows non supporta nativamente questo chip il modulo non viene riconosciuto.

Per questo motivo è necessario scaricare il driver dal sito ufficiale del fornitore, dopo avere eseguito l’unzip del pacchetto, è possibile procedere con l’aggiornamento del driver per la periferica:


Per fare questo si dovrà lanciare il programma SETUP.EXE




Dopo l'apertura della finestra si effettuerà l'installazione dei driver, che avverrà in automatico premendo INSTALL, al termine della procedura verrà mostrata la seguente finestra:





A questo punto collegando il modulo, questo sarà riconosciuto e Windows configurerà correttamente la nuova porta COM:





Impostazione dell'IDE di Arduino

Per programmare il modulo WeMos D1 mini utilizzeremo l'IDE di Arduino, per cui se non già installato occorrerà scaricare e installare l'ultima versione dal sito ufficiale al momento della stesura di questo articolo l'ultima versione è la 1.8.4

A questo punto dovremmo aggiungere le informazioni per le schede ESP8266 all'Arduino. Per cui aperto l'IDE di Arduino, andare al menu File -> Impostazioni -> URL aggiuntive per il Gestore Schede, l'indirizzo da inserire é:



                                         Inserimento URL aggiuntiva per gestione modulo - figura 1

Per impostare la scheda WeMos D1 mini, andare al menu Strumenti -> Scheda -> Gestione schede (Figura 2)



                                                                                          Gestione schede - figura 2

Quando apparirà la scheda Gestore schede digitare ESP8266 e quindi installare i driver cliccando su Installa (figura 3)



                                                                            Installazione driver schede - figura 3

A questo punto tornare al menu Strumenti - Gestione Schede... quindi selezionare nella sezione ESP8266 Modules il modello WeMos D1 R2 & mini (figura 4), in questo modo sarà possibile programmare il modulo.




Shield con sensore DHT11

Tra i molti modelli di shield realizzati appositamente per il modulo WeMos D1 mini troviamo il Wemos DHT Shield che utilizza il sensore di umidità e temperatura DHT11, il sensore è calibrato dal costruttore e non richiede componenti aggiuntivi, è in grado di misurare la temperatura in una gamma compresa tra 0°C e +60°C con una precisione di ±2°C e l'umidità in una gamma compresa tra ±20% RH e 90%RH con una precisione di ± 5RH.



                    Vista frontale dello shield DHT11                                                     Vista posteriore dello shield DHT11

Sullo shield il DHT11 viene utilizzato come modulo già provvisto di resistenza e collegabile direttamente a vdd o 3v3, i dati del sensore sono letti tramite interfaccia One-Wire.


         Bustina antistatica contenente lo shield                                            Contenuto della bustina antistatica

Caratteristiche dello shield DHT11:

• Alimentazione da 3,3Vcc a 5Vcc
• 50uA di assorbimento a riposo e 1,5mA di assorbimento durante la misura
• Misura temperature da -40°C a +80°C (precisione +/-0,5°C, misura tassi di umidità compresi tra o%RH e 100%RH (precisione +/-2%RH)
• Uscita del sensore già connessa al pin D4 della Wemos D1 Mini

                                                                                   Shield con connettori montati

Per la lettura dei dati del sensore DHT11, occorre, se non lo si è mai utilizzato caricare l'apposita libreria, per cui andare al menu Sketch -> #includi libreria -> Gestione librerie.


Ricercare dth e installare la libreria DHT sensor library By Adafruit, per il funzionamento occorre anche installare la libreria Adafruit_Sensor

Le due librerie sono scaricabili dai seguenti link:

https://github.com/adafruit/DHT-sensor-library


Esempio di utilizzo del sensore

In questo esempio utilizziamo il modulo WeMos D1 mini per leggere i dati di temperatura ed umidità forniti dallo shield sensore DHT11 e nvieremo i dati sul canale Thinkspeak che è una piattaforma internet che consente di raccogliere e memorizzre i dati del sensore nel cloud e di sviluppare applicazioni IoT.

La piattaforma ThingSpeak IoT fornisce la possibilità di visualizzare i dati in MATLAB e quindi eseguire, in una seconda fase una eventuale manipolazione dei dati raccolti.

Per collegare il sensore sarà sufficiente collegare tra loro i due moduli come visibile nella foto, automaticamente il sensore DHT11 sarà collegato: Pin 1 al pin 3,3V, Pin 2 al pin D4 del modulo Wemos D1 Mini, il Pin 4 a GND.




Ora dovremo crearci un account sul sito web di thingspeak – https://thingspeak.com. inserendo le informazioni nell'apposita maschera


Una volta creato l'account dovremo configurare un canale dove visualizzare i dati pubblicati dal nostro dispositivo e creeremo due campi, uno per la Temperatura e l'altro per l'Umidità rilevati dal nostro sensore DHT11, la schermata apparirà come segue:


Per l'invio dei dati dobbiamo caricare un'apposita libreria per cui andare al menu Sketch-> #includi libreria -> Gestione librerie e ricercare "ThingSpeak" e installare la libreria.


Sketch del programma

Quindi caricare il programma seguente in cui dovremmo inserire alcuni campi specifici per la vostra applicazione.


Programma wemos_d1_mini_dht11.ino


String apiKey = "xxxxx"; Il valore si trova della Chiave API di scrittura è fornita dal sito ThingSpeak




Perconst char* ssid = "xxxxx";

const char* password = "xxxxx"; I valori da inserire sono il nome del vostro Router e la relativa password.


/*
wemos_d1_mini_dht11.ino
In questo esempio utilizziamo il modulo WeMos D1 mini
per leggere i dati di temperatura ed umidità forniti
dallo shield sensore DHT11 e invieremo i dati sul canale
Thinkspeak, che è una piattaforma Internet che consente
di raccogliere e memorizzare i dati del sensore nel cloud
e di sviluppare applicazioni IoT.
Sono utilizzati i seguenti pin
Pin +3.3V -> Alimentazione shield DHT11
Pin GND -> GND shield DHT11
Pin Digital D4 -> ingresso dati DHT11
Creato il 10/8/2017 da Adriano Gandolfo
This example code is in the public domain.
*/
#include <DHT.h>
#include <ESP8266WiFi.h>
// Inserire la chiave API del proprio canale, il nome
// del proprio SSID con relativa password
String apiKey = "xxxx";
const char* ssid = "xxxx";
const char* password = "xxxx";
const char* server = "api.thingspeak.com";
#define DHTPIN D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
void setup()
{
Serial.begin(115200);
delay(10);
dht.begin();
WiFi.begin(ssid, password);
Serial.println();
Serial.println();
Serial.print("Connessione ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connessa");
}
void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
Serial.println("Fallito lettura dati da sensore DHT!");
return;
}
if (client.connect(server, 80)) {
String postStr = apiKey;
postStr += "&field1=";
postStr += String(t);
postStr += "&field2=";
postStr += String(h);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" °C Humidità ");
Serial.print(h);
Serial.println("Invio dati a Thingspeak");
}
client.stop();
Serial.println("Attesa di 20 sec");
// thingspeak richiede almeno un ritardo di 15 secondi
// tra gli aggiornamenti, 20 secondi per essere sicuri
delay(20000);



Dopo qualche minuto di funzionamento del nostro dispositivo, potremo vedere riportate nel nostro canale i risultati della lettura del nostro canale.


Wemos D1 Mini e sensore TSL2561

Il di luminosità TSL2561 è un sensore avanzato per il controllo della luminosità in modalità digitale ideale per essere utilizzato in una vasta gamma di condizioni di luce, rispetto alle fotoresistenze questo sensore è più preciso e consente di misurare direttamente in lux e può essere configurato per differenti range di misura in modo da rilevare una vasta gamma di condizioni di luminosità (da 0,1 a 40.000 lux), inoltre questo sensore è in grado di vedere sia la luce visibile sia l'infrarosso consentendo la misura separata di entrambe le intensità

Il sensore si collega alla Wemos D1 Mini tramite una interfaccia I2C, possiede 3 indirizzi che permettono di gestire 3 sensori e all'interno è presente un convertitore ADC, l'assorbimento di corrente è estremamente contenuto: circa 0,5mA durante la misura e meno di 15uA a riposo.



                                                                     Connessioni da effettuare sulla breadboard


                                                                 Immagine dei collegamenti sulla breadboard


Lista delle connessioni:

Pin WeMos D1 Mini

Pin Sensore TSL2561

D2

SDA

D1

SCL

+ 3.3V

VCC

GND

GND

                                                                    

Nel programma di test il valore della luminosità viene mostrato all'interno della finestra del Monitor seriale, la lettura è effettuata ogni 250mS.

I pin SCL e SDA del sensore sono collegati rispettivamente a D1 e D2 del modulo Wemos D1 Mini e gestiti dalla libreria Wire.

Programma di test


/*

  wemos_d1_mini_TSL2561.ino
  In questo esempio utilizziamo il modulo WeMos D1 mini
  per leggere i dati di luminosità forniti
  dal sensore TSL2561.
  Sono utilizzati i seguenti pin
  Pin +3.3V   -> Alimentazione TSL2561
  Pin GND     -> GND TSL2561
  Pin D1      -> pin SCL TSL2561
  Pin D2      -> pin SDA TSL2561
  Creato il 14/8/2017 da Adriano Gandolfo
  This example code is in the public domain.
*/
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_TSL2561_U.h>
Adafruit_TSL2561_Unified tsl = Adafruit_TSL2561_Unified(TSL2561_ADDR_FLOAT, 12345);
void setup(void)
{
  Serial.begin(9600);
  Serial.println("Test sensore TSL2561");
  Serial.println("");
  /* Iinzializzazione sensore */
  if (!tsl.begin())
  {
    Serial.print("TSL2561 non trovato");
    while (1);
  }
  tsl.enableAutoRange(true);
  tsl.setIntegrationTime(TSL2561_INTEGRATIONTIME_13MS);
  Serial.println("");
}
void loop(void)
{
  /* Get a new sensor event */
  sensors_event_t event;
  tsl.getEvent(&event);
  /* Mostra il risultato (luce misurata in lux) */
  if (event.light)
  {
    Serial.print(event.light);
    Serial.println(" lux");
  }
  else
  {
    Serial.println("Sensore fuoriscala");
  }
  delay(250);
}

Tutti i prodotti Wemos sono disponibili da homotix

 

Autore Gandolfo Adriano