Parts:
Arduino Nano
SD 1306 OLED
BME 280 weather sensor
Breadboard
Breadboard power supply
9V Battery and case
Wiring:
SD1306: 5V, GND, SDA, SCL
BME280: 3.3V, GND, SDA, SCL
Nano: 5V, GND A4-->SDA, A5---> SCL
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_BME280 bme; // I2C
void setup() {
Serial.begin(9600);
// check for sensor
if (!bme.begin(0x76)) { // Try 0x76 or 0x77 depending on your sensor
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
delay(1500);
// check OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
}
void loop() {
// print values to serial monitor
Serial.print("Temperature= ");
Serial.print(bme.readTemperature());
Serial.print(" °C");
Serial.println();
Serial.print("Pressure= ");
Serial.print(bme.readPressure() / 100.0F);
Serial.print(" hPa");
Serial.println();
Serial.print("Humidity= ");
Serial.print(bme.readHumidity());
Serial.print(" %");
Serial.println();
Serial.println();
delay(2000);
// print values to SD1306 OLED display
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 20);
display.print("Humidity = " );
display.setCursor(0, 50);
display.println(bme.readHumidity());
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0,20);
display.print("Pressure = ");
display.setCursor(0,50);
display.print(bme.readPressure()/ 100.0F);
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0,20);
display.print("Temp = ");
display.setCursor(0,50);
display.println(bme.readTemperature());
display.display();
delay(2000);
display.clearDisplay();
}