芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
温柔的接触器Moly
QuecPython使用体验2:简易的温湿检测

前言

在前文中我们提到,QuecPython_EC600X_EVB开发板板载资源丰富,具有温湿度传感器,SIM卡座,光敏电阻,甚至SPK功放等模块。
在本文中,我们将主要介绍使用EC600S中的I2C接口从开发板中AHT10温湿度传感器获取温湿度,以此构建一个简单的环境检测系统。

1. AHT10温湿度传感器

AHT10传感器开发板位置,及电路图如下
AHT10_pos.png
AHT10_board.png
AHT10 是一款高精度,完全校准,贴片封装的温湿度传感器。传感器包括一个电容式感湿元件和一个高性能 CMOS 微处理器相连接。AHT10采用标准I2C通信方式,
常用于气象站、家电、湿度调节、医疗及其他相关温湿度检测控制。在使用AHT10进行温度,湿度测量时需注意:

  • 上电后传感器最多需要20ms时间(此时SCL为高电平)以达到空闲状态即做好准备接收由主机发送的命令
    AHT10_cmd.png
  • 主机通过IIC与AHT10通信,AHT10的从机地址为0x38。在主机发出初始化 命令之后(‘11100001’代表初始化,‘10101100’代表温湿度测量), 主机必须等待测量完成
    AHT10_state.png
  • 主机发送采集指令(0xAC)触发AHT10采集温湿度信息,延时75ms以上,等待AHT10完成采集之后再读取AHT10温湿度数据。
  • 主机获取AHT10数据后,需要对原始数据进行转化,得到需要的温湿度信息。相对湿度 RH 根据 SDA 输出的相对湿度信号 SRH 通过如下公式计算获得:

相对湿度:

Rh \left [ \% \right ] = (\frac{S_{RH}}{2^{20}}) \times 100\%

温度T:

T (^\circ C) = (\frac{S_{T}}{2^{20}}) \times 200 - 50

2. QuecPython API

QuecPython已具有I2C驱动模块,使用时仅需创建对象,发送读取数据即可轻松实现对I2C设备的控制,主要API如下:

class machine.I2C(I2Cn, MODE)

参数描述:

  • I2Cn - I2C 通路索引号,int类型,说明如下:
    I2C0 : 0 - 通道0
    I2C1 : 1 - 通道1
    I2C2 : 2 - 通道2
  • MODE - I2C 的工作模式,int类型,说明如下:
    STANDARD_MODE : 0 - 标准模式
    FAST_MODE :1 - 快速模式

EC600S-CN引脚布局如下:

EC600S Pin footprint
I2C1 56 SDA_1V8
I2C1 57 SCL_1V8

参考:API_class I2C

I2C.write(slaveaddress, addr, addr_len, data, datalen)
I2C.read(slaveaddress, addr, addr_len, r_data, datalen, delay)

3. 代码时间

  • 初始化AHT10
# Initialization command
AHT10_CALIBRATION_CMD = 0xE1
# Trigger measurement
AHT10_START_MEASURMENT_CMD = 0xAC
# reset
AHT10_RESET_CMD = 0xBA 
def sensor_init(self):
			'''
			传感器初始化,校准
			'''
			# calibration
			self.write_data([self.AHT10_CALIBRATION_CMD, 0x08, 0x00])
			time.sleep_ms(300)  # at last 300ms

def aht10_init(self, addre=0x38, Alise="Ath10"):
		#self.i2c_log = log.getLogger(Alise)
		self.i2c_dev = I2C(I2C.I2C1, I2C.FAST_MODE)  # 返回i2c对象 i2c类功能:用于设备之间通信的双线协议。
		self.i2c_addre = addre
		self.sensor_init()
  • 准备采集
def write_data(self, data):
		print(self.i2c_addre, data, len(data))
		self.i2c_dev.write(self.i2c_addre,
												bytearray(0x00), 0,
												bytearray(data), len(data))
		pass
def Trigger_measurement(self):
		# Trigger data conversion
		self.write_data([self.AHT10_START_MEASURMENT_CMD, 0x33, 0x00])
		time.sleep_ms(200)  # at last delay 75ms
		# check has success
		r_data = self.read_data(6)
		# check bit7
		if (r_data[0] >> 7) != 0x0:
				print("Conversion has error")
		else:
				self.aht10_transformation_temperature(r_data[1:6])
  • 转换数据
def read_data(self, length):
			print("read_data start")
			r_data = [0x00 for i in range(length)]
			r_data = bytearray(r_data)
			print("read_data start1")
			ret = self.i2c_dev.read(self.i2c_addre,
												bytearray(0x00), 0,
												r_data, length,
												0)
			print("read_data start2")
			print('ret',ret)
			print('r_data:',r_data)
			return list(r_data)

def aht10_transformation_temperature(self, data):
		r_data = data
		# 根据数据手册的描述来转化温度
		humidity = (r_data[0] << 12) | (
				r_data[1] << 4) | ((r_data[2] & 0xF0) >> 4)
		humidity = (humidity/(1 << 20)) * 100.0
		print("current humidity is {0}%".format(humidity))
		temperature = ((r_data[2] & 0xf) << 16) | (
				r_data[3] << 8) | r_data[4]
		temperature = (temperature * 200.0 / (1 << 20)) - 50
		print("current temperature is {0}°C".format(temperature))

4. 运行结果

将脚本加载至开发板,运行

>>> uos.listdir('usr')
['system_config.json', 'AHT10_measure.py']
>>> import example
>>> example.exec('usr/AHT10_measure.py')
···
···
current humidity is 54.512%
current temperature is 25.167°C
···
···
>>>

可以看到开发板成功通过AHT10测量到当前温度为25℃,湿度为54.512%!

工程附件
QuecPython_v1.3.pdf
Aosong_AHT10_en_draft_0c.pdf
AHT10_measure.rar
开发板测评
版块: 开发板测评
2023/12/10 15:34
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
最新帖子
树莓派pico 2测评 - 串口萤火工场GD32VW553-IOT测评+蓝牙串口透传树莓派pico 2测评 - 初体验【工程师经验】+ 飞线【开源】zvs142857 2.1A,3A快充 充电宝迷你
热门版块
查看更多
电子元器件
电子DIY
每日打卡
丝印反查
问技术
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计

25

收藏

分享

微信扫码
分享给好友

评论