diff --git a/main.py b/main.py new file mode 100644 index 0000000..73f1431 --- /dev/null +++ b/main.py @@ -0,0 +1,89 @@ +# A weather station program display the date, time, temperature and humidity on the OLED screen with Air Quality and eCO2 on ZIP LEDs (Red/Green) +from PicoAirQuality import KitronikBME688, KitronikDataLogger, KitronikOLED, KitronikRTC, KitronikZIPLEDs +import time + + +logFileName = "atmosphere_log.txt" + + +bme688 = KitronikBME688() +oled = KitronikOLED() +rtc = KitronikRTC() +zipleds = KitronikZIPLEDs(3) +# Python u arse hole sec = Integer() +#rtc.setDate(07, 4, 2022) +#rtc.setTime(21, 58, 0) + +bme688.setupGasSensor() +bme688.calcBaselines() +sec = 0 +#f = open(logFileName, 'a') +#f.write("# Data Logging: Date, Time, Temperature, Pressure, Humidity, AirQuality, CO2\n") + +while True: + + if sec == 0: + f = open(logFileName, 'a+') + f.write("# Data Logging: Date, Time, Temperature, Pressure, Humidity, AirQuality, CO2\n") + f.write('# Restarted ' + str(rtc.readDateString()) + ' ' + str(rtc.readTimeString()) + '\n' ) + time.sleep_ms(1000) + bme688.measureData() + oled.clear() + + #oled.drawRect(4, 5, 120, 35) + oled.displayText(rtc.readDateString(), 1, 25) + oled.displayText(rtc.readTimeString(), 2, 33) + #oled.drawLine(0, 48, 127, 48) + #oled.drawLine(0, 49, 127, 49) + oled.displayText(str(bme688.readTemperature()) + " oC", 3, 0) + oled.displayText(str(bme688.readHumidity()) + " %H", 3, 80) + eCO2 = bme688.readeCO2() + oled.displayText(str(eCO2) + " CO2 ppm", 4, 0) + IAQ = bme688.getAirQualityScore() + oled.displayText(str(IAQ) + " AQ ", 5, 0) + mbar = bme688.readPressure()/100.0 + oled.displayText(str(mbar) + " mB ", 5, 50) + oled.show() + + if (IAQ < 100): + zipleds.setLED(0, zipleds.GREEN) + else: + zipleds.setLED(0, zipleds.RED) + if (eCO2 < 800): + zipleds.setLED(2, zipleds.GREEN) + else: + zipleds.setLED(2, zipleds.RED) + zipleds.setBrightness(10) + + + # ffs all I want is an action every minute I hate python scope shit + #now = rtc.readTimeString(); + # log every minute, thats 1440 records a day + sec = sec + 1 + secmod = sec % 29 + if (secmod) == 0: + #log.setupDataFields("Date", "Time", "Temperature", "Pressure", "Humidity", "IAQ", "eCO2") + log_string = (rtc.readDateString() + ',' + \ + rtc.readTimeString() + ',' + \ + str(bme688.readTemperature()) + ',' + \ + str(bme688.readPressure()) + ',' + \ + str(bme688.readHumidity())+ ',' + \ + str(bme688.getAirQualityScore()) + ',' + \ + str(bme688.readeCO2())) + '\n' + #print (log_string) + #print ("logging data\n") + f.write(log_string) + f.flush() + zipleds.setLED(1, zipleds.RED) + elif (secmod < 10): + zipleds.setLED(1, zipleds.BLUE) + elif (secmod > 10): + s2 = secmod * 2 + zip_col = (secmod, s2, s2) + zipleds.setLED(1, zip_col) + + if ( (sec+1) % 2 ) == 0: + zipleds.setLED(1, zipleds.BLACK) + + zipleds.show() +