- 源码地址:https://github.com/HX-IoT/ESP32-Developer-Guide
- ESP32开发指南QQ群:824870185,内有pdf版,排版整洁。
学习目的及目标
- OLED显示的原理
- 掌握OLED显示测试程序
I2C通讯协议简介
- 同I2C-读取温湿度章节
OLED参数介绍
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。LCD都需要背光,而OLED不需要,因为它是自发光的。另外,OLED的功耗比LCD低得多,相同显示面积的功耗仅相当于LCD的1/3。OLED尺寸难以大型化,但是分辨率确可以做到很高,非常适合手持式移动设备。
常见的1.3寸OLED显示屏分为SPI和I2C两种通信方式,白色、蓝色、黄蓝双色三种颜色。
- OLED特点:
- 宽电压支持:3~5V
- 分辨率:128 * 64
- 工作温度范围广:‐40℃ to 85℃
- 显示单元自发光,无需背光
- I2C/SPI通信方式,我们模块使用I2C
- 可视化角度大
- 超低功耗(0.04W)
- 内部使用SSD1306驱动芯片
I2C OLED写时序
OLED的主要主要就是刷新(写)数据。
硬件设计及原理
本实验板使用了ESP32的I2C_1,下表是我们的程序IO的映射。
I2C_1 |
功能 |
映射ESP32的引脚 |
SCL |
时钟 |
IO33 |
SDA |
数据 |
IO32 |
若您使用的实验板I2C的连接方式或引脚不一样,只需根据我们的工程修改引脚即可,程序的控制原理相同。
软件设计
- 代码逻辑
- SHT30其他命令的时序类似,请参考SHT30英文手册。
硬件设计及原理
本实验板使用了ESP32的I2C_1,下表是我们的程序IO的映射。
I2C_1 |
功能 |
映射ESP32的引脚 |
SCL |
时钟 |
IO33 |
SDA |
数据 |
IO32 |
ESP32的I2C master接口介绍
与I2C-温湿度采集章相同。
OLED显示代码编写
- I2C配置函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
void i2c_init(void) { //注释参考sht30之i2c教程 i2c_config_t conf; conf.mode = I2C_MODE_MASTER; conf.sda_io_num = I2C_OLED_MASTER_SDA_IO; conf.sda_pullup_en = GPIO_PULLUP_ENABLE; conf.scl_io_num = I2C_OLED_MASTER_SCL_IO; conf.scl_pullup_en = GPIO_PULLUP_ENABLE; conf.master.clk_speed = 400000; i2c_param_config(I2C_OLED_MASTER_NUM, &conf); i2c_driver_install(I2C_OLED_MASTER_NUM, conf.mode,0, 0, 0); } |
- OLED配置函数,参考SSD1306手册,上面会有初始化代码,复制过来即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
void oled_init(void) { //i2c初始化 i2c_init(); //oled配置 oled_write_cmd(TURN_OFF_CMD); oled_write_cmd(0xAE); oled_write_cmd(0X20); oled_write_cmd(0X10); oled_write_cmd(0XB0); oled_write_cmd(0XC8); oled_write_cmd(0X00); oled_write_cmd(0X10); oled_write_cmd(0X40); oled_write_cmd(0X81); oled_write_cmd(0XFF); oled_write_cmd(0XA1); oled_write_cmd(0XA6); oled_write_cmd(0XA8); oled_write_cmd(0X3F); oled_write_cmd(0XA4); oled_write_cmd(0XD3); oled_write_cmd(0X00); oled_write_cmd(0XD5); oled_write_cmd(0XF0); oled_write_cmd(0XD9); oled_write_cmd(0X22); oled_write_cmd(0XDA); oled_write_cmd(0X12); oled_write_cmd(0XDB); oled_write_cmd(0X20); oled_write_cmd(0X8D); oled_write_cmd(0X14); oled_write_cmd(0XAF); //清屏 oled_claer(); } |
主函数:I2C初始化、OLED初始化、显示字符串、强刷OLED显示屏等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <stdio.h> #include "esp_system.h" #include <esp_log.h> #include <freertos/FreeRTOS.h> #include "freertos/task.h" #include "oled.h" #include "fonts.h" void app_main() { unsigned int cnt=0; oled_init(); oled_show_str(0,0, "HX ESP32 I2C", &Font_7x10, 1); oled_show_str(0,15, "oled example", &Font_7x10, 1); oled_show_str(0,30, "QQ:671139854", &Font_7x10, 1); oled_show_str(0,45, "All On And Clear",&Font_7x10,1); vTaskDelay(10000 / portTICK_PERIOD_MS); while(1) { cnt++; oled_claer();//清屏 vTaskDelay(10 / portTICK_PERIOD_MS); oled_all_on();//全显 vTaskDelay(10 / portTICK_PERIOD_MS); ESP_LOGI("OLED", "cnt = %d \r\n", cnt); } } |
硬件连接
可按照IO映射表将SHT30模块和ESP32开发板接好.
效果展示
OLED显示总结
- OLED的驱动、字库都很全,来源中景园。
- 源码地址:https://github.com/xiaolongba/wireless-tech