V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
RedL0tus
V2EX  ›  分享创造

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

  •  
  •   RedL0tus ·
    RedL0tus · 2020-03-25 08:37:56 +08:00 · 2268 次点击
    这是一个创建于 1512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    无聊水个贴(((

    过程

    前两天无聊把我的一个吃灰了两三年的 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 条回复    2020-03-25 16:09:46 +08:00
    0312birdzhang
        1
    0312birdzhang  
       2020-03-25 09:28:42 +08:00
    是个大佬
    CismonX
        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 和开源软件的魅力。如果没有他们,我就只能自己看时序图造轮子。像我这种菜鸡完全不可能在规定的一周内完成课程设计
    bbbb
        3
    bbbb  
       2020-03-25 16:09:46 +08:00
    膜拜大佬,前几天在 openwrt 下显示,最好 Google + GitHub 才搞定,羡慕你们能自己写。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3276 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:28 · PVG 21:28 · LAX 06:28 · JFK 09:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.