第十三章 ESP32 I2C-OLED显示

学习目的及目标

  1. OLED显示的原理
  2. 掌握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特点:
  1. 宽电压支持:3~5V
  2. 分辨率:128 * 64
  3. 工作温度范围广:‐40℃ to 85℃
  4. 显示单元自发光,无需背光
  5. I2C/SPI通信方式,我们模块使用I2C
  6. 可视化角度大
  7. 超低功耗(0.04W)
  8. 内部使用SSD1306驱动芯片

I2C OLED写时序

OLED的主要主要就是刷新(写)数据。

硬件设计及原理

本实验板使用了ESP32的I2C_1,下表是我们的程序IO的映射。

I2C_1

功能

映射ESP32的引脚

SCL

时钟

IO33

SDA

数据

IO32

若您使用的实验板I2C的连接方式或引脚不一样,只需根据我们的工程修改引脚即可,程序的控制原理相同。

软件设计

  1. 代码逻辑

  • 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显示总结

点我->更多ESP32开发指南系列目录

发布了45 篇原创文章 · 获赞 48 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_24550925/article/details/85854202