HaaS轻应用(Python): si7006温湿度传感器案例

简介: HaaS轻应用(Python): si7006温湿度传感器案例

1、概述

si7006是一个SILICON LABS生产的温湿度传感器, 具有低功耗,高精度的温湿度检测,它是工厂校准,I2C接口的数字芯片。可检测温度-10~85°C (误差+1°C), 湿度 0~90% RH(误差5%RH)。

HaaS EDU K1物联网教育开发板已经集成了这款芯片, 用于温湿度检测的演练。

AliOS Things 3.3系统提供了Python轻应用框架,其包括对底层设备驱动的封装,开发者可以利用python轻松实现对底层设备的编程。

下面演示如何通过简短的python代码实现对I2C设备si7006的编程。

 

2、硬件环境

HaaS EDU K1中自带si7006传感器,相关购买链接如下:
HaaS EDU K1购买链接

 

3、软件环境

下载和烧录Python轻应用的最新的EDK固件。参考 HaaS EDU K1 Python轻应用固件下载

 

4、SI7006驱动代码

利用python控制外设的前提是需要把外设的相关信息,提供给python轻应用框架。  我们提供了board.json配置文件,用来描述板子的配置信息。
HaaS EDU K1开发板的board.json 中si7006的配置片段如下, 里面包含这款芯片的I2C的关键配置包括I2C port, devAddr等。

  1.   "si7006": {
  2.       "type": "I2C",
  3.       "port": 1,
  4.       "addrWidth": 7,
  5.       "freq": 400000,
  6.       "mode": "master",
  7.       "devAddr": 64
  8.     } ,

  

si7006的主要实现代码模块在si7006.py。 AliOS Things 3.3的python轻应用框架,提供driver的模块,实现对底层设备驱动的封装, 要想操作底层设备需要导入这个模块。

si7006芯片是I2C接口的,所以主要依赖driver模块中的I2C class提供的方法。 如果你操作的设备也是I2C接口的,可以参考本示例如下代码。

  1. # -*- coding: UTF-8 -*-
  2. """
  3. The driver for Si7006 chip, it is a temperature and humidity sensor.
  4. """
  5. from driver import I2C
  6. from utime import sleep_ms
  7. # The register address in Si7006 controller.
  8. Si7006_MEAS_REL_HUMIDITY_MASTER_MODE    = 0xE5
  9. Si7006_MEAS_REL_HUMIDITY_NO_MASTER_MODE = 0xF5
  10. Si7006_MEAS_TEMP_MASTER_MODE            = 0xE3
  11. Si7006_MEAS_TEMP_NO_MASTER_MODE         = 0xF3
  12. Si7006_READ_OLD_TEMP                    = 0xE0
  13. Si7006_RESET                            = 0xFE
  14. Si7006_READ_ID_LOW_0                    = 0xFA
  15. Si7006_READ_ID_LOW_1                    = 0x0F
  16. Si7006_READ_ID_HIGH_0                   = 0xFC
  17. Si7006_READ_ID_HIGH_1                   = 0xC9
  18. Si7006_READ_Firmware_Revision_0         = 0x84
  19. Si7006_READ_Firmware_Revision_1         = 0xB8
  20. class SI7006Error(Exception):
  21.     def __init__(self, value=0, msg="si7006 common error"):
  22.         self.value = value
  23.         self.msg = msg
  24.     def __str__(self):
  25.         return "Error code:%d, Error message: %s" % (self.value, str(self.msg))
  26.     __repr__ = __str__
  27. class SI7006(object):
  28.     """
  29.     This class implements SI7006 chip's functions.
  30.     """
  31.     def __init__(self):
  32.         self.i2cDev = None
  33.     def open(self, devid):
  34.         self.i2cDev = I2C()
  35.         self.i2cDev.open(devid)
  36.     def getVer(self):
  37.         """
  38.         Get the firmware version of the chip.
  39.         """
  40.         reg = bytearray([Si7006_READ_Firmware_Revision_0, Si7006_READ_Firmware_Revision_1])
  41.         self.i2cDev.write(reg)
  42.         sleep_ms( 30)
  43.         version = bytearray( 1)
  44.         self.i2cDev.read(version)
  45.         return version[ 0]
  46.     def getID(self):
  47.         """Get the chip ID."""
  48.         reg = bytearray([Si7006_READ_ID_LOW_0, Si7006_READ_ID_LOW_1])
  49.         self.i2cDev.write(reg)
  50.         sleep_ms( 30)
  51.         id_buf_low = bytearray( 4)
  52.         self.i2cDev.read(id_buf_low)
  53.         reg = bytearray([Si7006_READ_ID_HIGH_0, Si7006_READ_ID_HIGH_1])
  54.         id_buf_high = bytearray( 4)
  55.         self.i2cDev.read(id_buf_high)
  56.         return id_buf_low + id_buf_high
  57.     def getTemperature(self):
  58.         """Get temperature."""
  59.         reg = bytearray([Si7006_MEAS_TEMP_NO_MASTER_MODE])
  60.         self.i2cDev.write(reg)
  61.         sleep_ms( 30)
  62.         readData = bytearray( 2)
  63.         self.i2cDev.read(readData)
  64.         value = (readData[ 0] << 8 | readData[ 1])
  65.         if (value & 0xFFFC):
  66.             temperature = ( 175.72 * value) / 65536.0 - 46.85
  67.             return temperature
  68.         else:
  69.             raise SI7006Error( "failed to get temperature.")
  70.     def getHumidity(self):
  71.         """Get humidity."""
  72.         reg = bytearray([Si7006_MEAS_REL_HUMIDITY_NO_MASTER_MODE])
  73.         self.i2cDev.write(reg)
  74.         sleep_ms( 30)
  75.         readData = bytearray( 2)
  76.         self.i2cDev.read(readData)
  77.         value = (readData[ 0] << 8) | readData[ 1]
  78.         if (value & 0xFFFE):
  79.             humidity = ( 125.0 * value) / 65535.0 - 6.0
  80.             return humidity
  81.         else:
  82.             raise SI7006Error( "failed to get humidity.")
  83.     def getTempHumidity(self):
  84.         """Get temperature and humidity."""
  85.         temphumidity = [ 0, 0]
  86.         temphumidity[ 0] = self.getTemperature()
  87.         temphumidity[ 1] = self.getHumidity()
  88.         return temphumidity
  89.     def close(self):
  90.         self.i2cDev.close()

以上是Python轻应用对于SI7006传感器的封装,默认已经集成到了Python轻应用的固件当中,通过以下命令导入到Python 轻应用中使用

from si7006 import SI7006

 

5、Python 轻应用测试代码

  1. "" "
  2. Testing si7006 python driver
  3. The below i2c configuration is needed in your board.json.
  4. "si7006 ": {
  5.   "type ": "I2C ",
  6.   "port ": 1,
  7.   "addrWidth ": 7,
  8.   "freq ": 400000,
  9.   "mode ": "master ",
  10.   "devAddr ": 64
  11. }
  12. " ""
  13. from si7006 import SI7006
  14. print( "Testing si7006 ...")
  15. si7006Dev = SI7006()
  16. si7006Dev.open( "si7006")
  17. version = si7006Dev.getVer()
  18. print( "si7006 version is: %d" % version)
  19. chipID = si7006Dev.getID()
  20. print( "si7006 chip id is:", chipID)
  21. temperature = si7006Dev.getTemperature()
  22. print( "The temperature is: %f" % temperature)
  23. humidity = si7006Dev.getHumidity()
  24. print( "The humidity is: %f" % humidity)
  25. si7006Dev.close()
  26. print( "Test si7006 success!")

 

演示过程

 

测试结果

  1. ( ash: /data)# python /data /python-apps/driver /i2c/test_si7006.py
  2. Testing si7006 ...
  3. si7006 version is: 32
  4. si7006 chip id is:_space_bytearray(b '\x00\x00?\xeb\xe1\xf0\xbe"')
  5. The temperature is: 53.182993
  6. The humidity is: 17.785000
  7. Test si7006 success!
  8. free python heap mm

测试结果是53°C, 湿度约为17.8%,注意测试使用的HaaS EDU K1物联网教育开发板只是教学用的,不是产品。所以它的温湿度传感器是完全封闭在板子上的,测试结果显示的是板子的温湿度,而不是环境中的温湿度。

 

6、总结

使用Python轻应用框架开发控制一个I2C设备, 只需要很简短的代码就可以实现,而且还可以利用Python语言的简洁和丰富的组件库的能力,省去传统嵌入式开发中编译,烧录等繁琐的步骤,大大缩短产品开发周期,快来一试吧。

 

技术交流

Python轻应用继承了Python易学易用的特点,同时提供了基于嵌入式硬件的基础库封装,让开发者可以很方便的通过交互式的环境,实时进行嵌入式开发,让嵌入式开发也变得简单方便。

如需更多技术支持,可加入钉钉开发者群,享受一对一的技术支持。

 

相关文章
|
27天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
人工智能 安全 Java
Java和Python在企业中的应用情况
Java和Python在企业中的应用情况
61 7
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
62 3
|
2月前
|
机器学习/深度学习 算法 数据挖掘
线性回归模型的原理、实现及应用,特别是在 Python 中的实践
本文深入探讨了线性回归模型的原理、实现及应用,特别是在 Python 中的实践。线性回归假设因变量与自变量间存在线性关系,通过建立线性方程预测未知数据。文章介绍了模型的基本原理、实现步骤、Python 常用库(如 Scikit-learn 和 Statsmodels)、参数解释、优缺点及扩展应用,强调了其在数据分析中的重要性和局限性。
65 3
|
2月前
|
存储 监控 安全
如何在Python Web开发中确保应用的安全性?
如何在Python Web开发中确保应用的安全性?
|
5天前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
45 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
2月前
|
存储 人工智能 搜索推荐
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
99 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
|
2月前
|
存储 前端开发 API
Python在移动应用开发中的应用日益广泛
Python在移动应用开发中的应用日益广泛
54 10
|
30天前
|
缓存 开发者 Python
深入探索Python中的装饰器:原理、应用与最佳实践####
本文作为技术性深度解析文章,旨在揭开Python装饰器背后的神秘面纱,通过剖析其工作原理、多样化的应用场景及实践中的最佳策略,为中高级Python开发者提供一份详尽的指南。不同于常规摘要的概括性介绍,本文摘要将直接以一段精炼的代码示例开篇,随后简要阐述文章的核心价值与读者预期收获,引领读者快速进入装饰器的世界。 ```python # 示例:一个简单的日志记录装饰器 def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with args: {a
40 2
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###