HI3861开发(四)驱动sht30获取温湿度

2024-09-01 06:04

本文主要是介绍HI3861开发(四)驱动sht30获取温湿度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • sht30介绍
  • 编写代码
  • 烧录测试
  • 总结

sht30介绍

SHT30 是一种数字温湿度传感器,由瑞士的Sensirion公司生产。它能够精确地测量环境的温度和相对湿度,并提供数字输出。

以下是 SHT30 的主要特点和功能:

  1. 高精度测量:SHT30 采用先进的传感器技术,能够以高精度测量环境的温度和相对湿度。温度测量精度为±0.3°C,湿度测量精度为±2%。

  2. 快速响应时间:SHT30 具有快速的响应时间,能够在短时间内提供准确的测量结果。

  3. 低功耗:SHT30 的设计经过优化,具有低功耗特性,适用于需要长期运行的应用场景。

  4. 数字输出:SHT30 通过 I2C 接口与主控设备进行通信,输出数字信号,方便数据的处理和分析。

  5. 宽工作电压范围:SHT30 支持广泛的工作电压范围,从2.4V到5.5V,适用于多种电源供应情况。

  6. 可编程性:SHT30 具有可编程的参数和设置选项,可以根据应用需求进行配置,如测量周期、传感器分辨率等。

  7. 高可靠性:SHT30 采用先进的传感器技术和质量控制,具有高可靠性和稳定性,适用于长期使用和要求精确测量的应用场景。

SHT30 在许多领域都有广泛的应用,包括气象观测、室内环境监测、工业自动化、智能家居等。它的高精度测量和可靠性使其成为许多应用中信赖的温湿度传感器之一。

编写代码

        应用入口demo.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>#include "ohos_init.h"
#include "cmsis_os2.h"
#include "sht30.h"#define TASK_STACK_SIZE 1024 * 8
#define TASK_PRIO 25Data_TypeDef HT_Data;static void sht30_Task(void)
{hw_Init();while (1){Read_Data();printf("\r\n******************************Humidity is  %.2f\r\n", HT_Data.Humidity);printf("\r\n******************************Temperature is  %.2f\r\n", HT_Data.Temperature);usleep(1000000);}
}static void appEntry(void)
{osThreadAttr_t attr;attr.name = "Example_Task";attr.attr_bits = 0U;attr.cb_mem = NULL;attr.cb_size = 0U;attr.stack_mem = NULL;attr.stack_size = TASK_STACK_SIZE;attr.priority = TASK_PRIO;if (osThreadNew((osThreadFunc_t)sht30_Task, NULL, &attr) == NULL){printf("Falied to create Example_Task!\n");}
}APP_FEATURE_INIT(appEntry);

        sht30.c

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <math.h>
#include "cmsis_os2.h"
#include "sht30.h"
#include "wifiiot_errno.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"
#include "wifiiot_i2c.h"
#include "wifiiot_i2c_ex.h"static void IO_Init(void)
{GpioInit();IoSetFunc(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);//设置GPIO_2的复用功能为普通GPIOGpioSetDir(WIFI_IOT_IO_NAME_GPIO_8, WIFI_IOT_GPIO_DIR_OUT);//设置GPIO_2为输出模式IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_IO_FUNC_GPIO_14_GPIO);//设置GPIO_2的复用功能为普通GPIOGpioSetDir(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_GPIO_DIR_OUT);//设置GPIO_2为输出模式IoSetFunc(WIFI_IOT_IO_NAME_GPIO_0, WIFI_IOT_IO_FUNC_GPIO_0_I2C1_SDA);   // GPIO_0复用为I2C1_SDAIoSetFunc(WIFI_IOT_IO_NAME_GPIO_1, WIFI_IOT_IO_FUNC_GPIO_1_I2C1_SCL);   // GPIO_1复用为I2C1_SCLI2cInit(WIFI_IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */I2cSetBaudrate(WIFI_IOT_I2C_IDX_1, 400000);}void SHT30_reset(void)
{WifiIotI2cData sht30_i2c_data = { 0 };uint8_t send_data[2] = { 0x30,0xA2 };sht30_i2c_data.sendBuf = send_data;sht30_i2c_data.sendLen = 2;I2cWrite(WIFI_IOT_I2C_IDX_1,(SHT30_Addr<<1)|0x00,&sht30_i2c_data); 
}void Init_SHT30(void)
{WifiIotI2cData sht30_i2c_data = { 0 };uint8_t send_data[2] = { 0x22,0x36 };sht30_i2c_data.sendBuf = send_data;sht30_i2c_data.sendLen = 2;I2cWrite(WIFI_IOT_I2C_IDX_1,(SHT30_Addr<<1)|0x00,&sht30_i2c_data); 
}static uint8_t SHT3x_CheckCrc(uint8_t data[], uint8_t nbrOfBytes, uint8_t checksum)
{uint8_t crc = 0xFF;uint8_t bit = 0;uint8_t byteCtr ;const int16_t POLYNOMIAL = 0x131;//calculates 8-Bit checksum with given polynomialfor(byteCtr = 0; byteCtr < nbrOfBytes; ++byteCtr){crc ^= (data[byteCtr]);for ( bit = 8; bit > 0; --bit){if (crc & 0x80) crc = (crc << 1) ^ POLYNOMIAL;else crc = (crc << 1);}}if(crc != checksum)return 1;elsereturn 0;}static float SHT3x_CalcTemperatureC(uint16_t u16sT)
{float temperatureC = 0;            // variable for resultu16sT &= ~0x0003;           // clear bits [1..0] (status bits)//-- calculate temperature [℃] --temperatureC = (175 * (float)u16sT / 65535 - 45); //T = -45 + 175 * rawValue / (2^16-1)return temperatureC;}static float SHT3x_CalcRH(uint16_t u16sRH)
{float humidityRH = 0;              // variable for resultu16sRH &= ~0x0003;          // clear bits [1..0] (status bits)//-- calculate relative humidity [%RH] --humidityRH = (100 * (float)u16sRH / 65535);  // RH = rawValue / (2^16-1) * 10return humidityRH;}void hw_Init(void)
{IO_Init();Init_SHT30();
}void Read_Data(void)
{  uint8_t  data[3];    uint16_t dat,tmp;uint8_t SHT3X_Data_Buffer[6]; 																		//byte 0,1 is temperature byte 4,5 is humidityWifiIotI2cData sht30_i2c_data = { 0 };uint8_t send_data[2] = { 0xE0,0x00};sht30_i2c_data.sendBuf = send_data;sht30_i2c_data.sendLen = 2;sht30_i2c_data.receiveBuf = SHT3X_Data_Buffer;sht30_i2c_data.receiveLen = 6;I2cWriteread(WIFI_IOT_I2C_IDX_1,(SHT30_Addr<<1)|0x00,&sht30_i2c_data); 																							//Read bh1750 sensor data //    /* check tem */data[0] = SHT3X_Data_Buffer[0];data[1] = SHT3X_Data_Buffer[1];data[2] = SHT3X_Data_Buffer[2];tmp=SHT3x_CheckCrc(data, 2, data[2]);if( !tmp ) /* value is ture */{dat = ((uint16_t)data[0] << 8) | data[1];HT_Data.Temperature = SHT3x_CalcTemperatureC( dat );    }//    /* check humidity */data[0] = SHT3X_Data_Buffer[3];data[1] = SHT3X_Data_Buffer[4];data[2] = SHT3X_Data_Buffer[5];tmp=SHT3x_CheckCrc(data, 2, data[2]);if( !tmp ) /* value is ture */{dat = ((uint16_t)data[0] << 8) | data[1];HT_Data.Humidity = SHT3x_CalcRH( dat );    }}

        头文件sht30.h

#ifndef __SHT30_H__
#define __SHT30_H__#define SHT30_Addr 0x44typedef struct
{					float    Humidity;        //湿度float    Temperature;     //温度
} Data_TypeDef;extern Data_TypeDef HT_Data;void hw_Init(void);
void Read_Data(void);#endif

烧录测试

         略,没有传感器

总结

        略,没有总结(*.*)

这篇关于HI3861开发(四)驱动sht30获取温湿度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126143

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

pico2 开发环境搭建-基于ubuntu

pico2 开发环境搭建-基于ubuntu 安装编译工具链下载sdk 和example编译example 安装编译工具链 sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 注意cmake的版本,需要在3.17 以上 下载sdk 和ex