横屏版esp32-s2做的usb迷你显示器,用于rpi,linux server很轻快

最近在用树莓派,然而没有配置好网络,得看下IP,才好操作。然后得抱大显示器,连上电源线,还要转换一下HDMI2VGA,如果只有一个显示器,得挪用,的确很麻烦。

于是想加一个小显示屏,显示出IP信息。后来觉得这个方案还是有点别扭。刚好esp32-s2有USB otg,做一个小尺寸的320*240的小显示器应该是可行的。

速度慢,帧率低点也行的。然后上google找了找,居然找到一个开源项目。



GitHub - robopeak/rpusbdisp: Drivers and Tools for RoboPeak Mini USB Display Project

项目做得挺早的,2013年,然后看了一下,只有上位机软件,下位机是用stm32做的,没开源下位机。

方案架构是fb kernel driver ->usb->display device

 也公布了协议。

有这个基础,省事。下位机再找几个开源项目改改应该就成了。B站上面有很多小电视,做得挺好的。

然后几周过去了,做了一个原型机,还可以,就是帧率慢,如果全屏刷新只有2.xFPS。因为fb只会更新需要的区域,所以有时候FPS会比较高。

然后一顿借鉴开源项目:目前还有几个严重的问题,方案大体上没啥大问题。我的目标是全屏8FPS,略有点卡,实际操作还能接受。

借鉴开源项目如下:

1.GitHub - robopeak/rpusbdisp: Drivers and Tools for RoboPeak Mini USB Display Project 

上位机内核模块,目前将它的RLE改为jpeg方案来获得更新的帧率。esp32s2是full speed只有12MHz的总线带宽,实现大约能到4Mbps,也就是500KByteps(通常400KBps多点,偶尔接近500KBps)。

2. git://github.com/Bodmer/TFT_eSPI.git     

借鉴DMA传SPI屏的数据。降低CPU开销,在解码jpeg时,DMA传输数据上次的解码数据,将300ms一帧减少到了120ms。提升很明显。

3. GitHub - nopnop2002/esp-idf-ili9340: SPI TFT Driver for esp-idf

借鉴SPI屏的驱动,然后裁得只剩个架子了。删除大部分。

4.git://github.com/serge-rgb/TinyJPEG.git

主机linux 内核编码jpeg,它原来是float浮点实现,我改成了整数,也让我重新认识了单位元e,1是特别的。就这个jpeg encoder我找了好几个项目,还是这个好。还能配置quality.

5. TJpgDec

esp32s2用的jpeg解码代码,很轻快。还有一个esp32专用版本。我还是改了一下。整合了DMA,觉得挺合适。

6. esp-idf + tiny USB

反正没有我要的,然后自己改改了vendor,还可以。

7. xserver

这也是挺坑的,挖了坑才用上的,估计还要挖坑。

最后:

大体上快收工了,国庆发一版本到github上,供大家参考。当然还有文档和方案架构。

有没有用esp32s3做24FPS的小伙伴?那货是双核。

横屏版esp32-s2做的usb迷你显示器,用于rpi,linux server很轻快_第1张图片

 

横屏版esp32-s2做的usb迷你显示器,60块钱的原型机,还是有不小的优化空间的_哔哩哔哩_bilibili有几年没搞windows了,搭环境费事,数字签名不好搞,已经没有key了https://www.bilibili.com/video/BV1Eq4y1f7Hk?spm_id_from=333.999.0.0

你可能感兴趣的:(DIY,Linux,干货,linux)