esp32移植oled-ui-astra项目
前言:本项目的目的是为了在 esp32 平台上移植开源 OLED 项目 oled-ui-astra,详见GitHub - AstraThreshold/oled-ui-astra: A smooth, easy-to-deploy, and easy-to-extend OLED UI framework, based on C++.,并添加旋转编码器 KY-040 实现 UI 界面的简单切换。
尽管笔者已经在本地环境测试没有问题,但是不能保证大家使用后也能正常工作,这里笔者尽量把移植 oled-ui-astra 项目的过程讲清楚,同时把已经测试过没有问题的整体工程放到这里GitHub - Thee24LYJ/oled-ui-astra at esp32,仅供参考。下面正式开始。
1.硬件环境
1.1 硬件设备
esp32 DevKit
、7
针 SPI OLED
和旋转编码器 KY-040
1.2 硬件连线
ESP32
采用硬件 SPI
与 OLED
进行通信
OLED | ESP32 |
---|---|
SCLK (CLK)/D0 | GPIO 18 |
MOSI (DIN)/D1 | GPIO 23 |
CS (片选) | GPIO 5 (可自定义) |
DC (数据/命令) | GPIO 16 (可自定义) |
RES (复位) | GPIO 17 (可自定义,可选接) |
VCC | 3.3V |
GND | GND |
KY-040 | ESP32 |
---|---|
CLK | GPIO 4 (可自定义) |
DT | GPIO 2 (可自定义) |
VCC/+ | 3.3V |
GND | GND |
2.部署 oled-ui-astra 项目
官方部署教程:部署教程 ‐ Deployment Tutorial · AstraThreshold/oled-ui-astra Wiki · GitHub
由于笔者使用的开发环境是
VScode+PlatformIO
,因此与官方部署教程存在差异
2.1 创建 PlatformIO 工程
这里开发板选择 Espressif ESP32 Dev Module
,框架选择 Arduino
,工程位置可默认也可自定义
2.2 添加依赖库
在项目工程中的platformio.ini
最后添加如下内容,其中olikraus/U8g2@^2.35.4
是用于驱动OLED
显示屏的u8g2
库,madhephaestus/ESP32Encoder@^0.11.7
是用于驱动KY-040
的ESP32Encoder
库
1 | lib_deps = |
2.3 添加 oled-ui-astra 源码到工程中
- 首先,从Release astra UI v0.0.2-alpha · AstraThreshold/oled-ui-astra · GitHub下载
astra-ui-v0-0-2-alpha.zip
源码,然后解压放到工程中的lib
文件夹中,然后将astra_rocket.h
和astra_logo.h
移动到include
文件夹中,移动astra_rocket.cpp
和astra_logo.cpp
到src
文件夹中,如下图所示
- 然后,修改一些头文件和源文件代码
- 修改
include\astra_logo.h
中头文件包含#include "../hal/hal.h"
为#include "hal/hal.h"
- 修改
include\astra_rocket.h
中头文件包含#include "../astra/ui/launcher.h"
为#include "astra/ui/launcher.h"
,修改#include "../hal/hal_dreamCore/hal_dreamCore.h"
为#include "my_hal.h"
- 修改
lib\astra-ui-v0-0-2-alpha\astra\config\config.h
中头文件包含#include "../../hal/hal_dreamCore/components/oled/graph_lib/u8g2/u8g2.h"
为#include <U8g2lib.h>
- 修改
- 最后,在
include
文件夹中新建子类头文件my_hal.h
,在src
文件夹中新建子类源文件my_hal.cpp
,定义继承自HAL
类的子类为MyHAL
,具体实现代码如下
1 | // MyHAL.h |
1 | // my_hal.cpp |
2.4 完善 main 函数
1 | // main.cpp |
2.5 编译下载
通过 USB
线将 ESP32
连接到电脑上,点击 upload
编译固件上传到 ESP32
中,按下复位键重启开发板,一切顺利的话,就能够实现【astra UI】v0.0.2-alpha 版本特性演示 - 超容易移植的 一行代码就可以创建的丝滑 OLED UI_哔哩哔哩_bilibili中的丝滑效果
若是下载时遇到无法识别芯片等问题,可能需要手动进入下载模式:
- 拉低 BOOT 引脚(按住开发板的 BOOT 按键)
- 短按 EN/RST 引脚(复位开发板)
- 松开 BOOT 键后立即开始烧录
3.添加旋转编码器到工程中
3.1 添加 OLED 对旋转编码器的响应函数
- 在
lib\astra-ui-v0-0-2-alpha\astra\ui\launcher.h
的Launcher
类中添加公有成员函数void update(int cnt, bool is_pressed);
- 在
lib\astra-ui-v0-0-2-alpha\astra\ui\launcher.cpp
中添加该函数的视线,具体代码如下(注意:这里只是简单实现了旋转编码器旋转切换 UI 界面和按下按键进入下一级界面(如果有的话))
1 | void Launcher::update(int cnt, bool is_pressed) |
3.2 完善 main 函数
直接在main.cpp
中添加KY-040
的初始化代码及旋转和按下按键的简单处理操作,具体代码如下
1 | // main.cpp |
3.3 编译上传
点击upload
将修改后的代码编译上传到ESP32
中后复位,一切顺利的话应该就能通过旋转编码器切换OLED
显示屏上的图标并进入下一级界面(如果有的话)