前言
干活中用到了SHT30,其实是对应的转串口板子,写了相应的驱动程序,放出来。
好像SHT20和30几乎是一样的,所以不用纠结这个。
这个模块本身的协议比较简单,所以模块的驱动也很小巧。
驱动被设计为拥有指令器和接收机两个部分,完全被动方式运行,与具体的平台解耦。
SHT30简介
概述
SHT20是由瑞士推出的数字温湿度传感器,基于领先世界的CMOSens数字传感技术,具有极高的可靠性和卓越的长期稳定性。全量程标定,两线数字接口,可与单片机直接相连,大大缩短研发时间、简化外围电路并降低费用。此外,体积微小、响应迅速、低能耗、可浸没、抗干扰能力强、温湿一体,兼有露点测量,性价比高,使该产品能够适于多种场合的应用。

通信协议
(1) 串口通信参数
电平:TTL
波特率:115200
停止位:1
校验位:0
(2)输出格式
输出字符串格式: Temp = XX.XXX Hum = XX.XXX\r\n
(3)控制指令:下面指令需要发送两次,第一次使模块由工作模式进入到配置模式,第二次发送才是设置模块。
设置回传速度:

设置报警值(这个驱动没有实现):

驱动文件
SHT30Driver.h
/*
*******************************************************************************************
*
* SHT30 DRIVER MODULE
* SHT30驱动模块
*
* File : SHT30Driver.h
* By : Lin Shijun(https://blog.csdn.net/lin_strong)
* Date : 2020/06/17
* version: V1.1
* History: 2020/04/29 V1.0 the prototype
* 2020/06/17 V1.1 find that SHT30's data is "XXXX Hum = XXXX"
* but not "XXXX Humi = XXXX" in SHT20, so fix it.
* Note : The SHT30 driver is divided into two part, i.e. cmder and recver. The cmder is for
* sending the SHT30 command. The recver is for resolving data from the SHT30.
********************************************************************************************
*/
#ifndef SHT30DRIVER_H
#define SHT30DRIVER_H
/*
******************************************************************************************
* INCLUDE
******************************************************************************************
*/
#include <stdint.h>
/*
******************************************************************************************
* DEBUG CONFIGURATION
******************************************************************************************
*/
// to enable debug messages in this module
// #define SHT30_DEBUG
/*
******************************************************************************************
* TYPE DEFINE
******************************************************************************************
*/
typedef struct SHT30STRUCT_DATA{
float temp; // °C
float humi; // percent
} SHT30Data;
typedef void (* SHT30FUNC_DATA)(SHT30Data data);
typedef enum {
SHT30SR_10Hz ,
SHT30SR_5Hz ,
SHT30SR_2Hz ,
SHT30SR_1Hz ,
SHT30SR_0d5Hz, // 0.5Hz
SHT30SR_0d2Hz, // 0.2Hz
SHT30SR_0d1Hz, // 0.1Hz
}SHT30SampleRate;
/*
************************************************************************************
* INTERFACES
************************************************************************************
*/
void SHT30Cmder_Init(void (* outChannel)(uint8_t *buf, uint16_t len));
void SHT30Cmder_Destroy(void);
void SHT30Cmder_setSampleRate(SHT30SampleRate value);
void SHT30Recver_Init(SHT30FUNC_DATA onRecvData);
// Call it to modify the call-back function.
void SHT30Recver_RegisterCallback(SHT30FUNC_DATA onRecvData);
void SHT30Recver_CleanupBuffer(void);
// Feed the receiver every byte received so that receiver can notify user
// the resolved data for each frame.
void SHT30Recver_Feed(uint8_t nextByte);
void SHT30Recver_Destroy(void);
#endif // of SHT30DRIVER_H
SHT30Recver.c
/*
*******************************************************************************************
*
* SHT30 RECEIVER MODULE
* SHT30驱动模块 - 接收机
*
* File : SHT30Recver.c
* By : Lin Shijun(https://blog.csdn.net/lin_strong)
* Date : 2020/06/17
* version: V1.1
* History: 2020/06/17
* Note :
********************************************************************************************
*/
/*
*********************************************************************************************
* INCLUDES
*********************************************************************************************
*/
#include <string.h>
#include <ctype.h>
#include "SHT30Driver.h"
#include "RxMac.h"
#ifndef SHT30_DEBUG
#undef _DEBUG
#endif
#include "DebugMsg.h"
/*
*********************************************************************************************
* LOCAL FUNCTION
*********************************************************************************************
*/

本文详细介绍了SHT30温湿度传感器的驱动设计与实现,包括通信协议、驱动模块结构、代码示例及调试技巧。适用于嵌入式系统开发人员快速掌握SHT30的使用。

231

被折叠的 条评论
为什么被折叠?



