连接方法:两个arduino UNO analog引脚A4,A5对应互联 ,并把两个板GND引脚互联(共地)。
程序实例功能介绍:主机端向从机端发送字符串"Hello",从机接收后向主机发送"Hello, World!"。
程序内容:主机端
#include <Wire.h>
#define MAX_STR_LEN 256 // 设置最大字符串长度
const int I2C_SLAVE_ADDRESS = 2; // 设置从设备地址为2,可根据实际情况进行修改
void setup() {
Wire.begin(); // 加入 I2C 总线
Serial.begin(9600); // 开始串口通信,波特率为 9600
}
void loop() {
String receivedString = ""; // 初始化接收到的字符串
// 从 I2C 总线接收数据
Wire.beginTransmission(I2C_SLAVE_ADDRESS); // 开始向 I2C 从设备发送数据
Wire.write("Hello"); // 发送一个字符串作为请求
Wire.endTransmission(); // 结束传输
delay(1000); // 等待一段时间,以等待从设备响应
// 检查从设备是否响应
if (Wire.available() > 0) {
receivedString = Wire.readStringUntil('\0');
// 从 I2C 总线读取响应字符串,直到遇到 null 字符为止
}
Serial.println("Received:");
Serial.println(receivedString); // 打印接收到的字符串
delay(5000); // 延迟一段时间,以等待下一次传输
}
从机端
#include <Wire.h>
#define MAX_STR_LEN 256 // 设置最大字符串长度
const int I2C_SLAVE_ADDRESS = 2; // 设置从设备地址为2,可根据实际情况进行修改
void setup() {
Wire.begin(I2C_SLAVE_ADDRESS); // 加入 I2C 总线,并指定从设备地址
}
void loop() {
String receivedString = ""; // 初始化接收到的字符串
// 检查是否有数据可用
if (Wire.available() > 0) {
receivedString = Wire.readStringUntil('\0');
// 从 I2C 总线读取数据,直到遇到 null 字符为止
}
delay(1000); // 等待一段时间,以等待主机发送数据
// 如果收到字符串请求,则发送响应字符串
if (receivedString == "Hello") {
Wire.beginTransmission(I2C_SLAVE_ADDRESS); // 开始向 I2C 主设备发送数据
Wire.write("Hello, World!"); // 发送响应字符串
Wire.endTransmission(); // 结束传输
}
}
以上实例程序 发送和接收语句都在主程序内调用,从机端 可以不在主程序内调用 而是在初始化阶段调用。