esp32 spi 驱动 oled 屏显示来自 PC 的画面
实验代码
设备及运行环境
- 装有python的电脑
Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
- esp32开发板(ttgo-t-display)
- 0.96 OLED(80 * 160 ST7735S)
流程
- PC端
- py截屏
- py缩小图片
- py将缩小的图由rgb转成 rgb565
- 将图片转码完成后以字节流的方式存入临时bin文件
- 读取bin文件,通过socket发送
- 因为需要转码、转存文件,测试之后大概是一秒四帧。(这个时候socket缓冲默认,后来缓存调整得很大,发送帧率上去了,但是数据还是堵在服务端没发送出去。。。)
- esp32
- 连接 wifi 的同时设置好端口(跟PC端设置的socket端口一样,我只是使用了 arduino中的WIFI库, 可以使用socket方式接收数据也是偶然发现的,~~后续有新的发现会做记录(谁知道我还会不会想起来嘿嘿)~)
- 设置 oled 屏 io 口,使用SPI驱动oled屏(这里有一些不理解。。。 查看 ttgo 的 io 说明,发现上面标注我所使用到的 io 口都是gpio,并不是被标注为 SPI。所以有可能是gpio模拟的 spi???~~后续有新的发现会做记录 嘿嘿~)
使用的库
- TFT_eSPI
- arduino 的 wifi 库(不确定是arduino的通用库,还是esp32的专属库。。。。。)
OLED 配置方式
- 软件配置
-
修改配置文件。修改 TFT_eSPI 根目录里面的 User_Setup_Select.h, 将#include <User_Setups/Setup43_ST7735.h> // Setup file configured for my ST7735S 80x160的注释删掉,然后将其它不需要用到的配置头文件注释掉
-
修改 io 口。 修改 TFT_eSPI/User_Setups/Setup43_ST7735.h 的文件, 修改 io 口(这里直接就是对应开发板上面标注的 io, 这里直接没有设置背光 )
#define TFT_MOSI 26 // 对应 oled板的 sda #define TFT_SCLK 27 // 对应 oled板的 scl #define TFT_CS 32 // 对应 oled板的 cs #define TFT_DC 33 // 对应 oled板的 dc #define TFT_RST 25 // 对应 oled板的 res #define TFT_BL 0 // Display backlight control pin
- 设置 wifi 得 client
const IPAddress serverIP(192,168,0,104); //欲访问的地址 uint16_t serverPort = 8080; //服务器端口号
-
运行时发现的问题
- 问题: 帧率低(一秒一帧。。。)。
- 实际测试来看,屏可以实现更高帧率,问题有可能是出现在了数据接收这一块,因为没有找到arduino 的 wifi库里面 client类设置缓冲大小的方法,所以缓冲是没有设置的。
- 问题: 内存告急
- 为了解决无法设置缓冲大小的问题&#x