【得捷电子Follow me第3期】任务5:使用外部传感器
[复制链接]
任务5:使用外部传感器
这次任务需要使用外接的传感器。本次搭配了两个,分别是AHT20温湿度传感器,和光照传感器。
一个是I2C接口,另一个则是ADC接口,因此需要用排线将他们连接到扩展版
先是温湿度传感器,接到I2C的接口
然后就是光照了,接到模拟扣上
接下来先准备操作外部的温湿度传感器AHT20。要使用这个传感器,必须要增加对该器件的支持包。这次我换了另一个安装方式:下载到本地再安装
然后打开包管理器
选择从本地安装
选择前面下载好的指定格式的包文件
打开之后显示正在安装
安装完成之后可以在左侧的lib文件夹中看到ahtx0的包了
然后在程序中可以使用import进来该包
使用AHT20
此后就可以使用如下操作获取温度和湿度值了
当然,I2C部分还需要跟之前的OLED一样,需要在前面先定义好
接下来准备光照传感器,本次的Grove - Light Sensor v1.2 是一个光敏传感器,常用于测量环境光强度。它可以通过连接到Grove基板或直接连接到开发板上的相应引脚来使用,上面的传感器实际使用了GL5528,一个光敏电阻(光相关电阻)来检测光的强度。光敏电阻的电阻随光强的增加而减小。板载双OpAmp芯片LM358产生对应于光强的电压(即。基于电阻值)。输出信号为模拟值,光越亮,数值越大,不过该值仅反映光强度的近似趋势,它不表示确切的明亮程度,根据手册可以初定光敏电阻的最大值可以检测到约350Lux
这样就可以使用ADC采样了。
首先设定好ADC的引脚和采样参数
然后获取ADC的值,并转换为电阻值和光照度
最后还得增加OLED 部分,在其上面更新内容
有了上述的基本操作方法,下面就可以融合一下了,即每秒采样温度和湿度,以及光敏电阻并计算照度,然后在oled上更新显示
运行效果如下
在shell输出中也会看到打印的相应内容了
完整代码如下
from machine import Pin, SoftI2C, ADC
import ssd1306
import utime
import time
from ahtx0 import AHT20
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# 清空屏幕,并显示任务要求
oled.fill(0)
oled.text("Task 5:Sensor", 0, 0)
oled.text("Temp:", 0, 16)
oled.text("Humi:", 0, 32)
oled.text("Light:", 0, 48)
oled.show()
# aht20
aht = AHT20(i2c)
# 光照部分
adc = ADC(Pin(2))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT) #4095
while True:
temp = aht.temperature
humi = aht.relative_humidity
light_adc = adc.read()
# 计算光照强度单位Lux
light_lux = light_adc * 350 * 1.0 / 4095
# 算出电阻值单位K
light_res = (4095 - light_adc) * 10.0 / light_adc
print("Temp(°):\n");
print('{:.2f}'.format(temp))
print("Humi(%):\n");
print('{:.2f}'.format(humi))
print("Light(lux)\n");
print('{:.2f}'.format(light_lux))
print("Light(K)\n");
print('{:.2f}'.format(light_res))
# 清除变化部分的内容
oled.fill_rect(64,16,64,48,0)
oled.text('{:.2f}'.format(temp), 64, 16)
oled.text('{:.2f}'.format(humi), 64, 32)
oled.text('{:.2f}'.format(light_lux), 64, 48)
oled.show()
# 延时1秒
time.sleep(1)
相关资料参考附件
|