Arduino+DHT11+BMP180+Oled display i2c sh1106 con schermate che si alternano
In questo progetto ho realizzato una piccola weather station con Arduino nano ed i
sensori DHT11 e BMP180,visualizzando in modo alternato sul display Oled SH1106 da 1.3" le misurazioni rilevate.
Ecco le due schermate che si alternano.
Di seguito lo schema di montaggio
con la nostra solita breadboard,
arduino nano ed i due sensori collegati al nostro display oled.
Collegamenti elettrici tramite cavetti dupont.
SDA=pin A4 arduino cavo bianco
SCK=pin A5 arduino cavo verde
Sensore BMP180 Vcc=pin 5V arduino cavo rosso
GND=pin GND arduino cavo nero
Vcc=pin 5V arduino cavo rosso
Sensore DHT11 OUT= pin D2 arduino cavo giallo
GND=pin GND arduino cavo nero
GND=pin GND arduino cavo nero
VCC=pin 5V arduino cavo rosso
Display oled sh1106 SDA=pin A4 arduino cavo bianco
SCK=pin A5 arduino cavo verde
Lo sketch da caricare:
/*weather station ARDUINO realizzata con sensore di temperatura dht11 e sensore di pressione bmp180
con oled sh1106 e schermate che si alternano
*/
#include <DHT.h>
#include <Adafruit_SH1106.h>
#include <Adafruit_BMP085.h>
#define DHTPIN 2// definisco il numero di pin del sensore dht11
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SH1106 display(OLED_RESET);
//creo do un nome al sensore barometrico
Adafruit_BMP085 BMP180;
// definisco il tipo di sensore dht utilizzato
#define DHTTYPE DHT11 // DHT 11
// Initialize DHT sensor for normal 16mhz Arduino:
DHT dht = DHT(DHTPIN, DHTTYPE);
unsigned long time = 0 ;
unsigned long ciclo = 2000;//tempo di visualizzazione delle schermate
byte page = 0;
//================================================
// SETUP
//================================================
void setup() {
display.begin(SH1106_SWITCHCAPVCC, 0x3C);// Connect to oled via I2C, default address 0x3c
display.display();
delay(1500);
display.clearDisplay();
display.setTextColor(WHITE);
BMP180.begin();
dht.begin(); //inizializziamo i sensori
// Initiate the oled:
display.setTextSize(1, 2);
display.setCursor(0, 1);
display.print(" Weather Station");
display.setTextSize(1);
display.setCursor(15, 20);
display.print(" ARDUINO");
display.setTextSize(1);
display.setCursor(0, 30);
display.print(" by");
display.setTextSize(2);
display.setCursor(0, 45);
display.print(" LabCippo");
display.display();
delay(5000);
display.clearDisplay();
}
//================================================
// LOOP
//================================================
void loop() {
display.clearDisplay();
// Read the humidity in %:
float h = dht.readHumidity();
// Read the temperature as Celsius:
float t = dht.readTemperature();
// Read the temperature as Fahrenheit:
float f = dht.readTemperature(true);
// Compute heat index in Fahrenheit (default):
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius:
float hic = dht.computeHeatIndex(t, h, false);
if (millis() - time > ciclo) //opzioni visualizazione schermate
{
switch (page) {
case 0: // schermata 1 lettura temperatura e umidità dal sensore dht11
// display temperature
display.clearDisplay();
display.setTextSize(1);
display.setCursor(1, 0);
display.print(" Temperatura:");
display.setTextSize(2);
display.setCursor(20, 15);
display.print(t);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
// display humidity
display.setTextSize(1);
display.setCursor(0, 35);
display.print(" Umidita:");
display.setTextSize(2);
display.setCursor(20, 50);
display.print(h);
display.print(" %");
display.display();
break;
case 1: //schermata 2 lettura sensore bmp180
// schermata 3 lettura sensore bmp180
display.clearDisplay();
display.setTextSize(1);
display.setCursor(1, 0);
display.print("PRESSIONE.ATM: ");
display.setTextSize(2);
display.setCursor(10, 15);
display.print(BMP180.readPressure());
display.print(" PA");
display.setTextSize(1);
display.setCursor(1, 35);
display.print("ALTITUDE:");
display.setTextSize(2);
display.setCursor(15, 50);
display.print(BMP180.readAltitude(101500));
display.print(" Mt");
display.display();
}
time = millis();
page++;
if (page > 2) page = 0; // il num 2 indica le pagine da visualizzare,lo incremento se aggiungo pagine
}
}
😃