Categories:

Centralina meteo – Codice in C

include <LedKey.h>

define SEALEVELPRESSURE_HPA (1013.25) // definisce la pressione al livello del mare

include <Adafruit_Sensor.h>

include <Adafruit_BME280.h>

include <Wire.h>

include <LiquidCrystal_I2C.h>

// Librerie per la connessione alla rete via WiFi

define BLYNK_NO_INFO

//#define BLYNK_NO_BUILTIN
//#define BLYNK_PRINT Serial // definisce l’output di Blynk su monitor seriale

define REFRESH_TIME 5000 // intervallo di tempo di lettura dei dati sal sensore

define ESP8266_BAUD 9600 // Velocità di comunicazione seriale con ESP8266

include <ESP8266_Lib.h> // libreria di gestione di ESP8266-01

include <BlynkSimpleShieldEsp8266.h> // libreria di Blynk con connessione seriale con ESP8266-01

include <SoftwareSerial.h> // libreria generica per la comunicazione seriale da pin diversi da 0 e 1

include <TimeLib.h> // libreria che mantiene data e ora

include <WidgetRTC.h> // libreria per sincronizzare data e ora con il server Blynk

// creazione degli oggetti necessari
LiquidCrystal_I2C lcd(0x27, 20, 4); // visore LCD 20×4 con interfccia I2C – indirizzo 0x27
WidgetRTC rtc; // oggetto per la gestione via Blynk di data e ora reali
Adafruit_BME280 bme; // oggetto che rappresenta il sensore BME280

// dati sensore
int temperatura;
int umidita;
int pressione;
int altitudine;

// Codice di autorizzazione (Auth Key) ottenuta dall’applicazione creata con l’app su cellulare
const char auth[] = “”;

// Profilo di accesso alla rete WiFi: SSID e password
const char ssid[] = “”; // inserire qui il nome SSID dell’hotspot WiFi a cui connettersi
const char pass[] = “”; // password di connessione all’hotspot WiFi a cui connettersi

SoftwareSerial EspSerial(8, 9); // canale di comunicazione con ESP8266 – pin 8 pin TX di ESP – pin 9 pin RX di ESP
ESP8266 wifi(&EspSerial); // oggetto per la modalità di connessione WiFi di Blynk con la rete

timer timer1(REFRESH_TIME); // oggetto timer per il refresh dei dati letti dal sensore

void setup() {
// inizializzazzione interfaccia seriale
Serial.begin(ESP8266_BAUD);
// inizializzazione schermo LCD
lcd.begin();
lcd.backlight();
// inizializzazione sensore BME280
bme.begin(0x76);
// Imposta la velocità e apre un canale con ESP8266
delay(10);
EspSerial.begin(ESP8266_BAUD);
// Attiva la connessione con il server di Blynk
connessione();
// imposta il timer id aggiornamento del display LCD a 5 secondi
timer1.start();
// imposta l’intervallo di aggiornamento di ora e data
setSyncInterval(30);
}

void loop() {
// sincronizzazione continua con il server di Blynk
if (Blynk.connected()){
Blynk.run();
// aggiornamento dati sensore ogni 5 secondi
if (timer1.isTimeout()){
letturaDatiSensore();
timer1.start();
}
} else {
connessione();
delay(REFRESH_TIME);
}
}

void connessione(){
lcd.clear();
lcd.print(F(“Connessione…”));
delay(10);
Blynk.begin(auth, wifi, ssid, pass);
lcd.clear();
lcd.print(F(“Connesso a “));
lcd.setCursor(0,1);
lcd.print(ssid); }
//procedura di lettura dati aggiornamento del display LCD e invio dei dati al server*/
void letturaDatiSensore(){
// lettura dati del sensore BME280
temperatura=(int)round(bme.readTemperature());
pressione=(int)round(bme.readPressure()/100.0);
altitudine=(int)round(bme.readAltitude(SEALEVELPRESSURE_HPA));
umidita=(int)round(bme.readHumidity()); // data e ora di lettura
char ultimaRilevazione[18];
sprintf(ultimaRilevazione,”%02d:%02d – %02d/%02d/%4d”,hour(),minute(),day(),month(),year()); // visualizzazione dati sul display LCD
lcd.clear();
lcd.setCursor(0,0);
lcd.print(F(“Temperatura “));
lcd.print(temperatura);
lcd.print(F(” “));
lcd.write(0xDF);
lcd.print(F(“C”));
lcd.setCursor(0,1);
lcd.print(F(“Pressione “));
lcd.print(pressione);
lcd.print(F(” hPa”));
lcd.setCursor(0,2);
lcd.print(F(“Umidita’ “));
lcd.print(umidita);
lcd.print(F(” %”));
lcd.setCursor(0,3);
lcd.print(F(“Altitudine “));
lcd.print(altitudine);
lcd.print(F(” m”)); // push dati letti su Blynk
Blynk.virtualWrite(V0, temperatura);
Blynk.virtualWrite(V1, altitudine);
Blynk.virtualWrite(V2, pressione);
Blynk.virtualWrite(V3, umidita);
Blynk.virtualWrite(V4, String(ultimaRilevazione));
}

BLYNK_CONNECTED() {
// sincronizza data e ora alla connessione
setSyncInterval(1);
rtc.begin();
}

Codice in C

Per permettere il funzionamento del circuito, è necessario integrare in Arduino la libreria di seguito disponibile per il download:


Tags: