Dual i2c Oled display with Arduino Mega 2560 with sensor DHT11 and MQ135
In questo progetto visualizzeremo temperatura umidità e qualità dell'aria su due display oled connessi ad arduino mega con sensori DHT11 e MQ135.Sul primo display quindi avremo le letture del sensore DHT11,mentre sul secondo display le letture del sensore MQ135.
Importante è che i due display abbiano due indirizzi i2c differenti nel mio caso
sono 0x3C e 0x3D.Su google trovate facilmente le guide per poter cambiare indirizzo ad un display oled(bisogna agire su di un ponticello posto sul retro del display).
Questo è lo schema.(testato solo su arduino mega 2560)
collegamenti:
Per i due display GND=GND pin di arduino (cavo nero)
Vcc=5V pin di arduino (cavo rosso)
SCL=SCK pin di arduino (cavo verde)
SDA=SDA pin di arduino (cavo bianco)
Sensore DHT11 Vcc=5V pin arduino cavo rosso
OUT=pin 2 di arduino cavo viola
GND=GND pin di arduino cavo nero
Sensore MQ135 A0=pin A0 di arduino cavo giallo
D0= lasciato libero
Vcc=5V pin di arduino cavo rosso
GND=GND pin di arduino cavo nero
ATTENZIONE VERIFICATE SEMPRE BENE TUTTI I COLLEGAMENTI E LE DICITURE SUI VARI SENSORI CHE POTREBBERO DIFFERIRE DALLO SCHEMA QUI RIPORTATO.
Il codice
//prova DHT11 e MQ135 con doppio display oled ssd1306 da 128x64px ed arduino mega 2560 by LabCippo
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_Sensor.h>
#include "DHT.h"
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define DHTPIN 2 // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11 // DHT 11
Adafruit_SSD1306 display(OLED_RESET);
Adafruit_SSD1306 display2( OLED_RESET);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//importante che i due display abbiano indirizzi differenti
display2.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
display2.display();
delay(1000);
display.clearDisplay();
display2.clearDisplay();
}
void loop() {
delay(1000);
int sensorValue = analogRead(A0);
//leggo temperatura e umidità
float t = dht.readTemperature();
float h = dht.readHumidity();
//clear display 1
display.clearDisplay();
// visualizzo sul display1 la temperatura da DHT11
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.print(" Temperatura: ");
display.setTextSize(2);
display.setCursor(0, 10);
display.print(t);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(2);
display.print("C");
// visualizzo sul display1 l'umidità da DHT11
display.setTextSize(1);
display.setCursor(0, 35);
display.print(" Umidita: ");
display.setTextSize(2);
display.setCursor(0, 45);
display.print(h);
display.print(" %");
display.display();
display2.clearDisplay(); //clear display 2
display2.setTextColor(WHITE);
display2.clearDisplay();
display2.setTextSize(1); //visualizzo sul display2 i dati del sensore mq135
display2.setCursor(0, 10);
display2.print(" AIR QUALITY");
display2.setCursor(10, 40);
display2.print("PPM");
display2.setTextSize(3);
display2.setCursor(40, 40);
display2.print(sensorValue);
delay(1000);
display2.display();
}