打印
[家电应用]

基于中颖MCU的I2C通信应用——温湿度传感器数据读取

[复制链接]
2032|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
周半梅|  楼主 | 2024-10-5 08:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

最近我在一个项目中使用了中颖MCU,并且需要通过I2C接口读取温湿度传感器的数据。中颖的MCU在I2C通信方面还是挺方便的,经过几次测试,代码运行得比较稳定,这里和大家分享一下我的实现方法。

硬件准备:
  • 中颖MCU开发板
  • 温湿度传感器(如DHT12)
  • I2C通信线(SCL、SDA)

软件环境:
  • Keil编译环境
  • 中颖官方提供的I2C库

代码实现:
#include "STC8.h"
#include "I2C.h"

// 定义温湿度传感器地址
#define SENSOR_ADDR 0xB8

// 初始化I2C
void I2C_Init() {
    I2C_InitTypeDef I2C_InitStructure;
    I2C_InitStructure.ClockSpeed = 100000;
    I2C_InitStructure.OwnAddress = 0x30;
    I2C_Init(&I2C_InitStructure);
}

// 读取温湿度传感器数据
void Read_Sensor_Data(uint8_t* temp, uint8_t* humidity) {
    uint8_t data[5];

    I2C_Start();
    I2C_SendByte(SENSOR_ADDR);   // 发送设备地址
    I2C_SendByte(0x00);          // 读取命令
    I2C_Start();                 
    I2C_SendByte(SENSOR_ADDR + 1);  // 进入读模式

    for (int i = 0; i < 5; i++) {
        data[i] = I2C_ReceiveByte();
        if (i < 4) {
            I2C_Ack();
        } else {
            I2C_NAck();
        }
    }

    I2C_Stop();

    *humidity = data[0]; // 读取湿度数据
    *temp = data[2];     // 读取温度数据
}

int main() {
    uint8_t temp = 0, humidity = 0;
   
    I2C_Init();
   
    while (1) {
        Read_Sensor_Data(&temp, &humidity);
        printf("Temperature: %d°C, Humidity: %d%%\n", temp, humidity);
        delay_ms(1000); // 延时1秒,周期性读取
    }

    return 0;
}

代码解析:
  • 初始化I2C通信,设置时钟频率为100kHz,地址为0x30。
  • 通过I2C读取温湿度传感器的数据,将其存储到temp和humidity变量中。
  • 循环读取并输出温度和湿度数据。

总结:

中颖MCU在I2C通信的处理上还是挺方便的,使用官方库能够快速实现数据读取。实际测试中,I2C的通信稳定性较好。如果大家也在使用类似的传感器,建议试试这个实现方法!

使用特权

评论回复
沙发
公羊子丹| | 2024-10-5 08:06 | 只看该作者
这个代码看起来不错啊,我正好手上有个中颖的板子,改天试试看!

使用特权

评论回复
板凳
帛灿灿| | 2024-10-5 08:06 | 只看该作者
太赞了,正愁不知道怎么用I2C和传感器通信,楼主的代码救了我!

使用特权

评论回复
地板
童雨竹| | 2024-10-5 08:07 | 只看该作者
哇,没想到中颖MCU的I2C这么简单易用,学习了!

使用特权

评论回复
5
万图| | 2024-10-5 08:07 | 只看该作者
温湿度传感器我用的也是DHT12,代码跟我写的差不多,真心好用!

使用特权

评论回复
6
Wordsworth| | 2024-10-5 08:07 | 只看该作者
楼主能不能讲解一下I2C的协议部分?我还是不太清楚那些Ack和NAck是怎么回事。

使用特权

评论回复
7
Bblythe| | 2024-10-5 08:07 | 只看该作者
这个I2C库是中颖自带的吗?一直没找到现成的I2C驱动,求分享!

使用特权

评论回复
8
Pulitzer| | 2024-10-5 08:08 | 只看该作者
温湿度传感器数据读取挺实用的,我可以拿去做个家庭环境监控的项目了!

使用特权

评论回复
9
Uriah| | 2024-10-5 08:08 | 只看该作者
代码写得很简洁易懂,我是个I2C小白,照着这个应该可以搞定了。

使用特权

评论回复
10
Clyde011| | 2024-10-5 08:08 | 只看该作者
不知道中颖的I2C性能怎么样,有没有遇到丢数据或者通信失败的情况?

使用特权

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

本版积分规则

41

主题

3717

帖子

0

粉丝