funky stuff

This commit is contained in:
hajamieli 2024-12-19 00:29:57 +02:00
commit 84f9ee4c90
2 changed files with 154 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
secrets.h

153
proto.ino Normal file
View File

@ -0,0 +1,153 @@
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <WiFi.h>
#include <MQTT.h>
#include <Adafruit_SSD1306.h>
#include <DHT11.h>
#include <Adafruit_AHTX0.h>
#include "ScioSense_ENS160.h"
#include "secrets.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
ScioSense_ENS160 ens160(ENS160_I2CADDR_1);
DHT11 dht11(2);
Adafruit_AHTX0 aht;
WiFiClient net;
MQTTClient client;
int ATHtempC;
int ATHhumidity;
unsigned long timestamp = 0;
unsigned long uploadts = 0;
void connect() {
Serial.print("checking wifi...");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.print("\nconnecting...");
while (!client.connect(HOSTNAME, MQTT_USER, MQTT_PASS)) {
Serial.print(".");
delay(1000);
}
Serial.println("\nconnected!");
//client.subscribe("/hello");
}
void sensors(){
Serial.print("ENS160...");
dht11.setDelay(1000);
ens160.begin();
delay(1000);
Serial.println(ens160.available() ? "done." : "failed!");
if (ens160.available()) {
Serial.print("\tRev: "); Serial.print(ens160.getMajorRev());
Serial.print("."); Serial.print(ens160.getMinorRev());
Serial.print("."); Serial.println(ens160.getBuild());
Serial.print("\tStandard mode ");
Serial.println(ens160.setMode(ENS160_OPMODE_STD) ? "done." : "failed!" );
}
if (! aht.begin()) {
Serial.println("Could not find AHT? Check wiring");
while (1) delay(10);
}
Serial.println("AHT10 or AHT20 found");
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { // Address 0x3D for 128x64
Serial.println("SSD1306 allocation failed");
for(;;);
}
}
void writeToScreen(String &text) {
display.clearDisplay();
display.setCursor(0, 3);
display.println(text);
display.display();
}
/*
void messageReceived(String &topic, String &payload) {
Serial.println("incoming: " + topic + " - " + payload);
}
*/
void setup() {
Serial.begin(115200);
while (!Serial) {}
WiFi.setHostname(HOSTNAME);
WiFi.begin(WIFI_SSID, WIFI_PASS);
client.begin(MQTT_URL, MQTT_PORT, net);
//client.onMessage(messageReceived);
connect();
sensors();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.display();
}
void loop() {
client.loop();
delay(1000);
if (!client.connected()) {
connect();
}
if (millis() - timestamp > 2500) {
timestamp = millis();
sensors_event_t humidity1, temp;
aht.getEvent(&humidity1, &temp);
ATHtempC = (temp.temperature);
ATHhumidity = (humidity1.relative_humidity);
int temperature = 0;
int humidity = 0;
int result = dht11.readTemperatureHumidity(temperature, humidity);
if (result == 0 && ens160.available()) {
ens160.set_envdata(temperature, ATHhumidity);
ens160.measure(true);
ens160.measureRaw(true);
Serial.print("Temperature: ");Serial.print(temperature);Serial.print("°C\tHumidity: ");Serial.print(ATHhumidity);Serial.print("% ");
Serial.print("AQI: ");Serial.print(ens160.getAQI());Serial.print(" ");
Serial.print("TVOC: ");Serial.print(ens160.getTVOC());Serial.print("ppb ");
Serial.print("eCO2: ");Serial.print(ens160.geteCO2());Serial.println("ppm ");
writeToScreen("Temp: " + String(temperature) + "C H: " + String(ATHhumidity) + "%\nAQI: " + ens160.getAQI());
if (millis() - uploadts > 30000) {
client.publish("envi/temparature", String(temperature));
client.publish("envi/humidity", String(ATHhumidity));
client.publish("envi/aqi", String(ens160.getAQI()));
client.publish("envi/tvoc", String(ens160.getTVOC()));
client.publish("envi/eco", String(ens160.geteCO2()));
uploadts = millis();
}
}
if(result != 0 || !ens160.available()) {
client.publish("envi/error", "sensor error");
Serial.println(DHT11::getErrorString(result));
}
}
}