HaaS EDU场景式应用学习 - 温湿度计

简介: HaaS EDU场景式应用学习 - 温湿度计

实验介绍

本章主要介绍温湿度计的实现,本产品板载了温湿度传感器SI7006。该传感器不但能测量温度,还能测量相对湿度。本章我们将向大家介绍如何使用haas1000来读取SI7006数字温湿度传感器,从而得到环境温度和相对湿度等信息,并把从温湿度值显示在OLED模块上。
开始学习之前我们先看一下显示效果,如下图所示:

O1CN01qZ6L7Z1SxrAPcv9WY_!!6000000002314-2-tps-1200-800.png

涉及知识点

  • I2C通信原理
  • SI7006光照与接近传感器原理
  • OLED绘图

开发环境准备

硬件


开发用电脑一台 HAAS EDU K1 开发板一块 USB2TypeC 数据线一根
>
  • 1
  • 2
  • 3

软件

AliOS Things开发环境搭建


 
开发环境的搭建请参考 @ref HaaS_EDU_K1_Quick_Start (搭建开发环境章节),其中详细的介绍了AliOS Things 3.3的IDE集成开发环境的搭建流程。
>
  • 1

HaaS EDU K1 DEMO 代码下载


  
HaaS EDU K1 DEMO 的代码下载请参考 @ref HaaS_EDU_K1_Quick_Start (创建工程章节),其中, 选择解决方案: 基于教育开发板的示例 选择开发板: haaseduk1 board configure
>
  • 1
  • 2
  • 3

代码编译、烧录


   
参考 @ref HaaS_EDU_K1_Quick_Start (3.1 编译工程章节),点击 ✅ 即可完成编译固件。 参考 @ref HaaS_EDU_K1_Quick_Start (3.2 烧录镜像章节),点击 "⚡️" 即可完成烧录固件。
>
  • 1
  • 2

I2C通信原理

IIC总线是一种最早由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。
I2C总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。
开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
波形如下图:

O1CN01RChTnX1b9mP4F1JX1_!!6000000003423-2-tps-1007-313.png

SI7006传感器简介

SI7006 是Silicon Lab公司推出的一款相对湿度及温度传感器,其结合了工厂校准湿度和温度传感器元件、模拟-数字转换器,信号处理和一个I2C主机接口。使用业界标准低K电介质聚合物提供了出色的精度和长期稳定性,同时具有低漂移和低滞后。同时其创新的CMOS设计还使其具备很低的功耗。
特征:

  • 相对湿度传感器:
  • ±5%RH(最大)@ 0-80%RH的
  • 温度传感器:
  • ±1.0℃的精确度(最大)@ -10至+ 85°C
  • 0至100%RH的工作范围内
  • 可达-40至+125°C的工作范围
  • 工作电压范围宽(1.9〜3.6V)
  • 低功耗:2.2μW平均功率为3.3V和每秒1个样本
  • I2C主机接口
  • 片上集成加热器
  • 采用3mm x 3mm QFN封装
  • 卓越的长期稳定性
  • 支持工厂校准
  • 在回流和运行寿命的保护
  • 防止污染的灰尘,污垢,日用化工和其它液体

应用:

  • 资产和货物跟踪
  • 汽车气候控制和去雾
  • 婴儿监视器
  • 持续气道正压通气(CPAP)机
  • 洪水和水检测
  • 煤气,火灾和烟雾探测器
  • 手机/智能手机
  • 工业HVAC / R
  • 笔记本电脑/平板电脑
  • 激光打印机
  • 微环境/数据中心
  • PLC和IO模块
  • 远程遥测装置
  • 平板电脑
  • 测试和测量
  • 恒温/恒湿
  • 通风和空调系统
  • 气象站
  • 风力发电逆变器
  • 挡风玻璃和后视镜系统
  • 无线基站
  • 无线传感器网络

OLED绘图

参考上一章节

软硬件环境准备

硬件

1、开发用电脑一台
2、HaaS EDU K1开发板一个 (开发板内置SI7006传感器)
3、USB Type-C 数据线一根

硬件设计

在本实验中,SI7006贴片在主板上,中间I2C与MCU通信,原理图如下所示:

O1CN01uk6ZEJ27v0xC0hp7D_!!6000000007858-2-tps-810-512.png

EDU SI7006部分原理图

软件设计

应用代码部分

文件路径如下:
solutions/eduk1_demo/k1_apps/humiture/humiture.c
solutions/eduk1_demo/k1_apps/humiture/humiture.h


    
si7006_getTempHumidity ( &hump , &temp ) ; sprintf (temp_str , "T:%5.1fC" , temp ) ; sprintf (hump_str , "H:%5.1f%%" , hump ) ; OLED_Icon_Draw ( 14 , 4 , &icon_thermometer_24_24 , 0 ) ; OLED_Icon_Draw ( 14 , 36 , &icon_hygrometer_24_24 , 0 ) ; OLED_Icon_Draw ( 2 , 24 , &icon_skip_left , 0 ) ; OLED_Icon_Draw ( 122 , 24 , &icon_skip_right , 0 ) ; OLED_Show_String ( 42 , 8 , temp_str , 16 , 1 ) ; OLED_Show_String ( 42 , 40 , hump_str , 16 , 1 ) ; OLED_Refresh_GRAM ( ) ; aos_msleep ( 500 ) ;
>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

驱动部分

文件路径如下:
components/peripherals/sensor/drv/drv_temp_humi_si_si7006.c
驱动代码整体主要分为三部分:

  • 获取产品ID
  • 获取温度值
  • 获取湿度值

     
void si7006_getID (uint8_t *id_buf ) { uint8_t reg[ 4] = {Si7006_READ_ID_LOW_0 ,Si7006_READ_ID_LOW_1 ,Si7006_READ_ID_HIGH_0 ,Si7006_READ_ID_HIGH_1} ; hal_i2c_master_send ( &i2c_dev , i2c_dev.config.dev_addr , reg , 2 , 1000 ) ; aos_msleep ( 30 ) ; hal_i2c_master_recv ( &i2c_dev , i2c_dev.config.dev_addr , id_buf , 4 , 1000 ) ; hal_i2c_master_send ( &i2c_dev , i2c_dev.config.dev_addr , &reg[ 2] , 2 , 1000 ) ; aos_msleep ( 30 ) ; hal_i2c_master_recv ( &i2c_dev , i2c_dev.config.dev_addr , &id_buf[ 4] , 4 , 1000 ) ; return ; } bool si7006_getTemperature (float *temperature ) { uint8_t reg = Si7006_MEAS_TEMP_NO_MASTER_MODE ; uint8_t read_data[ 2] = { 0} ; unsigned int value ; hal_i2c_master_send ( &i2c_dev , i2c_dev.config.dev_addr , &reg , 1 , 1000 ) ; aos_msleep ( 30 ) ; hal_i2c_master_recv ( &i2c_dev , i2c_dev.config.dev_addr , read_data , 2 , 1000 ) ; value = (read_data[ 0] < < 8 ) | read_data[ 1] ; LOGI ( "APP" , "% 0x - - % 0x - - > 0x%x\n" , read_data[ 0] ,read_data[ 1] ,value ) ; / / A temperature measurement will always return XXXXXX00 in the LSB field. if (value & 0xFFFC ) { *temperature = ( 175.72f * (float )value ) / 65536.0f - 46.85f ; LOGI ( "APP" , "temperature : % 2f \n" , *temperature ) ; } else { LOGI ( "APP" , " Error on temp\n" ) ; return 1 ; } return 0 ; } / * i2c – the i2c device dev_addr – device address mem_addr – mem address mem_addr_size – mem address data – i2c master send data size – i2c master send data size * / bool si7006_getHumidity (float *humidity ) { uint8_t reg = Si7006_MEAS_REL_HUMIDITY_NO_MASTER_MODE ; uint8_t read_data[ 3] = { 0} ; unsigned int value ; hal_i2c_master_send ( &i2c_dev , i2c_dev.config.dev_addr , &reg , 1 , 1000 ) ; aos_msleep ( 30 ) ; hal_i2c_master_recv ( &i2c_dev , i2c_dev.config.dev_addr , read_data , 2 , 1000 ) ; value = (read_data[ 0] < < 8 ) | read_data[ 1] ; LOGI ( "APP" , "% 0x - - % 0x - - > 0x%x\n" , read_data[ 0] ,read_data[ 1] ,value ) ; if (value & 0xFFFE ) { *humidity = ( ( 125.0f * (float )value ) / 65535.0f ) - 6.0f ; LOGI ( "APP" , "humidity : %f \n" , *humidity ) ; } else { LOGI ( "APP" , " Error on humidity\n" ) ; return 1 ; } return 0 ; } / / get temp and humidity void si7006_getTempHumidity (float *humidity , float *temperature ) { si7006_getTemperature (temperature ) ; si7006_getHumidity (humidity ) ; }
>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

开发者支持

HaaS官方:https://haas.iot.aliyun.com/
HaaS技术社区:https://blog.csdn.net/HaaSTech
开发者钉钉群和公众号见下图,开发者钉钉群每天都有技术支持同学值班。
在这里插入图片描述

            <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-d7a94ec6ab.css" rel="stylesheet">
            <link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-49037e4d27.css" rel="stylesheet">
    </div>
相关文章
|
10月前
|
JavaScript 前端开发 Shell
Flow-CLI 全新升级,轻松对接 Sonar 实现代码扫描和红线卡点
Flow-CLI 使用的典型场景如:自定义开发一个 Sonar 扫描步骤,以在流水中触发 Sonar 扫描,并以扫描结果作为红线卡点,以保证代码质量;对接三方自有审批平台,在发布前进行检查审批,审批通过才允许发布。接下来,我们就以对接 Sonar 服务为例,手把手教你开发一个带红线功能的 Sonar 扫描步骤。
695 125
|
8月前
|
存储 人工智能 自然语言处理
RAL-Writer Agent:基于检索与复述机制,让长文创作不再丢失关键信息
RAL-Writer Agent是一种专业的人工智能写作辅助技术,旨在解决生成高质量、内容丰富的长篇文章时所面临的技术挑战,确保全文保持连贯性和相关性。本研究将系统分析RAL-Writer的核心技术架构、功能特点及其在内容创作、学术研究和专业交流领域的应用前景。
160 4
RAL-Writer Agent:基于检索与复述机制,让长文创作不再丢失关键信息
|
10月前
|
人工智能 监控 安全
云端问道18期实践教学-AI 浪潮下的数据安全管理实践
本文主要介绍AI浪潮下的数据安全管理实践,主要分为背景介绍、Access Point、Bucket三个部分
373 54
|
8月前
|
人工智能 IDE 测试技术
通义灵码2.0 - AI 程序员: AI 编程新时代的卓越助力
通义灵码是一款强大的AI编程助手,尤其在单元测试自动生成方面表现出色。它通过简化操作流程,快速生成覆盖广泛、质量较高的测试用例,支持直接编译与运行,显著提升开发效率。相比人工编写,通义灵码能大幅缩短时间成本,并更全面地覆盖边界和异常情况,但特定业务逻辑仍需人工补充。作为开发者的好帮手,它助力高效完成高质量单元测试,推动软件开发迈向新台阶。
26936 84
|
8月前
|
存储 关系型数据库 MySQL
携程面试:100 亿分库分表 如何设计? 核弹级 16字真经, 让面试官彻底 “沦陷”,当场发offer!
携程面试:100 亿分库分表 如何设计? 核弹级 16字真经, 让面试官彻底 “沦陷”,当场发offer!
携程面试:100 亿分库分表 如何设计?  核弹级 16字真经, 让面试官彻底 “沦陷”,当场发offer!
|
8月前
|
人工智能 安全 前端开发
github和npm开启2FA双重身份验证无法登陆
随着安全需求提升,许多应用如GitHub和npm已强制启用2FA(双重身份验证)。2FA通过用户名、密码及动态验证码增强账号安全性。若手机丢失或TOTP应用失效,可使用开启2FA时生成的recovery code登录并重新绑定。推荐使用大厂的TOTP工具,如Microsoft Authenticator、Google Authenticator等,避免小应用停服风险。若无备份码,只能通过人工申诉找回账号。
479 15
github和npm开启2FA双重身份验证无法登陆
|
9月前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
395 25
Linux系统之whereis命令的基本使用
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
人人都能读懂的大模型入门指南 - Transformer与Attention机制
人人都能读懂的大模型入门指南 - Transformer与Attention机制
292 5
人人都能读懂的大模型入门指南 - Transformer与Attention机制
|
8月前
|
存储 缓存 算法
G1原理—3.G1是如何提升垃圾回收效率
本文深入探讨了G1垃圾回收器提升GC效率的核心机制,包括记忆集(RSet)、位图(BitMap)和卡表(CardTable)的设计与作用。记忆集通过记录跨代引用避免了不必要的老年代遍历,位图用于高效描述内存使用状态以优化标记过程,而卡表则在节约记忆集内存的同时提供更详细的引用信息。此外,文章还解析了DCQ(Dirty Card Queue)和DCQS(Dirty Card Queue Set)机制如何异步更新RSet,确保在高并发场景下的性能与准确性。这些设计共同提升了G1在标记、清理及整理内存时的效率。
403 10
|
8月前
|
SQL 人工智能 数据处理
《AI赋能SQL Server,数据处理“狂飙”之路》
在数据爆炸的时代,SQL Server作为主流关系型数据库管理系统面临复杂查询与海量数据的挑战。引入人工智能(AI)为优化查询性能提供了全新路径。AI能精准洞察查询瓶颈,优化执行计划;通过预测性维护提前预防性能隐患;智能管理索引以提升查询效率;并基于持续学习实现动态优化。这些优势不仅提高数据处理效率、降低运营成本,还助力企业在数字化竞争中抢占先机,推动SQL Server与AI深度融合,为企业可持续发展注入新动能。
276 4