-
Notifications
You must be signed in to change notification settings - Fork 776
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1906 from adafruit/co2_logger
Adding code for CO2 logger
- Loading branch information
Showing
1 changed file
with
87 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
# SPDX-FileCopyrightText: 2021 Liz Clark for Adafruit Industries | ||
# | ||
# SPDX-License-Identifier: MIT | ||
|
||
import time | ||
import board | ||
import digitalio | ||
import adafruit_scd4x | ||
import adafruit_sdcard | ||
import busio | ||
import storage | ||
import adafruit_pcf8523 | ||
|
||
# setup for I2C | ||
i2c = board.I2C() | ||
# setup for SCD40 | ||
scd4x = adafruit_scd4x.SCD4X(i2c) | ||
# setup for RTC | ||
rtc = adafruit_pcf8523.PCF8523(i2c) | ||
# start measuring co2 with SCD40 | ||
scd4x.start_periodic_measurement() | ||
# list of days to print to the text file on boot | ||
days = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday") | ||
|
||
# SPI SD_CS pin | ||
SD_CS = board.D10 | ||
|
||
# SPI setup for SD card | ||
spi = busio.SPI(board.SCK, board.MOSI, board.MISO) | ||
cs = digitalio.DigitalInOut(SD_CS) | ||
sdcard = adafruit_sdcard.SDCard(spi, cs) | ||
vfs = storage.VfsFat(sdcard) | ||
try: | ||
storage.mount(vfs, "/sd") | ||
print("sd card mounted") | ||
except ValueError: | ||
print("no SD card") | ||
|
||
# to update the RTC, change set_clock to True | ||
# otherwise RTC will remain set | ||
# it should only be needed after the initial set | ||
# if you've removed the coincell battery | ||
set_clock = False | ||
|
||
if set_clock: | ||
# year, mon, date, hour, min, sec, wday, yday, isdst | ||
t = time.struct_time((2021, 10, 31, 00, 00, 00, 0, -1, -1)) | ||
|
||
print("Setting time to:", t) | ||
rtc.datetime = t | ||
print() | ||
|
||
# variable to hold RTC datetime | ||
t = rtc.datetime | ||
|
||
time.sleep(1) | ||
|
||
# initial write to the SD card on startup | ||
try: | ||
with open("/sd/co2.txt", "a") as f: | ||
# writes the date | ||
f.write('The date is {} {}/{}/{}\n'.format(days[t.tm_wday], t.tm_mday, t.tm_mon, t.tm_year)) | ||
# writes the start time | ||
f.write('Start time: {}:{}:{}\n'.format(t.tm_hour, t.tm_min, t.tm_sec)) | ||
# headers for data, comma-delimited | ||
f.write('CO2,Time\n') | ||
# debug statement for REPL | ||
print("initial write to SD card complete, starting to log") | ||
except ValueError: | ||
print("initial write to SD card failed - check card") | ||
|
||
while True: | ||
try: | ||
# variable for RTC datetime | ||
t = rtc.datetime | ||
# append SD card text file | ||
with open("/sd/co2.txt", "a") as f: | ||
# read co2 data from SCD40 | ||
co2 = scd4x.CO2 | ||
# write co2 data followed by the time, comma-delimited | ||
f.write('{},{}:{}:{}\n'.format(co2, t.tm_hour, t.tm_min, t.tm_sec)) | ||
print("data written to sd card") | ||
# repeat every 30 seconds | ||
time.sleep(30) | ||
except ValueError: | ||
print("data error - cannot write to SD card") | ||
time.sleep(10) |