Skip to content

Instantly share code, notes, and snippets.

@dglaude
Created March 26, 2021 21:14
Show Gist options
  • Save dglaude/7f219a52b0ef1acdfc14024c98df71ec to your computer and use it in GitHub Desktop.
Save dglaude/7f219a52b0ef1acdfc14024c98df71ec to your computer and use it in GitHub Desktop.
CO2 sensor on small OLED controled by an RP2040.
#
# 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