简介
在上一篇文章中,我们成功的使用了Linux的LED子系统控制了LED的闪烁,那么在本文章中将会正式开启我们申请这个开发板的目标任务。来读取传感器并且接入到HA,并且探索是否能够简单的训练一个模型来预测或者分类当前环境的舒适度。
那么在我们开始之前我们首先需要一个传感器来读取环境的湿度和温度数据,我这里选择的是AHT20,其原因是因为实在找不到其他的传感器在哪里了。
然后根据原理图把他接到I2C2上
虽然有了原理图但是对照着开发板上的排母看着还是不是很好辨别。因此这里建议使用万用表根据3.3和GND量一下来确认方向,从而确认到底哪一个是I2C2
连接好的图片如上所示。
然后我们需要使用i2cdetect来检测一下是否这个I2C的address已经被正确的识别了。
如上图所示,目前I2C的地址已经被正确的识别,其地址为0x38. 此时我们便可以安装Python的smbus2库来使用python程序读取AHT20传感器。
安装的话建议使用下面的命令,因为系统级别的pip无法直接安装,或者需要使用虚拟环境
sudo apt install python3-smbus python3-smbus2 -y
正常安装成功,那么此时我们便可以使用python直接读取这个传感器了。代码如下。
from smbus2 import SMBus import time I2C_BUS = 2 AHT20_ADDR = 0x38 bus = SMBus(I2C_BUS) # 初始化 bus.write_i2c_block_data(AHT20_ADDR, 0xBE, [0x08, 0x00]) time.sleep(0.01) while True: # 触发一次测量 bus.write_i2c_block_data(AHT20_ADDR, 0xAC, [0x33, 0x00]) time.sleep(0.08) # 读数据 data = bus.read_i2c_block_data(AHT20_ADDR, 0x00, 6) # 转换 humidity_raw = ((data[1] << 16) | (data[2] << 8) | data[3]) >> 4 temperature_raw = ((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5] humidity = humidity_raw / (1 << 20) * 100 temperature = temperature_raw / (1 << 20) * 200 - 50 print(f"Humidity: {humidity:.2f}%") print(f"Temperature: {temperature:.2f}°C") time.sleep(1)
读取到的传感器数据如下所示。
后续
传感器的数据已经拿到了接下来就是上报给MQTT,或者训练模型进行分类预测了。这里有一个坑就是这个codeserver非常占用内存,本来板子可用内存就300Mb左右,这一个服务能直接占用200MB。但是它的连接稳定性比Vscode远程连接的太好了。建议需要的时候开启。跑应用的时候关闭这个服务。