在嵌入式系统开发中,C语言I2C库是实现设备间通信的重要工具。无论是连接传感器、EEPROM还是OLED显示屏,I2C总线因其接线简单、支持多设备而被广泛应用。本教程将从零开始,手把手教你如何在C语言中使用I2C库进行通信,即使你是初学者也能轻松上手。
I2C(Inter-Integrated Circuit)是一种由Philips(现NXP)开发的串行通信协议,仅需两根线(SDA:数据线,SCL:时钟线)即可实现主从设备之间的双向通信。它支持多主多从架构,每个设备都有唯一的地址,非常适合资源受限的嵌入式系统。

在不同嵌入式平台上,I2C的实现方式略有不同。以下是两个常见场景:
/dev/i2c-*设备文件 + wiringPi 或原生i2c-dev.h本文以树莓派为例,讲解如何使用C语言操作I2C设备,这也是树莓派I2C开发中最常见的方法之一。
sudo raspi-config)sudo apt install i2c-toolsi2cdetect -y 1扫描设备地址(通常为0x76或0x77)下面是一个完整的C程序,用于通过I2C读取BMP280芯片ID(寄存器地址0xD0):
#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <linux/i2c-dev.h>#include <sys/ioctl.h>#define BMP280_ADDR 0x76 // 根据你的设备修改#define CHIP_ID_REG 0xD0int main() { int file; char *bus = "/dev/i2c-1"; // 树莓派通常使用i2c-1 // 打开I2C设备文件 if ((file = open(bus, O_RDWR)) < 0) { perror("Failed to open the i2c bus"); return -1; } // 设置从设备地址 if (ioctl(file, I2C_SLAVE, BMP280_ADDR) < 0) { perror("Failed to acquire bus access and/or talk to slave"); close(file); return -1; } // 写入要读取的寄存器地址 char reg = CHIP_ID_REG; if (write(file, ®, 1) != 1) { perror("Failed to write to the i2c bus"); close(file); return -1; } // 读取1字节数据 char buf[1]; if (read(file, buf, 1) != 1) { perror("Failed to read from the i2c bus"); close(file); return -1; } printf("BMP280 Chip ID: 0x%02X\n", buf[0]); close(file); return 0;}将上述代码保存为i2c_test.c,然后执行以下命令:
gcc -o i2c_test i2c_test.csudo ./i2c_test
如果一切正常,你将看到类似BMP280 Chip ID: 0x58的输出,这表明嵌入式I2C通信已成功建立。
sudo,或把用户加入i2c组i2cdetect确认设备地址是否正确掌握I2C协议编程是嵌入式开发的基本功。通过本教程,你已经学会了如何在C语言中使用标准Linux I2C接口与硬件通信。下一步可以尝试读取温度、气压等完整数据,或移植到其他平台如STM32。
希望这篇关于C语言I2C库的教程能帮助你顺利开启嵌入式通信之旅!
本文由主机测评网于2025-12-23发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251211836.html