用ESP32-c3驱动0.96寸OLED的大坑

在尝试使用ESP32-C3微控制器搭建电流表项目时,作者遇到了使用INA3221电流电压芯片和0.96寸OLED屏幕(驱动库为SSD1306)的问题。首先,Adafruit_SSD1306库无法点亮屏幕,而u8g2库可以,但随后在接入INA3221后,由于I2C多从设备导致设备反复重启。作者发现ESP32只有一个I2C控制器,且u8g2不支持复用Wire。改回Adafruit_SSD1306后,发现屏幕地址与样例不符,实际应为0x3C而非0x3D。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我用esp32-c3想弄个电流表,电流电压芯片用的ina3221,屏幕用的0.96寸的oled屏幕。

屏幕提示驱动用SSD1306,我选择了Adafruit_SSD1306,怎么也点不亮,后来试了用u8g2,很轻松点亮。但接上ina3221后面临i2c多从设备问题,反正症状就是反复重启。

后来查了资料,可以是因为esp32只有有一个i2c控制器,但u8g2没法复用wire,因此又回到了Adafruit_SSD1306。

看看官方样例文件

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
// The pins for I2C are defined by the Wire-library. 
// On an arduino UNO:       A4(SDA), A5(SCL)
// On an arduino MEGA 2560: 20(SDA), 21(SCL)
// On an arduino LEONARDO:   2(SDA),  3(SCL), ...
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

样例提醒 0x3d是12864,我的是12864,结果利用i2cdetect扫描了一下,地址应该是0x3c,严重误导了我。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值