无聊水个贴(((
前两天无聊把我的一个吃灰了两三年的 SSD1306 屏幕翻出来了,想给 Jetson Nano 做个监控程序(主要是闲得慌)。我自己不懂 I2C 就先在 GitHub 上翻了翻有没有作业可以抄。搜索 SSD1306 之后热门的几个库都是 C/C++。虽然我的 C++ 水准在 Hello World C with Class 级别,但是本来想着 C/C++ 资料那么多,实现标准的话我还能看看文档抄抄作业糊一个出来。然而那些基本上都是给嵌入式平台设计的,没有用标准的构建系统,完全没有头绪应该怎么搞,于是放弃。
至于 Python 的话真的不想搞... 以前写过一个差不多的东西,但是性能实在是太烂了,再一个也怕跑久了漏内存太厉害。
后来仔细一看发现有搜索结果里面有个 Rust 的库,名字直接就叫 ssd1306,硬件相关的部分使用的 Rust-Embedded 的大佬们整的 embedded-hal。它实际上本来也是给嵌入式环境(主要是 Cortex-M )使用的,但是 Rust-Embedded 的大佬们同时还整了个叫 linux-embedded-hal 的 crate,可以在 Linux 上用使用了 embedded-hal 的库。
写了几天之后完成了基本的框架,想摸鱼的时候跟别人聊了几句,经过提醒想起来:
这个 ssd1306 的库用了另一个叫 Embedded Graphics 库,配合另一个叫 tinybmp 的 crate 能显示 bmp 图像。于是我就去 Niconico 下载了 Bad Apple,用 FFmpeg 魔法转换成了 6000 多张 BMP ( 30FPS,整个视频四分钟不到),配合一个 build.rs 把它嵌进了二进制里面。不过这么做写着是简单了,编译时间就爆炸一般得长,release build 花了快二十分钟。
可以看到 FPS 超低... 我也没啥好办法,直接用 FFmpeg 加速然后重新生成图片。我加速了 3.33333 倍(误),这次就只有 1000 多张图片了。这次重新编译就快多了,最后结果是这样的:
我觉得效果海星了,直接打包放到了 GitHub 上。
写完之后才知道 Linux 自己就有 SSD1306 的 framebuffer 驱动,改个设备树就能用,我太难了。
然后还有个问题是不知道为什么我 tinybmp 跟 Embedded Graphics 搭配使用的时候遇到了问题,最后用的还是 ImageRaw,估摸着这样的话经不经过 Embedded Graphics 我估计都已养了,我太难了。
最后就是... 本来想着能不用 std 的,后来想起来 linux-embedded-hal 自己就有在用 std,于是就放飞自我继续使用 std,我太难了。
1
0312birdzhang 2020-03-25 09:28:42 +08:00
是个大佬
|
2
CismonX 2020-03-25 10:25:08 +08:00 1
正巧,我大三时候课程设计做过一个 BBB + SSD1306 + MFRC522 的门禁系统。
当时从 GitHub 上面找 BBB 的 SSD1306 库,只找到了 I2C 的,但是我那块 SSD1306 板子只支持 SPI,于是只好拿一个封装好的 SPI 库改造了一下。同理,MFRC522 的库只找到了 Arduino 的,而 BBB 是 Linux,也改造了一遍。最后课程设计顺利完成。虽然很 low,但也斗胆放上来: https://github.com/CismonX/BBB-Simple-ACS 我大概是那个时候体会到了 GitHub 和开源软件的魅力。如果没有他们,我就只能自己看时序图造轮子。像我这种菜鸡完全不可能在规定的一周内完成课程设计 |
3
bbbb 2020-03-25 16:09:46 +08:00
膜拜大佬,前几天在 openwrt 下显示,最好 Google + GitHub 才搞定,羡慕你们能自己写。
|