aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2022-03-27 12:10:31 +0100
committerdakkar <dakkar@thenautilus.net>2022-03-27 12:10:31 +0100
commit293415fa50cda10e8659830a87aa5652be2b0f7b (patch)
tree75f9a0bfb5c21e6cde26313fee8641c267db69c0
parentignore rendered enclosure (diff)
downloadenv-sensor-293415fa50cda10e8659830a87aa5652be2b0f7b.tar.gz
env-sensor-293415fa50cda10e8659830a87aa5652be2b0f7b.tar.bz2
env-sensor-293415fa50cda10e8659830a87aa5652be2b0f7b.zip
battery voltage, move display around
-rw-r--r--battery.h38
-rw-r--r--main.ino43
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;
+ }
+};
diff --git a/main.ino b/main.ino
index bde8892..ce9f981 100644
--- a/main.ino
+++ b/main.ino
@@ -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);