diff options
author | dakkar <dakkar@thenautilus.net> | 2022-03-27 12:10:31 +0100 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2022-03-27 12:10:31 +0100 |
commit | 293415fa50cda10e8659830a87aa5652be2b0f7b (patch) | |
tree | 75f9a0bfb5c21e6cde26313fee8641c267db69c0 | |
parent | ignore rendered enclosure (diff) | |
download | env-sensor-293415fa50cda10e8659830a87aa5652be2b0f7b.tar.gz env-sensor-293415fa50cda10e8659830a87aa5652be2b0f7b.tar.bz2 env-sensor-293415fa50cda10e8659830a87aa5652be2b0f7b.zip |
battery voltage, move display around
-rw-r--r-- | battery.h | 38 | ||||
-rw-r--r-- | main.ino | 43 |
2 files changed, 64 insertions, 17 deletions
diff --git a/battery.h b/battery.h new file mode 100644 index 0000000..825a3ab --- /dev/null +++ b/battery.h @@ -0,0 +1,38 @@ +#pragma once +#include <Arduino.h> + +/* + code inspired by https://gist.github.com/jenschr/dfc765cb9404beb6333a8ea30d2e78a1 + */ + +class Battery { + uint8_t pin; +public: + /* + the schematics at + https://github.com/Xinyuan-LilyGO/LilyGo-T5-Epaper-Series/tree/master/schematic + show a voltage divider connected to pin 35 + */ + Battery(uint8_t _pin=35) : pin(_pin) {}; + float voltage() { + /* + Comment from the gist: + + The ADC value is a 12-bit number, so the maximum value is 4095 + (counting from 0). + + To convert the ADC integer value to a real voltage you’ll need + to divide it by the maximum value of 4095, then double it (note + above that Adafruit halves the voltage), then multiply that by + the reference voltage of the ESP32 which is 3.3V and then + finally, multiply that again by the ADC Reference Voltage of + 1100mV. + + Comment from me: that assumes that ADC is linear, which is probably isn't + + Also, the battery voltage is not a decent indicator of charge + level, but that's what I've got + */ + return (float)(analogRead(pin)) / 4095*2*3.3*1.1; + } +}; @@ -12,12 +12,16 @@ #include <GxIO/GxIO_SPI/GxIO_SPI.h> #include <GxIO/GxIO.h> +#include "battery.h" + GxIO_Class io(SPI, EPD_CS, EPD_DC, EPD_RSET); GxEPD_Class display(io, EPD_RSET, EPD_BUSY); SPIClass SDSPI(VSPI); // for sdcard SensirionI2CScd4x scd4x; +Battery batt; + uint16_t co2 = 0; float temperature = 0.0f; float humidity = 0.0f; @@ -25,24 +29,29 @@ struct sps30_measurement m; void showThings(bool all=false) { display.fillScreen(GxEPD_WHITE); - display.setCursor(0,20); - display.print("Co2:"); - display.println(co2); - display.print("T:"); - display.print(temperature); - display.print(" H:"); - display.println(humidity); - - display.print("PM 1:"); - display.print(m.mc_1p0); - display.print(" PM 2.5:"); - display.println(m.mc_2p5); - - display.print("PM 4:"); - display.print(m.mc_4p0); - display.print(" PM 10:"); - display.println(m.mc_10p0); + display.setCursor(0,20); + display.print("Co2 "); + display.print(co2); + + display.setCursor(100,20); + display.print("t"); + display.print(temperature,1); + + display.setCursor(150,20); + display.print(" h"); + display.print(humidity,0); + display.print("%"); + + display.setCursor(0,45); + display.println(" PM"); + display.print(" 1.0 "); display.println(m.mc_1p0,1); + display.print(" 2.5 "); display.println(m.mc_2p5,1); + display.print(" 4.0 "); display.println(m.mc_4p0,1); + display.print("10.0 "); display.println(m.mc_10p0,1); + + display.setCursor(100,45); + display.print("Batt "); display.print(batt.voltage()); // "partial" update display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, false); |