概述hs3003是一种数字式温湿度传感器,可以测量环境中的温度和湿度。读取hs3003的数据需要连接传感器到一个数据采集系统,一般是微处理器或者单片机。以下是一个简单的读取hs3003数据的概述:
连接电路:将hs3003传感器连接到微处理器或单片机的gpio引脚。需要注意hs3003的电气特性,比如供电电压和信号电平等。
发送命令:发送读取温湿度数据的命令到hs3003传感器。具体的命令格式和通信协议需要参考hs3003的数据手册。
接收数据:等待hs3003传感器回应,并接收传感器发送的数据。hs3003传感器的数据一般是经过数字转换后的二进制数据,需要解析成温湿度值。
解析数据:将接收到的二进制数据解析成温湿度值。具体的解析算法需要参考hs3003的数据手册,一般涉及到位移、位运算、符号扩展等操作。
处理数据:对得到的温湿度值进行处理,比如校准、滤波、显示等。
循环读取:根据需要循环执行步骤2到5,以实现连续读取hs3003传感器的温湿度数据。 需要注意的是,hs3003传感器的使用和读取数据需要按照数据手册的规范和建议操作,否则可能会导致数据精度降低、传感器损坏等问题。
视频教学[https://www.bilibili.com/video/bv1th4y1r7of/]
csdn课程csdn课程更加详细。
[https://edu.csdn.net/course/detail/36131]
样品申请[https://www.wjx.top/vm/wbbmsfp.aspx#]
硬件准备首先需要准备一个开发板,这里我准备的是芯片型号r7fam2ad3cfp的开发板:
样品申请[https://www.wjx.top/vm/wbbmsfp.aspx#]
iic配置配置ra4m2的i2c接口,使其作为i2c master进行通信。 对于oled的iic配置,可以查看往期的博客。 查看hs3003说明书,最小电路图如下所示。
由于需要读取hs3003数据,需要使用iic接口,这里使用pmod2上的接口(p410和p411)。
点击stacks->new stack->connectivity -> i2c master(r_sci_i2c)。
查看说明书可以得知,isl29035的地址为0x44(1000100)。
设置iic的配置。
r_sci_i2c_open()函数原型
r_sci_i2c_open()函数为执行iic初始化,开启配置如下所示。
/* initialize the i2c module */ err = r_sci_i2c_open(&g_i2c0_ctrl, &g_i2c0_cfg); /* handle any errors. this function should be defined by the user. */ assert(fsp_success == err);r_sci_i2c_write()函数原型
r_sci_i2c_write()函数是向iic设备中写入数据,写入格式如下所示。
err = r_sci_i2c_write(&g_i2c0_ctrl, &g_i2c_tx_buffer[0], i2c_buffer_size_bytes, false); assert(fsp_success == err);r_sci_i2c_read()函数原型
r_sci_i2c_read()函数是向iic设备中读取数据,读取格式如下所示。
err = r_sci_i2c_write(&g_i2c0_ctrl, &g_i2c_tx_buffer[0], i2c_buffer_size_bytes, false); assert(fsp_success == err);sci_i2c_master_callback()回调函数对于数据是否发送完毕,可以查看是否获取到i2c_master_event_tx_complete字段。
/* callback function */i2c_master_event_t i2c_event1 = i2c_master_event_aborted;void sci_i2c_master_callback0(i2c_master_callback_args_t *p_args){ /* todo: add your own code here */ i2c_event1 = i2c_master_event_aborted; if (null != p_args) { /* capture callback event for validating the i2c transfer event*/ i2c_event1 = p_args- >event; }}hs3003写数据对于hs3003写数据,手册上的操作方式如下所示。 设备地址+操作地址+数据
初始化程序如下所示。
void humiture_hs3003_writeregister( int reg_address, uint8_t val){ uint8_t ii[2]={0x00,0x00}; ii[0] = reg_address; ii[1] = val; err = r_sci_i2c_write(&g_i2c0_ctrl, ii, 0x02, false); assert(fsp_success == err); /* since there is nothing else to do, block until callback triggers*/ //while ((i2c_master_event_tx_complete != i2c_event) && timeout_ms) while ((i2c_master_event_tx_complete != i2c_event1) && timeout_ms1 >0) { r_bsp_softwaredelay(1u, bsp_delay_units_microseconds); timeout_ms1--; } if (i2c_master_event_aborted == i2c_event1) { __bkpt(0); } /* read data back from the i2c slave */ i2c_event1 = i2c_master_event_aborted; timeout_ms1 = 100000;}hs3003读数据对于读取数据,可以直接在发送地址后,进行读取,当时需要注意再发送完地址后,要有等待时间。
读取操作函数如下所示,先发送操作地址,在进行读取,这里是一次读取32位。
uint32_t humiture_hs3003_readregister32(uint8_t reg_address) { uint32_t value; uint8_t data[4]; timeout_ms1 = 100000; /* read data from i2c slave */ err = r_sci_i2c_read(&g_i2c0_ctrl, &data, 0x04, false); assert(fsp_success == err); while ((i2c_master_event_rx_complete != i2c_event1) && timeout_ms1) { r_bsp_softwaredelay(1u, bsp_delay_units_milliseconds); timeout_ms1--; } if (i2c_master_event_aborted == i2c_event1) { __bkpt(0); } i2c_event1 = i2c_master_event_aborted; timeout_ms1 = 100000; value=data[0]; value< <=8; value|=data[1]; value< <=8; value|=data[2]; value< 1.2ms //10bit- >2.72ms //12bit- >9.10ms //14bit- >33.90ms if(resolution==8) r_bsp_softwaredelay(1200u, bsp_delay_units_microseconds); else if(resolution==10) r_bsp_softwaredelay(2720u, bsp_delay_units_microseconds); else if(resolution==12) r_bsp_softwaredelay(9100u, bsp_delay_units_microseconds); else r_bsp_softwaredelay(34u, bsp_delay_units_milliseconds); data=humiture_hs3003_readregister32(hs300x_adr); return data;}对于读取的数据,需要进行处理。 湿度在后两个字节的15-2位,温度在前2个字节的13-0位。
对于原始的数据,要对他进行处理。
data=humiture_hs3003_readdata_raw(14); temp = (float)( (data & 0xffff) > > 2);//只要低十六位 temp = temp*hs300x_temp_multy*165-40;//hs300x_temp_multy- >0.00006163516(1/(2^14-1) ) humidity = (float)( (data > > 16) &0x3fff );//只要高十六位,且最高2位不要 humidity = humidity*hs300x_humd_multy*100;//hs300x_humd_multy- >0.00006163516(1/(2^14-1) )实现效果正常显示数据。
同时串口也可以打印数据。
年报后市值蒸发百亿,但物联网营收438亿,小米的未来将何去何从
树莓派学习笔记——修改树莓派软件源
第100届中国电子展11月上海,共同筑造电子行业“摩天大楼”!
Ayla携手Google云端平台提供端到端物联网解决方案
智能仓储货架灯光拣选拣货系统助力工业生产升级
RA4M2开发(4)----读取HS3003数据,并在OLED上显示,串口打印
光幕传感器的工作原理及应用特点
我国互联网普及率达67.0%,数字经济新业态助力提升中国经济“韧性”
发光二极管的限流电阻选择多大的阻值?为什么?
Intel和SK Hynix提出闪存未来的两项重要进展
刷脸时代,5G+智慧零售方案驱动零售场景创新
小米6最全信息汇总:参数售价曝光,小米6Plus或同步发售
RFS推出2款新品 丰富了其备受欢迎的RFX-TREME三频天线产品系列
千元机360N5今日发布:骁龙653+6G内存仅1399元!
面向信号处理过程的ADC特性使传感器连接变得简单
解决电动车充能“痛点”,换电模式迎来发展风口
赛普拉斯恩智浦公布2017年Q2业绩 汽车电子前景看好
泄放电阻的原理 泄放电阻大小如何选择
借助 NVIDIA DPU 和 NVIDIA DOCA 为人工智能时代的数据中心带来变革
欧盟将对数字平台征税,或成欧美贸易紧张的导火线