0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

国民技术N32WB031驱动HS3003采集温湿度

华仔的编程随笔 来源:华仔的编程随笔 作者:华仔的编程随笔 2023-05-02 17:28 次阅读

目的

驱动hs3003温湿度计

步骤

  1. 在原来墨水屏的工程基础上添加HS3003的驱动。
  2. 新建hs3003.c/hs3003.h,并打hs3003.c加入工程。

fd8cc1a28c5d67ef66e037e3c21171e759f96974db736e7e671030a56d06ba5c.png

  1. 我偿试用硬件驱动i2c,但scl即使使用了上位电阻,也不起振,用逻辑分析仪检测如下图:

3b7bd1190103d79d558d5bcbf321b5cea8bc24bce67a64d53cdbaaa3fd3008b5.png

  1. 周转了半天,还得改回来用软件i2c来驱动。hs3003.c驱动程序如下:
#include "hs3003.h"
#include "software_i2c.h"
#include "log.h"

#define I2CT_FLAG_TIMEOUT ((uint32_t)0x1000)
#define I2CT_LONG_TIMEOUT ((uint32_t)(20 * I2CT_FLAG_TIMEOUT))

#define SI2C_SDA_GPIOx 	GPIOB
#define SI2C_SCL_GPIOx 	GPIOB
#define SI2C_SDA_Pin 	GPIO_PIN_8
#define SI2C_SCL_Pin    GPIO_PIN_9

static SI2C_HANDLE SI2C_handle;

void i2c_master_init(){
log_info("\\n this is a software i2c master demo\\r\\n");
if(SI2C_Init(&SI2C_handle,SI2C_SDA_GPIOx, SI2C_SCL_GPIOx, SI2C_SDA_Pin, SI2C_SCL_Pin, 5) == false)
{
log_info("software i2c init fail \\r\\n");
while(1);
}
}

uint32_t Humiture_HS3003_ReadData_Raw(void )
{
uint8_t rx_buf[4] = {0};
uint16_t humi, temp;
float    tmp_f   = 0.0;
float humi_f,temp_f;
SI2C_MasterWrite(&SI2C_handle,I2C_SLAVE_ADDR, NULL, 0);
//8bit->1.2ms
//10bit->2.72ms
//12bit->9.10ms
//14bit->33.90ms
Delay_ms(40);
__retry:		
SI2C_MasterRead(&SI2C_handle, I2C_SLAVE_ADDR, rx_buf, 4);

//		log_info("%x,%x,%x,%x\\n", rx_buf[0], rx_buf[1], rx_buf[2], rx_buf[3]);
//    log_info("state:%x\\n", rx_buf[0] & RM_HS300X_MASK_STATUS_0XC0);
if ((rx_buf[0] & RM_HS300X_MASK_STATUS_0XC0) != RM_HS300X_DATA_STATUS_VALID)
{
Delay_ms(100);
goto __retry;
}
humi = (rx_buf[0] & RM_HS300X_MASK_HUMIDITY_UPPER_0X3F) << 8 | rx_buf[1];
temp = (rx_buf[2] << 8 | (rx_buf[3] & RM_HS300X_MASK_TEMPERATURE_LOWER_0XFC)) >> 2;

humi_f = (float)humi;

humi_f = (humi_f * RM_HS300X_CALC_HUMD_VALUE_100) / RM_HS300X_CALC_STATIC_VALUE;

temp_f = (float)temp;
temp_f = ((temp_f * RM_HS300X_CALC_TEMP_C_VALUE_165) / RM_HS300X_CALC_STATIC_VALUE) - RM_HS300X_CALC_TEMP_C_VALUE_40;

log_info("Temp:%d.%d   ",(int)temp_f,(int)(temp_f*100)%100);
log_info("HUMI:%d.%d\\r\\n",(int)humi_f,(int)(humi_f*100)%100);

return 1;

}

bool Humiture_HS3003_init(void)
{
i2c_master_init();

}
  1. hs3003.h:
#ifndef __HS3003_H__
#define __HS3003_H__

#include "n32wb03x.h"

#define I2C_MASTER_ADDR   0x30
#define I2C_SLAVE_ADDR        0x44<<1
#define HS300X_HUMD_MULTY           0.00006163516
#define HS300X_TEMP_MULTY           0.00006163516

/* Definitions of Mask Data for A/D data */
#define RM_HS300X_MASK_HUMIDITY_UPPER_0X3F       (0x3F)
#define RM_HS300X_MASK_TEMPERATURE_LOWER_0XFC    (0xFC)
#define RM_HS300X_MASK_STATUS_0XC0               (0xC0)

/* Definitions for Status Bits of A/D Data */
#define RM_HS300X_DATA_STATUS_VALID              (0x00) // Status-bit: Valid data

/* Definitions for Calculation */
#define RM_HS300X_CALC_STATIC_VALUE              (16383.0F)
#define RM_HS300X_CALC_HUMD_VALUE_100            (100.0F)
#define RM_HS300X_CALC_TEMP_C_VALUE_165          (165.0F)
#define RM_HS300X_CALC_TEMP_C_VALUE_40           (40.0F)
#define RM_HS300X_CALC_DECIMAL_VALUE_100         (100.0F)

bool Humiture_HS3003_init(void);

uint32_t Humiture_HS3003_ReadData_Raw(void );

#endif

7、在主程序中调用一下:

#include "main.h"
#include "led.h"
#include "key.h"
#include "log.h"
#include "hs3003.h"

unsigned char BlackImage[4736];//Define canvas space

int main(void)
{
unsigned char fen_L,fen_H,miao_L,miao_H;
log_init();

Humiture_HS3003_init();

Humiture_HS3003_ReadData_Raw();

while (1)

{

Humiture_HS3003_ReadData_Raw();

Delay_ms(1000);

}

}

实验效果

152488a4470e169d54322890c576d2a0cb51d8d89a83d67ea4982d2d3f0d9ac8.png

总结

不知道是不是硬件i2c的驱动是不是有问题,反正我的浪费了半天的时间,各种工具用上,最后还是得用软件才搞定。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    11

    文章

    1717

    浏览量

    84338
  • THS3000
    +关注

    关注

    0

    文章

    3

    浏览量

    6260
收藏 人收藏

    评论

    相关推荐

    基于国民技术N32WB031的蓝牙语音遥控器解决方案

    N32WB031系列蓝牙芯片是国民技术新一代高性能、超低功耗的蓝牙5.1芯片,具有丰富的外设接口,在工业/能源、金融/消费、医疗、家电及汽车等行业领域用途非常广泛。本文介绍的蓝牙语音遥控器方案采用
    的头像 发表于 03-08 10:00 523次阅读
    基于<b class='flag-5'>国民</b><b class='flag-5'>技术</b><b class='flag-5'>N32WB031</b>的蓝牙语音遥控器解决方案

    温湿度传感器工作原理 温湿度传感器的接线方法

    温湿度传感器是一种用于测量环境温度和相对湿度的装置。它通常用于工业、农业、气象、室内空调等领域。本文将详细介绍温湿度传感器的工作原理和接线方法。 一、温湿度传感器的工作原理
    的头像 发表于 02-14 18:00 4030次阅读

    温湿度传感器在食品药品安全领域的应用

    温湿度是影响食品药品安全的关键因素之一。在食品药品的生产、存储和运输过程中,温湿度的变化可能引起食品药品的变质、损坏或交叉污染,从而影响其质量和安全性。为了确保食品药品的安全,无线智能温湿度
    的头像 发表于 01-04 17:55 249次阅读
    <b class='flag-5'>温湿度</b>传感器在食品药品安全领域的应用

    4G远程温湿度传感器在仓库中的应用—蜂窝物联

    。为了更好的观测和掌握温湿度的变化,仓库需要安装温湿度传感器实时监测温湿度状态,确保适宜货物储存的温湿度环境。 蜂窝物联仓库存储环境远程监控系统由系统前端4G远程
    的头像 发表于 01-02 09:36 153次阅读

    基于ZigBee技术温湿度监测系统设计

    电子发烧友网站提供《基于ZigBee技术温湿度监测系统设计.pdf》资料免费下载
    发表于 10-31 09:40 1次下载
    基于ZigBee<b class='flag-5'>技术</b>的<b class='flag-5'>温湿度</b>监测系统设计

    瑞萨RA6M3 MCU通过I2C读取HS3001温湿度传感器

    瑞萨RA6M3 MCU通过I2C读取HS3001温湿度传感器
    的头像 发表于 09-26 16:57 516次阅读
    瑞萨RA6M3 MCU通过I2C读取<b class='flag-5'>HS</b>3001<b class='flag-5'>温湿度</b>传感器

    RA4M2开发(4)----读取HS3003数据,并在OLED上显示,串口打印

    HS3003是一种数字式温湿度传感器,可以测量环境中的温度和湿度。读取HS3003的数据需要连接传感器到一个数据采集系统,一般是微处理器或者
    的头像 发表于 07-27 10:14 984次阅读
    RA4M2开发(4)----读取<b class='flag-5'>HS3003</b>数据,并在OLED上显示,串口打印

    【CW32饭盒派开发板试用体验】6.硬件I2C之连接HS300X读取温湿度数据

    器 【CW32饭盒派开发板试用体验】4. ADC采样摇杆模块X轴和Y轴输出 【CW32饭盒派开发板试用体验】5. 极简方式移植FreeRTOS成功 1 HS3003介绍 HS3003是瑞萨的一款温湿度
    发表于 06-07 21:45

    英飞凌PSoC62 实现超低功耗温湿度

    作的一款开发板。 瑞萨的hs3003温湿度传感器 电子墨水屏 选型原因 以上三款都具休有超过功耗性能 程序代码 本次的代码是基于RT-Thread Studio创建的。 电子墨水屏是移植微雪的标准例程。这里
    发表于 06-03 10:14

    HS1101LF湿度传感器在存酒中的应用

    在酿酒过程中,酒厂环境的温度和湿度对酒糟的发酵起着至关重要的作用。要想酿出好酒,就必须严格监控环境中的温湿度等相关数据。随着物联网技术的发展,HS1101LF
    的头像 发表于 06-02 17:28 348次阅读
    <b class='flag-5'>HS</b>1101LF<b class='flag-5'>湿度</b>传感器在存酒中的应用

    HPP845E031R5在监测集装箱监测温湿度值的应用

    HPP845E031R5温湿度传感器是回流焊的双边扁平无铅 (DFN) 封装,尺寸仅为3x3x0.9mm,传感器提供经过校正的线性IC数字输出信号。HPP845E031R5数字湿度传感
    的头像 发表于 06-02 15:03 195次阅读
    HPP845E<b class='flag-5'>031</b>R5在监测集装箱监测<b class='flag-5'>温湿度</b>值的应用

    仓库温湿度物联网采集方案

    U型地下仓库,采集点30个,每个采集采集温度湿度,最远约100米,常温20~30度。需要物联网采集系统将
    的头像 发表于 05-31 18:31 546次阅读
    仓库<b class='flag-5'>温湿度</b>物联网<b class='flag-5'>采集</b>方案

    英飞凌PSC62低功耗温湿度数据采集

    驱动hs3003温湿度传感器,采集完数据后进入深度睡眠模式,以达到节能的目的。
    的头像 发表于 05-30 09:05 41.5w次阅读
    英飞凌PSC62低功耗<b class='flag-5'>温湿度数据采集</b>

    国民技术N32WB031不能下载固件的解决方法

    N32WB031国为把PA4、PA5初始化普通IO后,不能下载固件的解决方法
    的头像 发表于 05-05 09:09 1500次阅读
    <b class='flag-5'>国民</b><b class='flag-5'>技术</b><b class='flag-5'>N32WB031</b>不能下载固件的解决方法

    国民技术N32WB031墨水屏驱动# #从单片机到SOC,系统硬件该如何设计

    单片机N32国民技术
    华仔stm32
    发布于 :2023年04月29日 21:07:56