爱意满满的作品展示区。
RedL0tus

闲着无聊用 Rust 写了个在 SSD1306 上播放 Bad Apple 的程序,以及一些废话

  •  
  •   RedL0tus ·
    RedL0tus · Mar 25, 2020 · 2794 views
    This topic created in 2252 days ago, the information mentioned may be changed or developed.

    无聊水个贴(((

    过程

    前两天无聊把我的一个吃灰了两三年的 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 的库。

    写了几天之后完成了基本的框架,想摸鱼的时候跟别人聊了几句,经过提醒想起来:

    我还没有放过 Bad Apple

    这个 ssd1306 的库用了另一个叫 Embedded Graphics 库,配合另一个叫 tinybmp 的 crate 能显示 bmp 图像。于是我就去 Niconico 下载了 Bad Apple,用 FFmpeg 魔法转换成了 6000 多张 BMP ( 30FPS,整个视频四分钟不到),配合一个 build.rs 把它嵌进了二进制里面。不过这么做写着是简单了,编译时间就爆炸一般得长,release build 花了快二十分钟。

    orig.gif

    可以看到 FPS 超低... 我也没啥好办法,直接用 FFmpeg 加速然后重新生成图片。我加速了 3.33333 倍(误),这次就只有 1000 多张图片了。这次重新编译就快多了,最后结果是这样的:

    again.gif

    我觉得效果海星了,直接打包放到了 GitHub 上。

    后话

    写完之后才知道 Linux 自己就有 SSD1306 的 framebuffer 驱动,改个设备树就能用,我太难了。
    然后还有个问题是不知道为什么我 tinybmp 跟 Embedded Graphics 搭配使用的时候遇到了问题,最后用的还是 ImageRaw,估摸着这样的话经不经过 Embedded Graphics 我估计都已养了,我太难了。
    最后就是... 本来想着能不用 std 的,后来想起来 linux-embedded-hal 自己就有在用 std,于是就放飞自我继续使用 std,我太难了。

    3 replies    2020-03-25 16:09:46 +08:00
    1daydayde
        1
    1daydayde  
       Mar 25, 2020
    是个大佬
    CismonX
        2
    CismonX  
       Mar 25, 2020   ❤️ 1
    正巧,我大三时候课程设计做过一个 BBB + SSD1306 + MFRC522 的门禁系统。

    当时从 GitHub 上面找 BBB 的 SSD1306 库,只找到了 I2C 的,但是我那块 SSD1306 板子只支持 SPI,于是只好拿一个封装好的 SPI 库改造了一下。同理,MFRC522 的库只找到了 Arduino 的,而 BBB 是 Linux,也改造了一遍。最后课程设计顺利完成。虽然很 low,但也斗胆放上来: https://github.com/CismonX/BBB-Simple-ACS

    我大概是那个时候体会到了 GitHub 和开源软件的魅力。如果没有他们,我就只能自己看时序图造轮子。像我这种菜鸡完全不可能在规定的一周内完成课程设计
    bbbb
        3
    bbbb  
       Mar 25, 2020
    膜拜大佬,前几天在 openwrt 下显示,最好 Google + GitHub 才搞定,羡慕你们能自己写。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3509 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 11:15 · PVG 19:15 · LAX 04:15 · JFK 07:15
    ♥ Do have faith in what you're doing.