ESP32与0.96OLED液晶显示屏连接

esp32s介绍:

ESP32S 是一款通用型WiFi-BT-BLE MCU模组,功能强大,用途广泛,可以用于低功耗传感器网络和要求极高的任务,例如语音编码、音频流和MP3解码等。

此款模组的核心是ESP32芯片,具有可扩展、自适应的特点。两个CPU核可以被单独控制或上电。时钟频率的调节范围为80 MHz到240 MHz。用户可以切断CPU的电源,利用低功耗 协处理器来不断地监测外设的状态变化或某些模拟量是否超出阈值。

ESP32还集成了丰富的外设,包括电容式触摸传感器、霍尔传感器、低噪声传感放大器,SD卡接口、以太网接 口、高速SDIO/SPI、UART、I2S 和I2C 等。

ESP-WROOM-32集成了传统蓝牙、低功耗蓝牙和Wi-Fi,具有广泛的用途:Wi-Fi支持极大范围的通信连接,也支持通过路由器直接连接互联网;而蓝牙可以让用户连接手机或者广播 BLE Beacon以便于信号检测。ESP32芯片的睡眠电流小于5uA,使其适用于电池供电的可穿戴电子设备。

ESP-WROOM-32支持的数据传输速率高达150 Mbps,经过功率放大器后, 输出功率可达到22 dBm,可实现最大范围的无线通信。因此,这款芯片拥有行业领先的技术规格,在高集成度、无线传输距离、功耗以及网络联通等方面性能最佳。

ESP32的操作系 统是带有LWIP的freeRTOS,还内置了带有硬件加速功能的TLS 1.2。芯片同时支持OTA加密升级,开发者可以在产品发布之后继续升级。

OLED:

OLED是有机发光二极管(Organic Light-Emitting Diode)的简称,具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。LCD都需要背光,而OLED不需要,因为它是自发光的。另外,OLED的功耗比LCD低得多,相同显示面积的功耗仅相当于LCD的1/3。OLED尺寸难以大型化,但是分辨率确可以做到很高,非常适合手持式移动设备。

这里用0.96 168x64常见的1.3寸OLED显示屏分为SPI和I2C两种通信方式,白色、蓝色、黄蓝双色三种颜色。

购买7pin,可以学习iic和spi协议。但是使用中发现用7脚的oled使用iic协议需要更改硬件电阻位置,比较麻烦,决定改用spi连接,结果发现资料很少。

esp32与oled通过使用iic的物理连接:

esp32s管脚图:

oled液晶显示屏7p(7脚)图:

olde使用iic或spi接线图:

这张图第4文字描述有错误,D1不是时钟线,应该是数据线。

然后我简单的认为,i2c按照下面的接法就应该成功,这里的iic就是i2c,通过观察,我们发现esp32s使用21管脚SDA接oled的3PIN(D1),esp的22管脚SCL(时钟线接(D0),esp32管脚vin提供5v电压给oled的vcc,两个设备的gnd连接。

但是连接好后没有一点反应,没有办法,再次查看商家提供的文档,发现7脚的使用iic需要做如下操作。

  1. 将模块背面的电阻 R3 换到 R1 位置,此时将模块切换为 IIC 接口;电阻 R8 可以用 0 欧姆电阻或是用焊锡短接电阻两端。

  2. CS 脚接地。

  3. DC 脚的处理:在 IIC 通信中 DC 的高低电平是用来选择 IIC 通信地址的;当 DC 接地时 IIC从机地址为:0x78,当 DC 接高电平时 IIC 地址为 0x7A;测试程序中所用的为 0x78; 也就是说大家需要将 DC 接地

  4. 关于 RES 的处理。RES 这个脚是 OLED 屏的复位脚;大家在用 OLED 屏的时候会发现;所 有 OLED 本身都会有一个复位脚;因为 OLED 在被操作之前需要在将寄存作一次复位;

然后才能对期进行初始货操作;否则 OLED 可能会出现水稳定的情况。

RES 处理办法:

1> 简单的验证办法:将 RES 接电源正;这样可以把屏点亮;但是会不稳定,在快速测试时可以这么操作

2> 将 RES 脚与开发板的复位脚连接;通过开发板的复位来对 OLED 进行复位

3> 通过一个 IO 脚来对 OLED 进行复位,这个操作放在对屏初始化之前;先将 RES 拉低延迟 200ms 左右;然后再拉高一直处于高电平状态

4> 通过一个 RC 复位电路来控制 RES

5.D0 为 IIC 时钟线,D1 为 IIC 数据线

一看,这么麻烦,等有空来测试这个方法,还是用spi。

esp32通过spi连接oled

OLED ------------------------- NodeMCU

GND引脚---------------NodeMCU-32s的GND;

VDD引脚----------------3.3V或5V都可以;

D0是SCK时钟引脚-----------NodeMCU GPIO18 vspi sck;

D1是SDA引脚----------------GPIO23 vspi mosi 数据引脚;

RESET引脚--------------选一个普通的GPIO19;

DC数据命令引脚--------选一个普通的GPIO21;

CS引脚------------------选一个普通的GPIO22;

安装u8g2库

编辑代码:

#include <Arduino.h>
#include <U8g2lib.h>


U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18, /* data=*/ 23, /* cs=*/ 22, /* dc=*/ 21, /* reset=*/ 19);

void setup(void) {
  u8g2.begin();
  u8g2.enableUTF8Print();   
}

void loop(void) {
  u8g2.setFont(u8g2_font_unifont_t_chinese2); 
  u8g2.setFontDirection(0);
  u8g2.clearBuffer();
  u8g2.setCursor(0, 15);
  u8g2.print("Hello SCMCC!");
  u8g2.setCursor(0, 40);
  u8g2.print("你好移动");   
  u8g2.sendBuffer();

  delay(1000);
}

运行结果如图所示:

最后在提醒一句,如果使用i2c,还是买4脚的oled,7脚使用spi比较麻烦。

文档信息

版权声明:可自由转载(请注明转载出处)-非商用-非衍生

发表时间:2023年4月17日 21:26