基于海思 WS63E 的温湿度采集实践
·
1. 引言
海思 WS63E 是一款面向物联网场景的高集成度无线 SoC,支持 Wi-Fi 与多种外设接口,适合快速搭建低功耗数据采集节点。本文以温湿度采集为例,介绍基于 WS63E 的硬件连接、软件配置与数据上报流程,帮助读者从零开始完成一个可运行的温湿度采集方案。
2. 硬件准备
在开始开发前,需要准备以下硬件与工具:
- 海思 WS63E 开发板:提供主控与无线通信能力。
- 温湿度传感器:推荐使用 AHT20,本文以 AHT20 为例。
- USB 转串口模块:用于日志输出与程序烧录。
- 杜邦线若干:完成传感器与开发板之间的电气连接。
- 5V 或 3.3V 电源:根据开发板要求供电。
3. 硬件连接
AHT20 传感器支持 I2C 接口,与 WS63E 的连接方式如下:
| AHT20 引脚 | WS63E 引脚 | 说明 |
|---|---|---|
| VCC | 3.3V | 传感器电源 |
| GND | GND | 共地 |
| SCL | I2C 时钟引脚 | 例如 GPIO 对应 SCL |
| SDA | I2C 数据引脚 | 例如 GPIO 对应 SDA |
连接时注意传感器供电电压与开发板 IO 电平保持一致,避免损坏器件。
4. 开发环境搭建
WS63E 的软件开发基于 LiteOS 操作系统,配合海思提供的 SDK 与交叉编译工具链。建议按以下步骤准备环境:
- 安装交叉编译工具链,并配置环境变量。
- 下载并解压 WS63E SDK 到工作目录,SDK 内置 LiteOS 内核源码。
- 在 SDK 中创建或选择对应的温湿度采集示例工程,工程默认基于 LiteOS 构建。
- 确认串口调试工具可用,用于后续日志查看。
5. 软件实现
软件部分主要包含 I2C 驱动初始化、AHT20 数据读取与主循环逻辑。下面给出核心代码示例。
5.1 I2C 初始化
#include "iot_i2c.h"
#define I2C_BUS 0
#define AHT20_ADDR 0x38
void i2c_init(void)
{
iot_i2c_config_t cfg = {
.mode = IOT_I2C_MODE_FAST,
.speed = 400000,
};
iot_i2c_init(I2C_BUS, &cfg);
iot_i2c_enable(I2C_BUS);
}
5.2 读取温湿度数据
#include "iot_i2c.h"
#define AHT20_INIT_CMD 0xBE
#define AHT20_TRIG_CMD 0xAC
#define AHT20_STATUS_BUSY 0x80
static int aht20_init(void)
{
uint8_t cmd[3] = {AHT20_INIT_CMD, 0x08, 0x00};
iot_i2c_write(I2C_BUS, AHT20_ADDR, cmd, 3);
osal_msleep(10);
return 0;
}
static int aht20_read_raw(uint32_t *temp_raw, uint32_t *humi_raw)
{
uint8_t trig[3] = {AHT20_TRIG_CMD, 0x33, 0x00};
uint8_t buf[6] = {0};
iot_i2c_write(I2C_BUS, AHT20_ADDR, trig, 3);
osal_msleep(80);
if (iot_i2c_read(I2C_BUS, AHT20_ADDR, buf, 6) != 0) {
return -1;
}
if (buf[0] & AHT20_STATUS_BUSY) {
return -1;
}
*humi_raw = ((uint32_t)buf[1] << 12) | ((uint32_t)buf[2] << 4) | (buf[3] >> 4);
*temp_raw = ((uint32_t)(buf[3] & 0x0F) << 16) | ((uint32_t)buf[4] << 8) | buf[5];
return 0;
}
float aht20_calc_temp(uint32_t raw)
{
return raw * 200.0f / 1048576.0f - 50.0f;
}
float aht20_calc_humi(uint32_t raw)
{
return raw * 100.0f / 1048576.0f;
}
5.3 主循环
void app_main(void)
{
uint32_t temp_raw = 0;
uint32_t humi_raw = 0;
i2c_init();
aht20_init();
while (1) {
if (aht20_read_raw(&temp_raw, &humi_raw) == 0) {
float temp = aht20_calc_temp(temp_raw);
float humi = aht20_calc_humi(humi_raw);
printf("temp=%.2f humi=%.2f\r\n", temp, humi);
}
osal_msleep(2000);
}
}
6. 编译与烧录
在 SDK 根目录执行编译脚本,生成固件后通过烧录工具写入开发板。烧录完成后打开串口终端,可看到周期性的温湿度日志输出。
7. 数据上报与扩展
采集到温湿度后,可通过 WS63E 的 Wi-Fi 能力将数据上报到云平台或本地服务器。常见扩展方向包括:
- 接入 MQTT 服务器,实现远程数据订阅。
- 增加 OLED 显示屏,本地实时显示温湿度。
- 加入低功耗休眠策略,延长电池供电场景下的续航。
8. 总结
本文基于海思 WS63E 完成了温湿度采集的完整流程,涵盖硬件连接、I2C 驱动、SHT30 数据读取与主循环实现。读者可以在此基础上继续扩展无线上报与低功耗功能,构建适合实际业务的物联网采集节点。
更多推荐

所有评论(0)