Clyde011 发表于 2024-10-15 07:50

基于芯源CW32F030 MCU的低功耗温湿度监测系统设计

芯源微电子推出的CW32F030 MCU因其低功耗和多功能外设广泛应用于物联网和环境监测系统。本篇文章展示如何使用CW32F030构建一个简单的温湿度监测系统,并实现低功耗模式,适用于长期电池供电的项目。
系统概述
[*]功能描述:实时监测环境温湿度,并通过串口输出结果。采用SHT30传感器进行数据采集。系统闲置时进入低功耗模式,延长电池寿命。
[*]硬件组成:

[*]MCU:CW32F030
[*]温湿度传感器:SHT30
[*]串口通信模块
硬件连接
[*]SHT30与CW32F030的I2C连接

[*]SHT30 SDA -> MCU P0.6
[*]SHT30 SCL -> MCU P0.7
[*]GND -> GND
[*]VCC -> 3.3V
代码实现#include <CW32F030.h>
#include <i2c.h>
#include <uart.h>

#define SHT30_ADDR 0x44// SHT30 I2C地址

void delay_ms(unsigned int ms) {
    for (unsigned int i = 0; i < ms * 1000; i++)
      __NOP();// 延时函数
}

void I2C_Init() {
    I2C_Config_TypeDef i2c_cfg;
    i2c_cfg.I2C_ClockSpeed = 100000;// 100kHz
    i2c_cfg.I2C_Mode = I2C_MODE_I2C;
    I2C_Init(I2C0, &i2c_cfg);
}

void UART_Init() {
    UART_Config_TypeDef uart_cfg;
    uart_cfg.BaudRate = 9600;
    uart_cfg.WordLength = UART_WORDLENGTH_8B;
    uart_cfg.StopBits = UART_STOPBITS_1;
    uart_cfg.Parity = UART_PARITY_NONE;
    UART_Init(UART0, &uart_cfg);
}

void SHT30_ReadData(float *temperature, float *humidity) {
    uint8_t data;
    I2C_Start(I2C0);
    I2C_SendData(I2C0, SHT30_ADDR << 1);
    I2C_SendData(I2C0, 0x2C);// 高精度测量命令
    I2C_SendData(I2C0, 0x06);
    delay_ms(10);// 等待测量完成

    I2C_Start(I2C0);
    I2C_SendData(I2C0, (SHT30_ADDR << 1) | 1);// 读取数据
    for (int i = 0; i < 6; i++)
      data = I2C_ReceiveData(I2C0);
    I2C_Stop(I2C0);

    *temperature = ((data << 8 | data) * 175.0 / 65535.0) - 45.0;
    *humidity = ((data << 8 | data) * 100.0 / 65535.0);
}

void Enter_LowPowerMode() {
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}

int main() {
    float temp = 0.0, hum = 0.0;

    I2C_Init();
    UART_Init();

    while (1) {
      SHT30_ReadData(&temp, &hum);
      printf("Temperature: %.2f C, Humidity: %.2f %%\r\n", temp, hum);
      delay_ms(5000);// 每5秒采集一次
      Enter_LowPowerMode();// 进入低功耗模式
    }
}
代码解析
[*]I2C初始化:配置I2C为标准模式(100kHz),用于与SHT30传感器通信。
[*]UART初始化:设置波特率9600,用于将温湿度数据通过串口输出。
[*]温湿度读取:读取SHT30返回的数据,并计算出实际的温湿度值。
[*]低功耗模式:每次采集数据后进入低功耗模式,减少能耗。
系统运行效果
[*]每5秒采集一次环境的温度和湿度,并通过串口输出结果。
[*]系统在数据采集之间进入低功耗模式,节省电量。
优化建议
[*]数据上传:将数据通过蓝牙或Wi-Fi上传至服务器,实现远程监控。
[*]报警功能:加入温湿度阈值判断,超出范围时触发蜂鸣器报警。
[*]自动唤醒:配置RTC定时唤醒系统,更精确控制功耗。

公羊子丹 发表于 2024-10-15 07:51

CW32F030还支持低功耗,这真的是物联网项目的福音。

周半梅 发表于 2024-10-15 07:52

用这片MCU做环境监测挺合适的,价格也不贵。

帛灿灿 发表于 2024-10-15 07:52

延时5秒再进入低功耗,这设计挺科学的。

童雨竹 发表于 2024-10-15 07:53

有没有人用CW32F030做过蓝牙数据传输的?求示例代码。

万图 发表于 2024-10-15 07:53

这片MCU跟STM32比,开发起来是不是更简单?

Wordsworth 发表于 2024-10-15 07:54

芯源的MCU在市场上的口碑怎么样?有人用过更多型号吗?

Bblythe 发表于 2024-10-15 07:55

这段代码能不能加个OLED显示模块,想做个简单的温湿度屏。

Pulitzer 发表于 2024-10-15 07:56

I2C通信和低功耗并存,代码写得挺清楚,学到了。

Uriah 发表于 2024-10-15 07:57

CW32系列还有没有其他低功耗应用的例子?想参考下。

CW32TechSupport 发表于 2024-10-15 09:20

Uriah 发表于 2024-10-15 07:57
CW32系列还有没有其他低功耗应用的例子?想参考下。

请参考本版帖子:CW32系列MCU应用好贴
https://bbs.21ic.com/icview-3327088-1-1.html

AdaMaYun 发表于 2024-10-16 21:11

典型的温度传感器使用

LOVEEVER 发表于 2024-10-21 13:18

MCU的使用低功耗非常实用的功能
页: [1]
查看完整版本: 基于芯源CW32F030 MCU的低功耗温湿度监测系统设计