OpenHarmony鸿蒙硬件-Kaihong_Hi3861_温湿度感应板-获取温湿度 作者:马育民 • 2026-03-29 14:24 • 阅读:10001 [OpenHarmony鸿蒙硬件-Kaihong_Hi3861 温湿度感应板介绍](https://www.malaoshi.top/show_1GW32A2EXayC.html "OpenHarmony鸿蒙硬件-Kaihong_Hi3861 温湿度感应板介绍") ``` // 标准输入输出头文件(printf) #include // 延时函数头文件(usleep) #include // OpenHarmony 1.0 老版 GPIO 驱动头文件 #include "wifiiot_gpio.h" // GPIO 复用功能配置头文件 #include "wifiiot_gpio_ex.h" // OpenHarmony 1.0 老版 I2C 驱动头文件 #include "wifiiot_i2c.h" // 错误码定义 #include "wifiiot_errno.h" // 解决 uint8_t / uint16_t 未定义问题 #include // 系统启动入口宏 SYS_RUN 必须包含 #include "ohos_init.h" // SHT40 I2C 8位地址(深开鸿专用) #define SHT40_ADDR 0x88 // SHT40 测量命令(中等精度) #define SHT40_CMD_MEASURE 0xFD /** * @brief SHT40 初始化(GPIO + I2C) */ static void SHT40_Init(void) { // 初始化GPIO模块 GpioInit(); // 设置GPIO13为I2C0_SDA IoSetFunc(WIFI_IOT_IO_NAME_GPIO_13, WIFI_IOT_IO_FUNC_GPIO_13_I2C0_SDA); // 设置GPIO14为I2C0_SCL IoSetFunc(WIFI_IOT_IO_NAME_GPIO_14, WIFI_IOT_IO_FUNC_GPIO_14_I2C0_SCL); // 初始化I2C0,速率100KHz I2cInit(WIFI_IOT_I2C_IDX_0, 100000); } /** * @brief 读取SHT40温湿度数据 * @param temp 温度值输出指针 * @param humi 湿度值输出指针 * @return 0成功 */ static int SHT40_ReadData(float *temp, float *humi) { uint8_t cmd = SHT40_CMD_MEASURE; uint8_t raw_data[6] = {0}; WifiIotI2cData i2c_data = {0}; // 发送测量命令 i2c_data.sendBuf = &cmd; i2c_data.sendLen = 1; I2cWrite(WIFI_IOT_I2C_IDX_0, SHT40_ADDR, &i2c_data); // 等待测量完成 usleep(10000); // 读取6字节原始数据 i2c_data.receiveBuf = raw_data; i2c_data.receiveLen = 6; I2cRead(WIFI_IOT_I2C_IDX_0, SHT40_ADDR, &i2c_data); // 拼接两个8位数据,转换为16位原始温度值 uint16_t temp_raw = (raw_data[0] << 8) | raw_data[1]; // SHT40官方公式,计算真实温度 *temp = -45.0f + 175.0f * temp_raw / 65535.0f; // 拼接两个8位数据,转换为16位原始湿度值 uint16_t humi_raw = (raw_data[3] << 8) | raw_data[4]; // SHT40官方公式,计算真实湿度 *humi = -6.0f + 125.0f * humi_raw / 65535.0f; // 限制湿度范围在 0%~100% if (*humi < 0) *humi = 0; if (*humi > 100) *humi = 100; return 0; } /** * @brief 主任务函数 */ void sht40_main(void) { float temperature, humidity; // 传感器初始化 SHT40_Init(); // 循环读取并打印温湿度 while (1) { SHT40_ReadData(&temperature, &humidity); printf("Temperature: %.2f C Humidity: %.2f %%RH\n", temperature, humidity); // 每隔1秒刷新一次 usleep(1000000); } } // 系统开机自动运行 SYS_RUN(sht40_main); ``` 原文出处:http://www.malaoshi.top/show_1GW32AL3kV6E.html