#-----------------------------------------------------------------------#
# Objectives: #
# - Blink External LEDs #
# - Get and print temperature and pressure from DHT22 sensor #
# - Get and print temperature from onboard temperature sensor #
# - Blink Onboard LED #
# #
# Author: Drop Bos #
# Created Date: May-02-2025 #
# Updated Date: May-02-2025 #
# #
# License: Apache-2.0 #
# #
# Copyright © 2025. Drop Bos. All Rights Reserved. #
# ----------------------------------------------------------------------#
from dht import DHT22
from utime import sleep
from machine import Pin, ADC, RTC
# 1. external leds
led_one = Pin(5, Pin.OUT)
led_two = Pin(9, Pin.OUT)
led_three = Pin(13, Pin.OUT)
# 2. DHT22 temp & press sensor
# connect GND.8 to dht1:GND || GND > Pin 38
# connect 3V3 to dht1:VCC (3V3(OUT)) || VCC > Pin 36
# connect GP28 to dht1:SDA (Data - GPIO28) || SDA > Pin 34
external_dht22 = DHT22(Pin(28))
# 3. onboard temp sensor
onboard_temp = ADC(4) # onboard temp sensor (On ADC Channel)
# 4. onboard_led
onboard_led = Pin("LED", Pin.OUT)
def separator():
print("--------------------")
def external_led_display(led_one=None, led_two=None, led_three=None):
ready_to_stop = 7
stop_go = 1
ready_to_stop_sleep_interval = 7
# ready to stop
print("-- Ready to stop --")
for index in range(ready_to_stop):
led_one.on()
sleep(1)
led_one.off()
sleep(1)
# stop
print("-- Stop --")
for index in range(stop_go):
led_two.on()
sleep(ready_to_stop_sleep_interval)
led_two.off()
sleep(1)
# go
print("-- Go --")
for index in range(stop_go):
led_three.on()
sleep(ready_to_stop_sleep_interval)
led_three.off()
sleep(1)
separator()
def temp_press_display(sensor=None, seconds=None):
sensor.measure()
temp = sensor.temperature()
humd = sensor.humidity()
temp_f = temp * (9/5) + 32.0
separator()
print(f"temp (C) is {temp}")
print(f"temp (F) is {temp_f}")
print(f"humd (%) is {humd}")
separator()
sleep(seconds)
def onboard_temp_value(sensor=None, seconds=None):
"""
The in-built temp sensor measures the Vbe voltage of a biased bipolar diode,
connected to the fifth ADC channel. Vbe = 0.706V at 27 degrees C, with a
slope of -1.721mV (0.001721) per degree.
"""
factor = 3.3 / 65535
reading = sensor.read_u16() * factor
temp = 27 - (reading - 0.706)/0.001721
print(f"Board Temperature is: {temp} deg C")
separator()
sleep(seconds)
def onboard_led_display(sensor=None, seconds=None, blink_number=None):
"""
Original "LED" pin is GPIO 25
Unlike the original Raspberry Pi Pico, the on-board LED on Pico W is not
connected to a pin on RP2040, but instead to a GPIO pin on the wireless chip.
Hence, led = Pin("LED", Pin.OUT) and not Pin(25, Pin.OUT)
"""
led = onboard_led
print("-- Blinking Onboard LCD --")
for index in range(blink_number):
led.on()
sleep(seconds)
led.off()
sleep(seconds)
while True:
seconds = 1
blink_number = 5
external_led_display(led_one=led_one, led_two=led_two, led_three=led_three)
print("-- Displaying Temp & Humd --")
temp_press_display(sensor=external_dht22 , seconds=seconds)
onboard_temp_value(sensor=onboard_temp, seconds=seconds)
onboard_led_display(sensor=onboard_led, seconds=seconds, blink_number=blink_number)