最近在期末考试, 有些无聊, 忽然想起家中还有一块全新的Raspberry Pi, 就决定用它来做一些什么东西。
之前做传感器, 用到了LCD(液晶显示)模块, 觉得这个还可以用在Raspberry Pi上面, 就开始设法通过Raspberry Pi来让LCD播放Bad Apple视频。
至于为什么是Bad Apple, FB做了个OS播放的Bad Apple, 44用点阵播放的Bad Apple, 某人调戏任务管理器播放的Bad Apple, 还有很多很多人播放的是Bad Apple。
首先, 这块LCD还是比较便宜的, 15.8元一个, 分辨率是128×64, 还是能满足我的要求的:)
我是在这里购买的, 如果你发现了更便宜更好用的请告诉我。
它和上位机通过”半个”SPI总线来通讯。
“半个”的原因是它不需要用到MISO这根线(字库版本需要用到这根线来发送字模信息)。
具体的信息可以参见它的datasheet。
主要就是写”显存”(我不知道”显存”用在这里是否恰当):
首先, 整块屏幕被分为8个page, 每个page对应屏幕中一个128×8的部分, 从上到下依次为page0~page7。
每个page中, 从左到右分为128个列, 每个列中恰好有8个像素, 自然, 就是一字节了。
这个字节对应的一列像素中, 从上到下依次为字节的第0位~第7位。
于是, 只需要确定写到哪个page以及从第几列开始写, 就可以很好的写显存了。
这个LCD还有CS、RST、AO三根线, 我使用Raspberry Pi的GPIO来操作。
实际上, SPI也可以用GPIO来模拟, 效果也不会很差(之前做的一个低功耗传感器就是手动模拟的I²C), 既然有硬件支持, 那就不造轮子了XD。
于是, 今天查阅了Raspberry Pi的GPIO和Raspberry Pi的SPI的资料。
顺便找到了一份比较高质量的Bad Apple视频, 并把它处理成了完全黑白两色的图像。
在处理图像的时候用的是Python Image Library, 十分好用。
另外, 在我大致实现播放之后的测试环节中, 发现FPS十分的小, 也就是显示出来十分的卡。
而仅仅注释掉输出数据到LCD的语句, 就能使得FPS增加很多。
我就开始设法减小传送到LCD的数据量, 使用了十分简单的差量传输(就是只传输改变的部分), 这样FPS会总体得到提高, 但是十分的不稳定。
效果还不错。
PS. 结合Pi Camera玩耍, 还可以作为超级简陋的摄像头预览。
1 条评论。