esp32s3 iic程序
时间: 2025-01-29 22:54:38 浏览: 72
### 关于ESP32-S3 IIC (I²C) 通信协议的编程示例
#### 使用OLED显示屏连接到ESP32-S3
为了展示如何通过I²C接口控制外围设备,这里提供了一个将OLED显示器与ESP32-S3相连的例子。此实例展示了初始化过程以及向屏幕发送数据的方法。
```cpp
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(115200);
if(!display.begin(SSD1306_I2C_ADDRESS, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
delay(2000);
display.display();
display.clearDisplay();
}
void loop() {
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.cp437(true);
display.println("Hello, world!");
display.display();
delay(2000);
}
```
这段代码实现了基本的文字显示功能[^1]。
#### 实现两个ESP32-S3之间的I²C主从模式通讯
另一个重要的应用场景是在多个微控制器之间建立可靠的双向通信链路。下面是一个简单的例子来说明怎样设置一个作为主机而另一个作为从机的角色:
##### 主控端程序:
```cpp
#include "Wire.h"
const byte SLAVE_ADDRESS = 9;
void setup(){
Wire.begin(); // join i2c bus as master
Wire.setClock(100000); // set the I2C speed to 100kHz
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(){
Wire.beginTransmission(SLAVE_ADDRESS);
Wire.write('A'); // sends one character
Wire.endTransmission();
digitalWrite(LED_BUILTIN,HIGH);
delay(500);
digitalWrite(LED_BUILTIN,LOW);
delay(500);
}
```
##### 从属端程序:
```cpp
#include "Wire.h"
char receivedChar;
void setup(){
Wire.begin(9); // join i2c bus with address #9
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial communication at 9600bps
}
void receiveEvent(int howMany){
while(Wire.available()){
receivedChar = char(Wire.read());
Serial.print("received: ");
Serial.println(receivedChar);
}
}
void loop(){}
```
上述代码片段演示了利用Arduino框架下的`TwoWire`库实现两台ESP32-S3间的基础字符传输操作[^2]。
对于更复杂的项目需求,还可以进一步调整SCL/SDA引脚分配并指定不同的频率参数以优化性能表现[^3]。
阅读全文
相关推荐


















