Created
March 26, 2021 21:14
-
-
Save dglaude/7f219a52b0ef1acdfc14024c98df71ec to your computer and use it in GitHub Desktop.
CO2 sensor on small OLED controled by an RP2040.
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
# | |
# Strongly inspired by https://learn.adafruit.com/i-vote-d-pin/code | |
# Made by Collin Cunningham | |
# With other fonts and basic code from the scd30 CO2 sensor. | |
# | |
import board | |
import time | |
from adafruit_debouncer import Debouncer | |
import digitalio | |
import displayio | |
from adafruit_display_text import label | |
import adafruit_displayio_ssd1306 | |
from adafruit_bitmap_font import bitmap_font | |
import adafruit_scd30 | |
displayio.release_displays() | |
# Set up button pins | |
pin_a = digitalio.DigitalInOut(board.D9) | |
pin_a.direction = digitalio.Direction.INPUT | |
pin_a.pull = digitalio.Pull.UP | |
pin_b = digitalio.DigitalInOut(board.D6) | |
pin_b.direction = digitalio.Direction.INPUT | |
pin_b.pull = digitalio.Pull.UP | |
pin_c = digitalio.DigitalInOut(board.D5) | |
pin_c.direction = digitalio.Direction.INPUT | |
pin_c.pull = digitalio.Pull.UP | |
button_a = Debouncer(pin_a) #9 | |
button_b = Debouncer(pin_b) #6 | |
button_c = Debouncer(pin_c) #5 | |
# Load font | |
#font = bitmap_font.load_font('/mround-31.bdf') | |
big_font = bitmap_font.load_font('/Arial-12.pcf') | |
font = bitmap_font.load_font('/6x10.bdf') | |
# Set up display & add group | |
i2c = board.I2C() | |
display_bus = displayio.I2CDisplay(i2c, device_address=0x3C) | |
display = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=32) | |
group = displayio.Group(max_size=1) | |
display.show(group) | |
# initialise the Co2 sensor | |
scd = adafruit_scd30.SCD30(i2c) | |
# Add content to group | |
default_text = "????" | |
text_area = label.Label(big_font, text=default_text, color=0xFFFFFF, x=88, y=15) | |
group.append(text_area) | |
text_area1 = label.Label(font, text="PPM", color=0xFFFFFF, x=0, y=5) | |
group.append(text_area1) | |
text_area2 = label.Label(font, text="TEMP", color=0xFFFFFF, x=0, y=15) | |
group.append(text_area2) | |
text_area3 = label.Label(font, text="HUM", color=0xFFFFFF, x=0, y=25) | |
group.append(text_area3) | |
text_area.text = "3" | |
time.sleep(1) | |
text_area.text = "2" | |
time.sleep(1) | |
text_area.text = "1" | |
time.sleep(1) | |
text_area.text = "" | |
line = 0 | |
while True: | |
# Debounce buttons | |
button_a.update() | |
button_b.update() | |
button_c.update() | |
if scd.data_available: | |
text_area1.text = "CO2 %4.0f PPM"%scd.CO2 | |
l1 = "%4.0f"%scd.CO2 | |
text_area2.text = "TEMP %.2f C"%scd.temperature | |
l2 = "%.2f"%scd.temperature | |
text_area3.text = "HUM %0.1f %%fH"%scd.relative_humidity | |
l3 = "%0.1f"%scd.relative_humidity | |
if line == 1: | |
text_area.text = l1 | |
elif line == 2: | |
text_area.text = l2 | |
elif line == 3: | |
text_area.text = l3 | |
# Check for button presses & set text | |
if button_a.fell: | |
line = 1 | |
text_area.text = l1 | |
elif button_b.fell: | |
line = 2 | |
text_area.text = l2 | |
elif button_c.fell: | |
line = 3 | |
text_area.text = l3 | |
display.show(group) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment