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的驱动是不是有问题,反正我的浪费了半天的时间,各种工具用上,最后还是得用软件才搞定。

审核编辑 黄宇

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

    关注

    12

    文章

    1994

    浏览量

    88735
  • THS3000
    +关注

    关注

    0

    文章

    3

    浏览量

    6382
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    动环监控核心组件:温湿度变送器的电子技术与设计研产理念

    在动环监控系统中,温湿度变送器作为关键的环境监测设备,其设计、研发与生产直接关系到监控数据的准确性和系统的稳定性。本文将以温湿度变送器(型号是TH100)为例,客观阐述其背后的技术理念与生产细节
    的头像 发表于 04-28 09:08 468次阅读

    STM32 驱动 SHT40 温湿度测量

    SHT40是一款高精度数字温湿度传感器,采用I²C接口输出数据,具有快速响应、稳定性好等特点。文章详细介绍了其引脚功能、测量指令、加热器指令及使用场景。驱动时序图解析数据读取流程,包括6字节数
    的头像 发表于 04-15 10:14 191次阅读
    STM32 <b class='flag-5'>驱动</b> SHT40 <b class='flag-5'>温湿度</b>测量

    低功耗+LCD常显单芯片蓝牙温湿度计方案

    蓝牙温湿度计是一款将蓝牙BLE低功耗无线通信技术与高精度温湿度传感功能相融合的智能设备。它可以实时、稳定地采集所处环境的温度和湿度数据,并通
    的头像 发表于 04-07 16:13 182次阅读
    低功耗+LCD常显单芯片蓝牙<b class='flag-5'>温湿度</b>计方案

    使用STM32F103ZET6采集DHT11温湿度串口显示

    DHT11是一款数字温湿度传感器,DHT11是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术温湿度传感
    的头像 发表于 03-18 17:06 3765次阅读
    使用STM32F103ZET6<b class='flag-5'>采集</b>DHT11<b class='flag-5'>温湿度</b>串口显示

    纺织车间温湿度数据采集远程监控系统方案

    对精细化的纺织工业来说,确保适宜的温湿度是保证成纱质量的关键。保持适宜的温湿度条件,可以有效提高纤维刚性和弹性,减少纤维与机器部件之间的摩擦及堵塞现象。如果车间相对湿度过低,不仅容易产生静电,导致棉
    的头像 发表于 02-05 15:07 353次阅读
    纺织车间<b class='flag-5'>温湿度数据采集</b>远程监控系统方案

    冷库温湿度监控系统物联网解决方案

    冷库作为生鲜食品、医药试剂、化工原料等物资的核心存储载体,温湿度的稳定性直接决定物资品质与安全。传统冷库温湿度管理存在诸多痛点:人工巡检效率低、误差大,难以实现 24 小时全覆盖监测;温湿度异常后
    的头像 发表于 01-19 16:57 755次阅读

    低功耗蓝牙芯片N32WB031系列断路器应用

    在智能化电气设备快速发展的今天,断路器已不再是简单的电路保护装置,而是集监测、控制、交互于一体的智能节点。实现这一升级,离不开一颗高性能、高可靠性的核心芯片。国民技术推出的N功耗蓝牙芯片N32
    的头像 发表于 12-23 17:18 1053次阅读

    温湿度传感器HTU31D在温湿度控器中的应用优势

    温湿度控制器是一种用于监测和调节环境温度与湿度的设备,广泛应用于农业、仓储、工业生产、家庭等多个领域。其主要功能是维持特定环境条件,以确保产品质量和舒适的居住环境。 温湿度控制器的工作过程是传感器
    的头像 发表于 11-06 14:38 470次阅读
    <b class='flag-5'>温湿度</b>传感器HTU31D在<b class='flag-5'>温湿度</b>控器中的应用优势

    基于LORA无线通讯的祥控多点式烟叶温湿度监测系统

    XKCON祥控多点式烟叶温湿度监测系统基于LORA无线通讯技术,无需复杂的布线工作,缩短了工期,节省了成本;系统可以根据烟厂的实际布局和需求进行灵活配置,实现对各单点无线温湿度检测杆测量信号的
    的头像 发表于 09-23 17:02 931次阅读
    基于LORA无线通讯的祥控多点式烟叶<b class='flag-5'>温湿度</b>监测系统

    一款适用于粉尘、易结露等恶劣环境温湿度监控中的温湿度传感芯片

    温湿度监控系统在恶劣环境中通过传感器实时监测温湿度参数,当达到预设阈值时自动触发预警或调节机制,确保环境状态维持在安全范围内。
    的头像 发表于 07-09 09:41 907次阅读
    一款适用于粉尘、易结露等恶劣环境<b class='flag-5'>温湿度</b>监控中的<b class='flag-5'>温湿度</b>传感芯片

    常见的温湿度传感器类型?

    温湿度传感器是一种用于测量环境温度和湿度的设备,广泛应用于工业、农业、气象等领域。以下是几种常见的温湿度传感器类型及其优缺点: 电容式湿度传感器 电容式
    发表于 06-24 09:24

    温湿度变送器功能有哪些?一文详细解析

    对于很多行业来说,精确的测量以及控制温度和湿度至关重要。想要达到这个目的,往往需要用到温湿度变送器。那么,温湿度变送器究竟有哪些功能呢?下面为大家详细介绍。 一、精确测量温湿度
    发表于 06-03 10:56

    智能仓储:温湿度监控方案应用

    随着仓储环境要求提高,温湿度监控对保障货物品质至关重要。本文介绍一个工厂仓库温湿度监控方案,利用温湿度变送器、LoRa技术和智能监测平台,为仓库业主提供高效、可靠的监测解决方案。仓库
    的头像 发表于 05-29 11:35 957次阅读
    智能仓储:<b class='flag-5'>温湿度</b>监控方案应用

    LoRa无线技术温湿度监测预警系统

    LoRa无线技术温湿度监测预警系统采用LoRa采集器和LoRa网关实现监控区域内的全覆盖,同时在仓储区各个数据采集节点安装温湿度传感器,实
    的头像 发表于 05-14 16:06 1015次阅读
    LoRa无线<b class='flag-5'>技术</b>的<b class='flag-5'>温湿度</b>监测预警系统

    【RA-Eco-RA4M2开发板评测】RT-Thread上驱动I2C温湿度传感器

    框架加进来。 最后把温湿度传感器的组件包选上。 四、驱动 有了RT-Thread的sensor驱动框架和hs300x驱动组件包,对
    发表于 05-08 22:42