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

[复制链接]
2945|9
 楼主| 周半梅 发表于 2024-10-5 08:05 | 显示全部楼层 |阅读模式

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

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

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

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

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

  5. // 初始化I2C
  6. void I2C_Init() {
  7.     I2C_InitTypeDef I2C_InitStructure;
  8.     I2C_InitStructure.ClockSpeed = 100000;
  9.     I2C_InitStructure.OwnAddress = 0x30;
  10.     I2C_Init(&I2C_InitStructure);
  11. }

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

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

  20.     for (int i = 0; i < 5; i++) {
  21.         data[i] = I2C_ReceiveByte();
  22.         if (i < 4) {
  23.             I2C_Ack();
  24.         } else {
  25.             I2C_NAck();
  26.         }
  27.     }

  28.     I2C_Stop();

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

  32. int main() {
  33.     uint8_t temp = 0, humidity = 0;
  34.    
  35.     I2C_Init();
  36.    
  37.     while (1) {
  38.         Read_Sensor_Data(&temp, &humidity);
  39.         printf("Temperature: %d°C, Humidity: %d%%\n", temp, humidity);
  40.         delay_ms(1000); // 延时1秒,周期性读取
  41.     }

  42.     return 0;
  43. }

代码解析:
  • 初始化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这么简单易用,学习了!
万图 发表于 2024-10-5 08:07 | 显示全部楼层
温湿度传感器我用的也是DHT12,代码跟我写的差不多,真心好用!
Wordsworth 发表于 2024-10-5 08:07 | 显示全部楼层
楼主能不能讲解一下I2C的协议部分?我还是不太清楚那些Ack和NAck是怎么回事。
Bblythe 发表于 2024-10-5 08:07 | 显示全部楼层
这个I2C库是中颖自带的吗?一直没找到现成的I2C驱动,求分享!
Pulitzer 发表于 2024-10-5 08:08 | 显示全部楼层
温湿度传感器数据读取挺实用的,我可以拿去做个家庭环境监控的项目了!
Uriah 发表于 2024-10-5 08:08 | 显示全部楼层
代码写得很简洁易懂,我是个I2C小白,照着这个应该可以搞定了。
Clyde011 发表于 2024-10-5 08:08 | 显示全部楼层
不知道中颖的I2C性能怎么样,有没有遇到丢数据或者通信失败的情况?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

167

主题

6128

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部