继续研究,这次终于可以测试温湿度了。但是这里我只需要温度就行了,因为天气热了就自动打开风扇降温。
但是继电器模块用RP2350带不动,所以用了板载Led灯和屏幕显示的Fan ON和Fan OFF来代替。目前气温十29°C,显示Fan OFF,Led灯也是灭的。吹一下气,温度就超过了30,屏幕显示Fan ON,Led灯也亮了。说明式样成功了。
需要注意的是,我用的是SH1106屏幕,需要安装依赖库才能在ide里导入。导入成功后,出现了一个奇怪的现象,内容是倒过来显示的,需要运行一下正常显示的程序后再运行测温程序,就可以正常显示了。
步骤1 需要运行正常显示的SH1106屏幕程序
代码
from machine import Pin, SoftI2C
import sh1106,dht,time,machine
i2c = SoftI2C(scl=Pin(5), sda=Pin(4))
oled = sh1106.SH1106_I2C(128, 64, i2c)
d = dht.DHT11(Pin(27))
oled.write_cmd(0xA1)
oled.write_cmd(0xC8)
oled.text("Oled Test",30,30)
oled.show()
步骤2 运行测温程序
代码
from machine import Pin, I2C
import dht
import sh1106
import time
dht_pin = Pin(27, Pin.IN)
sensor = dht.DHT11(dht_pin)
fan=Pin(26,Pin.OUT)
led=Pin(25,Pin.OUT)
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=40000)
oled = sh1106.SH1106_I2C(128, 64, i2c)
while True:
try:
sensor.measure()
temp = sensor.temperature()
humi = sensor.humidity()
oled.fill(0)
oled.text('Temp: {}C'.format(temp), 5, 10)
oled.text('Humi: {}%'.format(humi), 5, 20)
oled.show()
except OSError as e:
print('Failed to read sensor.')
if temp>=30:
fan.on()
led.on()
oled.text('Fan ON',5,30)
oled.show()
else:
fan.off()
led.off()
oled.text('Fan OFF',5,30)
oled.show()
time.sleep(2)
评论