52- esp8266 e dht11- umidita’ e temperatura inviati in...

9
// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak 52- ESP8266 e DHT11- umidita’ e temperatura inviati in rete humidity and temperature sent on web (some notes at section end) Il modulo ESP8266 L’adattatore di alloggiamento ESP8266 e’ un chip dotato di un microprocessore con: circa 160 kbyte di RAM (64 dei quali riservati alle istruzioni), una memoria flash da 512 kbyte (e fino a 4 mega byte, in funzione del modello), funzioni aggiuntive, tra le quali 16 pin GPIO e gestione di svariati protocolli di comunicazione un firmware in grado di gestire la connessione WIFI e i comandi AT Il chip e’ disponibile anche montato su di una basetta dotata di porte per l’alimentazione, la gestione delle comunicazioni seriali e per altre funzioni. Due di queste sono porte GPIO, alle quali possono essere collegati eventuali sensori o attuatori. Il chip e’ programmabile esattamente come e’ programmabile Arduino (tramite l’IDE opportunamente attrezzata) e pertanto puo’ essere utilizzato anche stand alone, senza cioe’ il collegamento con Arduino. Il chip necessita di un’alimentazione da 3,3 volt ed assorbe fino ad 80 milliampere. Arduino e’ in grado di erogare al massimo 50 milliampere ma i test di un’alimentazione diretta, da arduino al modulo ESP8266, effettuati piu’ volte, non hanno evidenziato particolari problemi. In questo progetto e nel relativo filmato Il modulo ESP8266 e’ montato su di un adattatore alimentato a 5 volt. Il progetto puo’ comunque essere replicato collegando direttamente il modulo ad Aduino. I comandi AT Il modulo e’ pilotato da Arduino tramite una connessione seriale sulla quale vengono fatti transitare dei comandi di tipo AT. Un interessante tutorial sull’utilizzo del modulo ESP8266 e dei comandi AT e’ reperibile qui: http://www.mauroalfieri.it/elettronica/esp8266-arduino-comandi-at.html thingspeak.com Il collegamento ad internet e’ finalizzato alla segnalazione di dati (ad esempio temperatura, umidita’ ed altre amenita’ del genere) o al rilevamento di dati segnalati da altri. I dati, una volta inviati in rete, devono quindi essere registrati da qualche parte, al fine di consentirne la successiva rilevazione. Alcuni siti, come thingspeak.com, compiono esattamente questa attivita’ per cui, prima di iniziare a costruire il sistema, e’ necessario aprire un account (gratuito) su thingspeak.com e, all’interno di questo account, almeno un canale sul quale registrare i dati. La connessione ad internet Per connettere Arduino al router e poi a thingspeak bisogna inserire nel programma: L’SSID del router: normalmente presente sull’etichetta incollata sotto il router La password del router: normalmente riportata nella medesima etichetta di cui sopra L’indirizzo IP di thingspeak.com: 184.106.153.149 La chiave di scrittura (se il programma prevede di segnalare degli eventi): fornita da thingspeak nel momento in cui si apre il canale La chiave di lettura (se il programma prevede di rilevare gli eventi), fornita da thingspeak nel momento in cui si apre il canale

Upload: phungtram

Post on 16-Feb-2019

230 views

Category:

Documents


0 download

TRANSCRIPT

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

52- ESP8266 e DHT11- umidita’ e temperatura inviati in rete – humidity and temperature sent on web (some notes at section end)

Il modulo ESP8266

L’adattatore di alloggiamento

ESP8266 e’ un chip dotato di un microprocessore con:

circa 160 kbyte di RAM (64 dei quali riservati alle istruzioni),

una memoria flash da 512 kbyte (e fino a 4 mega byte, in funzione del modello),

funzioni aggiuntive, tra le quali 16 pin GPIO e gestione di svariati protocolli di comunicazione

un firmware in grado di gestire la connessione WIFI e i comandi AT

Il chip e’ disponibile anche montato su di una basetta dotata di porte per l’alimentazione, la gestione delle comunicazioni seriali e per altre funzioni.

Due di queste sono porte GPIO, alle quali possono essere collegati eventuali sensori o attuatori. Il chip e’ programmabile esattamente come e’ programmabile Arduino (tramite l’IDE opportunamente attrezzata) e pertanto puo’ essere utilizzato anche stand alone, senza cioe’ il collegamento con Arduino. Il chip necessita di un’alimentazione da 3,3 volt ed assorbe fino ad 80 milliampere. Arduino e’ in grado di erogare al massimo 50 milliampere ma i test di un’alimentazione diretta, da arduino al modulo ESP8266, effettuati piu’ volte, non hanno evidenziato particolari problemi. In questo progetto e nel relativo filmato Il modulo ESP8266 e’ montato su di un adattatore alimentato a 5 volt. Il progetto puo’ comunque essere replicato collegando direttamente il modulo ad Aduino. I comandi AT Il modulo e’ pilotato da Arduino tramite una connessione seriale sulla quale vengono fatti transitare dei comandi di tipo AT. Un interessante tutorial sull’utilizzo del modulo ESP8266 e dei comandi AT e’ reperibile qui: http://www.mauroalfieri.it/elettronica/esp8266-arduino-comandi-at.html thingspeak.com Il collegamento ad internet e’ finalizzato alla segnalazione di dati (ad esempio temperatura, umidita’ ed altre amenita’ del genere) o al rilevamento di dati segnalati da altri. I dati, una volta inviati in rete, devono quindi essere registrati da qualche parte, al fine di consentirne la successiva rilevazione. Alcuni siti, come thingspeak.com, compiono esattamente questa attivita’ per cui, prima di iniziare a costruire il sistema, e’ necessario aprire un account (gratuito) su thingspeak.com e, all’interno di questo account, almeno un canale sul quale registrare i dati. La connessione ad internet Per connettere Arduino al router e poi a thingspeak bisogna inserire nel programma:

L’SSID del router: normalmente presente sull’etichetta incollata sotto il router

La password del router: normalmente riportata nella medesima etichetta di cui sopra

L’indirizzo IP di thingspeak.com: 184.106.153.149

La chiave di scrittura (se il programma prevede di segnalare degli eventi): fornita da thingspeak nel momento in cui si apre il canale

La chiave di lettura (se il programma prevede di rilevare gli eventi), fornita da thingspeak nel momento in cui si apre il canale

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

Questo progetto Questo progetto rileva la temperatura e l’umidita’ ambientale e la invia ogni minuto a thingspeak.com. Il filmato del progetto e’ reperibile qui. Per replicare il progetto non e’ necessario disporre ne’ dell’adattatore per il modulo ESP8266 ne’ del display 1602. In quest’ultimo caso la successione degli eventi puo’ essere seguita sul monitor seriale sostituendo, nel programma l’istruzione: # define traccia 0 con #define traccia 1. Il modulo ESP8266 utilizzato in questo progetto usa una connessione seriale a 115200 baud ed anche la connessione seriale con il monitor di sistema e’ stata impostata su 115200 baud. Questo significa che per poter visualizzare i dati e’ necessario selezionare detta velocita’ nell’apposita casella, situata nell’ultima riga del monitor seriale. Prima di procedere alla compilazione del programma devono essere installate, se non gia’ presenti, le seguenti librerie:

LiquidCrystal_I2C.h reperibile qui

DHT.h reperibile qui

Per installare le librerie e’ necessario:

Fare il download della libreria in formato compresso

installare la nuova libreria andando in IDE-> sketch-> includes Library-> add .zip library

verificare l’avvenuta installazione (andando in IDE-> sketch-> includes Library-> Contributed library)

In particolare, per installare la libreria DHT.h

Collegarsi al sito delle librerie (vedi sopra)

Scaricare le librerie premendo il bottone “download ZIP” (sulla destra dello schermo)

Disimpaccare il file e ottenere una cartella con decine di librerie, tra cui la libreria DHTlib che a sua volta contiene una cartella example, e tre files: dht.cpp e dht.h ed un readme

Rinominare in “DHT” la libreria “DHTlib”

Installare la libreria DHT nella libreria di arduino (IDE->sketch->importa libreria->add library ->indirizzo della nuova libreria DHT->apri)

Nota: Questo esercizio e questa nota sono parte di una serie che vede protagonisti Arduino ed alcuni dei componenti ad esso collegabili. Per la maggior parte degli esercizi e’ anche disponibile un filmato su youtube.

Esercizi facenti parte della raccolta

Filmati presenti su youtube

Informazioni su arduino e sui componenti collegabili (PDF scaricato nell’area di download)

Breve manuale di programmazione (PDF scaricato nell’area di download) Per eventuali chiarimenti o suggerimenti sul contenuto di questa scheda scrivere a [email protected]

Here some notes about this project, translated by google translator ESP8266 is a chip equipped with a microprocessor with:

approximately 160 kbyte RAM (64 of which are reserved for instructions),

512 kbyte flash memory (up to 4 mega bytes, depending on model),

Additional functions, including 16-pin GPIO,

A firmware, capable to manage WIFI connection and AT commands

Chip is normally available mounted on a base equipped with some pins, used for

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

power supply, communication, and other functions. Two of these pins are GPIO pins, to which any sensors or actuators can be connected. ESP8266 can be programmed exactly as Arduino (through the appropriately equipped IDE) and can therefore be used stand alone. Chip needs a 3.3 volt power supply and absorbs up to 80 milliampers. Arduino is capable to deliver a maximum of 50 milliampers but some tests, carried out several times, did not show any particular problems in using arduino as power source for ESP8266. In this project the ESP8266 module is mounted on a 5 volt powered adapter. The project can also be replicated by directly linking the module to Arduino (and 3.3 volt power, of course) The AT commands The module is drived by Arduino via a serial connection on which AT type commands are transmitted. An interesting tutorial on ESP8266 and AT commands is available here: http://www.mauroalfieri.it/elettronica/esp8266-arduino-comandi-at.html thingspeak.com The internet connection is aimed at sending data on web (such as temperature, humidity, and other similarities) or at reading data reported by others. The data, once sent on web, must be recorded somewhere in order to allow subsequent detection. Some sites, such as thingspeak.com, do exactly this activity, so before you begin the system builds, you need to open a free account on thingspeak.com and within this, at least one channel on which your data will be recorded. The internet connection To connect Arduino to router and thingspeak you must specialize the program with:

Router SSID: Normally present on the label glued below the router

Router password: normally listed in the same label as above

The thingspeak.com IP address: 184.106.153.149

The write key (if the program will send data on web): provided by thingspeak during channel opening

The read key (if the program will read data from web), provided by thingspeak during channel opening

This project This project detects, every minute, the envirnment temperature and humidity and sends them to thingspeak.com. The project movie is available here. To replicate the project you do not need to have either the adapter for ESP8266 module nor the 1602 lcd display. In the latter case, track will be show on serial monitor by replacing, the statement: # define traccia 0 with #define traccia 1. The ESP8266 module uses a serial connection at 115200 baud and also the system monitor serial connection has been set to 115200 baud. This means that, in order to see data, you must select that speed in the box located in the last row of serial monitor. Before proceeding to program compilation must be installed, if not already done, the libraries:

LiquidCrystal_I2C.h found here

DHT.h found here

For library installation:

library download in compressed form;

Installation via IDE-> sketch-> includes Library-> add .zip library

After installation please verify the library. It must be present in IDE-> sketch-> includes Library-> Contributed library

Specifically, to install the DHT.h library

Connect to library repository (see link above)

Download library by pressing the "ZIP download" button (on the right of the screen)

Unpack and get a folder with dozens of libraries, including the DHTlib library that in turn contains an example folder, and three files: dht.cpp and dht.h and a readme

Rename the "DHTlib" library to "DHT"

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

Install the DHT library in the arduino library (IDE-> sketch-> import library-> add library -> address of the new DHT library-> open)

Note: This project and this note is part of a series that sees, as main characters, Arduino and some of connectable components. For most projects there is also a video on youtube.

Projects collection

Movies on youtube

About Arduino and components (italian; pdf will be downloaded in your download area

Quick programming guide (almost english; pdf will be downloaded in your download area) For any questions or suggestions about this note (and on its english translation), please write to [email protected] (simple words and short sentences, please)

Materiali Un modulo ESP8266-01

Un adattatore a 5 volt per ESP826601 (opzionale)

Un modulo DHT11

Un display LCD 1602 con I2C (opzionale)

Schemi Esp8266 montato su di un adattatore a 5 volt – ESP8266 and 5 vcc adapter

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

ESP8266 senza adattatore a 5 volt - ESP8266 without 5 vcc adapter

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

Programma /* Attenzione: facendo il copia/incolla dal PDF all’IDE si perde la formattazione del testo. Per

* rendere piu’ facilmente leggibile il programma e’ opportuno formattarlo subito dopo il

* trasferimento nell’IDE, premendo CTRL+T.

* Questo programma rileva umidita' e temperatura e, ogni minuto, le invia in rete per la

* registrazione su di un canale di thingspeak.com

-------------------------------------------------------------------------------------------------

* Warning: cut&paste from PDF to IDE loses formatting. To restore it press CTRL + T.

* This program detects moisture and temperature and, every minute, sends it on web for recording on

* a thingspeak.com channel

*/

#include <SoftwareSerial.h>

#include <Wire.h>

#include <dht.h> // richiama la libreria DHT

#include <LiquidCrystal_I2C.h> // libreria di gestione del display lcd

// ....................addr en,rw,rs,d4,d5,d6,d7,bl,blpol

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // definisce la tipologia del display

dht DHT;

int chk; // variabile di memorizzazione del risultato della lettura

#define DHT11_PIN 11

#define traccia 1 // 1 espone traccia su monitor seriale,0 non espone traccia su monitor seriale

SoftwareSerial esp8266 (5, 4); // RX, TX

String rete = "InfostradaWiFi-62738c"; // codice SSID del router - Access point

String password = "518b7815782fd"; // password di accesso al router - Access Point password

#define IP "184.106.153.149" // indirizzo di thingspeak.com - thingspeak.com IP address

String GET = "GET /update?key=********"; // chiave di scrittura su thingspeak.com – write

// key on thingspeak.com

int semaforo = 0; // 1 = inizializzazione ok, 0 = inizializzazione ko

float momentoattuale = 0;

float momentoinvio = 0;

float momentodisplay = 0;

int umidita = 0;

int temperatura = 0;

//-------------------------------------------------------------------------------------

// Routine di connessione al router wifi - connection to wifi access point routine

//-------------------------------------------------------------------------------------

bool connessionewifi()

{

if (traccia)

Serial.println("connessione wifi");

lcd.clear ();

lcd.print ("conn. al router ");

String cmd = F("AT+CWJAP=\"");

cmd += rete;

cmd += F("\",\"");

cmd += password;

cmd += F("\"");

if (traccia)

Serial.println (cmd);

delay (200);

esp8266.println(cmd);

delay(10000);

semaforo = 1;

if (esp8266.find("OK"))

{

if (traccia)

Serial.println("Connesso al router"); // connected

lcd.clear ();

lcd.print ("router connesso");

delay (2000); //due secondi per lettura messaggio su display lcd

}

else

{

if (traccia)

Serial.println("apparentemente non connesso"); // seemly not connected

lcd.clear ();

lcd.print ("conn. incerta");

delay (2000); // attende due secondi per consentire la lettura del messaggio su display lcd

}

}

//-------------------------------------------------------------------

// imposta utilizzo in scrittura - setting esp8266 routine

//-------------------------------------------------------------------

bool impostascrittura()

{

esp8266.println(F("AT+CWMODE=1")); // comando di impostazione

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

if ((esp8266.find("OK")) || (esp8266.find("NO CHANGE")))

{

if (traccia)

Serial.println("impostazione ok"); // set ok

lcd.clear ();

lcd.print ("impostazione ok");

}

else

{

if (traccia)

Serial.println("impostazione ko"); // set ko

lcd.clear ();

lcd.print ("impostazione ko");

}

}

//-------------------------------------------------------------------

// inizializzazione del modulo esp8266 - reset esp8266 routine

//------------------------------------------------------------------

void inizializzaesp8266()

{

if (traccia)

Serial.println("inizializza esp8266");

lcd.clear();

lcd.print ("attiva esp8266");

esp8266.flush();

delay (200);

esp8266.println(F("AT+RST")); // invia il comando di reset - send reset command

delay(7000);

if (esp8266.find("OK"))

{

if (traccia)

{

Serial.println("inizializzazione OK");

Serial.println("imposta modalita' scrittura");

}

lcd.clear ();

lcd.print ("attivazione OK");

lcd.setCursor (0, 1);

lcd.print ("imposta modo 1");

delay (2000); // attende 2 secondi per consentire la lettura del messaggio su lcd

esp8266.flush();

delay (200);

impostascrittura();

delay(5000);

esp8266.flush();

delay (200);

connessionewifi(); // connessione al router

}

else

{

if (traccia)

Serial.println("inizializzazione fallita"); // initialize failed

lcd.clear ();

lcd.print ("attivazione KO");

delay (2000); // attende due secondi per consentire la lettura del messaggio su display lcd

momentoinvio = momentoinvio - 60000; // forza la ripetizione dell'attivazione

}

}

//-------------------------------------------------------------------

// invio dei dati a thingspeak.com - send data to thingspeak.com outine

//-------------------------------------------------------------------

void aggiorna()

{

String cmd = "AT+CIPSTART=\"TCP\",\"";

cmd += IP;

cmd += "\",80";

if (traccia)

Serial.println (cmd);

esp8266.println(cmd);

lcd.clear ();

lcd.println ("invio dati "); // Send data

delay(5000);

if (esp8266.find("Error"))

{

if (traccia)

Serial.println("invio ko");

lcd.clear ();

lcd.print ("invio KO");

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

delay (2000); // attende due secondi per consentire la lettura del messaggio su display LCD

return;

}

cmd = GET + "&field1=" + temperatura + "&field2=" + umidita + "\r\n";

if (traccia)

Serial.print("AT+CIPSEND=");

esp8266.print("AT+CIPSEND=");

if (traccia)

Serial.println(cmd.length());

esp8266.println(cmd.length());

delay(10000);

if (esp8266.find(">"))

{

if (traccia)

Serial.print(cmd);

esp8266.print(cmd);

if (traccia)

Serial.println("invio ok");

lcd.clear ();

lcd.print ("invio OK");

delay (2000); // attende due secondi per consentire la lettura del messaggio su display lcd

}

else

{

lcd.clear ();

lcd.print ("invio KO");

delay (2000); // attende due secondi epr consentire la lettura del messaggio su display lcd

if (traccia)

Serial.println("AT+CIPCLOSE");

esp8266.println("AT+CIPCLOSE");

if (traccia)

Serial.println("connessione chiusa"); // connection closed

lcd.clear ();

lcd.print ("chiusa conness.");

delay (2000); // attende 2 secondi per consentire la lettura del messaggio su display lcd

}

}

//

//

void setup()

{

lcd.begin(16, 2);

if (traccia)

Serial.begin(115200);

Serial.println ("buongiorno"); // goodday

lcd.clear ();

lcd.print ("buongiorno");

delay (2000);

esp8266.begin(115200); // imposta la velocita' della connessione con il modulo esp8266 –

// Setting softserial baud rate to 115200

}

//

//

void loop()

{

momentoattuale = millis ();

if ((momentoattuale - momentodisplay) > 5000) // se sono passati piu' di 5 secondi dall'ultima

// rilevazione della temperatura - every 5 seconds

{

momentodisplay = momentoattuale; // memorizza il momento

if (traccia)

Serial.print("DHT11, ");

int chk = DHT.read11(DHT11_PIN); // legge i valori forniti dal sensore - Read data from DHT11

if (traccia)

{

Serial.print (chk);

Serial.print (" ");

}

switch (chk)

{

case DHTLIB_OK:

if (traccia)

Serial.println("OK,\t");

break;

case DHTLIB_ERROR_CHECKSUM:

if (traccia)

Serial.println("errore di trasmissione,\t");

// Arduino: ESP8266 - IoT, umidita’ e temperatura sul web – moisture and temperature on web //DHT11, internet delle cose, internet of things, esp8266-01, thingspeak

break;

case DHTLIB_ERROR_TIMEOUT:

if (traccia)

Serial.println("Timeout,\t");

break;

default:

if (traccia)

Serial.println("errore sconosciuto,\t");

break;

}

temperatura = DHT.temperature, 0;

umidita = DHT.humidity, 0;

// ************* display dei dati su lcd ********************

lcd.clear ();

lcd.setCursor(0, 0);

lcd.print("Temperatura: ");

lcd.print (temperatura);

lcd.print(" C");

lcd.setCursor(0, 1);

lcd.print("umidita: ");

lcd.print(umidita);

lcd.print(" %");

// ************ display dei dati su monitor seriale ***************

if (traccia)

{

Serial.print("Temperatura: ");

Serial.print(temperatura);

Serial.println(" C");

Serial.print("Umidita: ");

Serial.print(umidita);

Serial.println(" %");

}

}

if ((momentoattuale - momentoinvio) > 60000) // Se e' passato piu' di un minuto dall'ultimo invio

// in rete - every 60 seconds

{

momentoinvio = momentoattuale;

semaforo = 0;

inizializzaesp8266();

if (semaforo == 1)

aggiorna(); // send data on web

}

}