----------------------
Kod:
#include <Wire.h>;
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
Adafruit_BMP280 bmp;
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
delay(500);
if (!bmp.begin()) {
while (1);
}
}
void loop() {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
delay(1000);
display.setCursor(10,10);
display.print(int(bmp.readTemperature()));
display.print(" ");
display.print((char)247);
display.print("C");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();
display.clearDisplay();
display.setCursor(10,10);
display.print(int(bmp.readPressure()/100));
display.print(" ");
display.print("mbar");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();
display.clearDisplay();
display.setCursor(10,10);
display.print(int(bmp.readPressure()/1000));
display.print(" ");
display.print("kPa");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();
display.clearDisplay();
display.setCursor(10,10);
display.print(int(bmp.readAltitude(917)));
display.print(" ");
display.print("m");
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.display();
}
-------------------------
Za ovaj projekat je potrebno nekoliko biblioteka. Prva je Wire.h koja je već dostupna u okviru IDE. Za ekran sam upotrebio
Adafruit_SSD1306 i
Adafruit_GFX. Za BMP280 sam upotrebio
Adafruit_Sensor i
Adafruit_BMP280 biblioteke. Nakon pravljenja objekata ekrana i senzora u setup funkciji ih pokrećemo. Za ekran ovde upisujemo I2C adresu, a u mom kao i u većini slučajeva je 0x3C. BMP280 senzor nekad može da pravi problem prilikom inicijalizacije pa smo pribegli triku sa if petljom koja će se vrteti u okviru setup funkcije dok se senzor ne pokrene. I2C adresa senzora je najčešće 0x77 i ukoliko ne dobijete ikakva očitavanja, to jest, skeč ostane "zaglavljen" u setup funkciji treba ispratiti u okviru
Adafruit_BMP280.h fajla liniju
#define BMP280_ADDRESS i postaviti ispravnu I2C adresu. Nakon toga bi senzor morao da radi. U loop funkciji podešavamo ekran i formatiramo ga po potrebi. Ja sam dodao malo scroll efekta uz zastajanje skeča radi očitavanja određenih vrednosti. Ostaje još senzor vlage, ali o tom po tom.
Prilikom testiranja uređaj je trošio oko 22mA što se može prilično smanjiti slanjem mikrokontrolera na spavanje, i na taj način bi uređaj mogao da radi i na baterije. Litijum-jonska 18650 baterija na 3,7V u power banku se dobro držala satima i ovako. Nisam merio koliko dugo može da radi na bateriji ali govorimo o izuzetno štedljivim komponentama gde je samo Wavgat nepoznanica što se tiče potršnje, mada mislim da je u pitanju prilično mali potrošač. Ako će se ići na baterije, LED koju sam dodao bi trebalo izbaciti, scroll efekt, kao i učestalost merenja i očitavanja podataka. Uz uspavljivanje mikrokontrolera.
Šta vi mislite o ovom projektu? Imate li kakve sugestije?