打印
[CW32F030系列]

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

[复制链接]
1324|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Clyde011|  楼主 | 2024-10-15 07:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯源微电子推出的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[6];
    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[i] = I2C_ReceiveData(I2C0);
    I2C_Stop(I2C0);

    *temperature = ((data[0] << 8 | data[1]) * 175.0 / 65535.0) - 45.0;
    *humidity = ((data[3] << 8 | data[4]) * 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-18 16:54 回复TA
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);请问这行代码是标准版里的么?好像找不到。 
沙发
公羊子丹| | 2024-10-15 07:51 | 只看该作者
CW32F030还支持低功耗,这真的是物联网项目的福音。

使用特权

评论回复
板凳
周半梅| | 2024-10-15 07:52 | 只看该作者
用这片MCU做环境监测挺合适的,价格也不贵。

使用特权

评论回复
地板
帛灿灿| | 2024-10-15 07:52 | 只看该作者
延时5秒再进入低功耗,这设计挺科学的。

使用特权

评论回复
5
童雨竹| | 2024-10-15 07:53 | 只看该作者
有没有人用CW32F030做过蓝牙数据传输的?求示例代码。

使用特权

评论回复
6
万图| | 2024-10-15 07:53 | 只看该作者
这片MCU跟STM32比,开发起来是不是更简单?

使用特权

评论回复
7
Wordsworth| | 2024-10-15 07:54 | 只看该作者
芯源的MCU在市场上的口碑怎么样?有人用过更多型号吗?

使用特权

评论回复
8
Bblythe| | 2024-10-15 07:55 | 只看该作者
这段代码能不能加个OLED显示模块,想做个简单的温湿度屏。

使用特权

评论回复
9
Pulitzer| | 2024-10-15 07:56 | 只看该作者
I2C通信和低功耗并存,代码写得挺清楚,学到了。

使用特权

评论回复
10
Uriah| | 2024-10-15 07:57 | 只看该作者
CW32系列还有没有其他低功耗应用的例子?想参考下。

使用特权

评论回复
11
CW32TechSupport| | 2024-10-15 09:20 | 只看该作者
Uriah 发表于 2024-10-15 07:57
CW32系列还有没有其他低功耗应用的例子?想参考下。

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

使用特权

评论回复
12
AdaMaYun| | 2024-10-16 21:11 | 只看该作者
典型的温度传感器使用

使用特权

评论回复
13
LOVEEVER| | 2024-10-21 13:18 | 只看该作者
MCU的使用低功耗非常实用的功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

32

主题

3430

帖子

0

粉丝