用树莓派4B打造纯ATV 10代替电视盒子

家里的电视买的比较早,“创*“什么的牌子,开机有广告。而且用了几年了,速度比较卡。无法接受的是不让装第三方软件,下定决心要搞一个性能比较猛的盒子了。但是看了一圈,普遍都不再预算范围内。

恰巧工作上用到树莓派4,当然用3也是可以的。理论上两个设备的固件是一样的。那决定用这个设备来尝试一下搭建一台用着还算比较爽的 ATV。

本文大部分参考原文翻译:
https://konstakang.com/devices/rpi4/

首先购买一片树莓派4B,现在买一片低配的版本就可以了,2G的大概在270元左右,还有要买一片红外接收头,100欧的电阻一只(建议安装)。参考网上的接图。

图片来自:
https://shumeipai.nxez.com/2016/01/17/infrared-remote-control-remote-raspberry-pi.html

图片中使用了 GPIO18 脚,Raspberry Pi OS 默认定义的引脚是 GPIO17,如果你想要调试 Raspberry Pi OS 环境,那需要注意这一点;我建议你在VCC串接一只R100的电阻并在5V取电,测试效果也不错。如果你没有R100,作为测试你可以在3.3V取电。

遥控接收管有很多型号,他们推荐的TSOP4838或者我推荐的VS1838B都可以,甚至价格更加便宜。

烧录ATV镜像到SD卡;使用 Raspberry PI Imager 就可以了。

https://konstakang.com/devices/rpi3/LineageOS17.1/

以下基本上是对原文 FAQ 的翻译;
Q: 怎样开启开发者模式(Root,终端窗口前提条件)?
A: 设置 -> 关于 -> 点击 ‘Build number’ 若干次。

Q: 开启root权限?
A: 开发者选项 -> Root 权限;不建议开启,你懂的。

Q: 开启终端应用?
A: 开发者选项 -> 本地终端。

Q: 高级重启?
A: 开发者选项 -> 高级重启。

Q: 只看到启动画面,不进入主屏幕?
A: 估计是屏幕不支持适配,试着在Windows下修改 /boot/resolution.txt 里面的分辨率设置. 删除 /boot/resolution.txt 这个文件的话,系统也会尝试多次适配。

Q: 存储空间和SD卡大小不一致?
A: 启动到recovery,参考开启高级重启;重启到TWRP,刷入我们的扩容包。
扩容包下载地址:
https://www.androidfilehost.com/?fid=8889791610682901036

需要你自行复制到U盘或者SD存储。

Q: 没有物理按键?
A: 插键盘
F1 = Home,
F2 = Back,
F3 = Multi-tasking,
F4 = Menu,
F5 = Power,
F11 = Volume down,
F12 = Volume up.

Q: 自己弄一个物理电源按键?
A: GPIO21 和 GND之 间加一个按钮。在设置中开启相关选项即可(需重启生效)。居然这个按钮还支持启动到Recovery(长按有效)。

Q: 在HDMI和3.5之间切换音频?
A: 设置中找到Raspi相关选项,可以切换。并且支持DAC(我没有测试)。

Q: 启用适配红外遥控》
A: 在设置中找到树莓派相关选项,打开相关设置。原文中指定了一个配置文件的页面:
https://github.com/lineage-rpi/android_external_ir-keytable/tree/lineage-17.1/rc_keymaps
其实没啥大用,本文会稍微详细讲解一下:
首先在/boot/下rc_keymap建立一个rc_keymap,注意没有扩展名。文件的格式注意设置为Unix(LF)+UTF-8。Notepad++默认的Windows格式是不会生效的。这一点官方文档上没有强调,困扰了很久。

接下来第一行

type: nec 这里是小写的,很多文档写成了大写,测试下来会报错,但是启动的时候又不会显示这些报错。
最后是键值获取和定义,ATV嘛,肯定有一些普遍的键值,上下左右什么的。
开启root权限,还有本地终端应用,开启IR Remote(这三步必须)。
打开终端,输入:

su
ir-keytable -p nec #这步非必须,将遥控协议转为nec,注意是小写。如果你的遥控不能回显,可以试着执行这步。
#Protocols changed to nec 表示成功;
Ir-keytable -t #键值检测,非常有用,按ctrl+c退出。

这个时候系统会给出一个提示符,要求你按遥控上的按键。我建议你只安装我们给出的列表顺序按键就可以了。基本上满足ATV的要求了。
首先是方向键上,记录下scancode=后面的值(就是键值)。逐个替换下面的键值,最后保存到 /boot/rc_keymap 这个文件即可。如果你用Windows,可以在移动磁盘里用notepad+新建一个文件,格式要求见上文。

# table lg akb7291, type: nec
0x408 KEY_POWER
0x443 KEY_MENU
0x45b KEY_HOMEPAGE
0x440 KEY_UP
0x406 KEY_RIGHT
0x407 KEY_LEFT
0x428 KEY_BACK
0x441 KEY_DOWN
0x444 KEY_ENTER
0x4aa KEY_ENTER
0x403 KEY_VOLUMEDOWN
0x402 KEY_VOLUMEUP

注意:
1、首先确认你的遥控器是红外遥控,方法是用手机摄像头拍摄一下,如果有光的就是红外遥控。如果是蓝牙的,可以直接用设置-遥控器和配件进行配对,效果也很好。非广告插入,敏感体质请绕行。

2、米家的遥控器使用了自有的协议,解码存在问题;在获取键值过程中通常无效。

3、原文中的KEY_OK没有测试成功,换KEY_ENTER后测试有效。 文中用到了AKB7291这个遥控器,如果你没有把握可以直接买这个。

本文来自 @最爱肉松 的投稿:
https://make.quwj.com/project/358

这是一篇发布于 4年 前的文章,其中的信息可能已经有所发展或是发生改变,请了解。


3 评论

  1. 你好,我装好一个红外接收头,在设置中打开了infrared romote的选项,进系统在终端中用ir-keytable -t #键值检测到遥控器的各个键值。
    按照方法用notepod++把键值写入(已经转换成UNIX(LF) UTF-8)到BOOT目录下的rc_keymap文件中,但重启后树莓派的android tv还是无法用这个红外遥控器操控,没有任何反应。
    能请教下是哪里没有做好么。
    # table lg akb7291, type: nec
    0x40 KEY_POWER
    0x4d KEY_MENU
    0x56 KEY_HOMEPAGE
    0x47 KEY_UP
    0x4a KEY_RIGHT
    0x48 KEY_LEFT
    0x4c KEY_BACK
    0x4b KEY_DOWN
    0x49 KEY_ENTER
    0x49 KEY_OK
    0x18 KEY_VOLUMEDOWN
    0x0c KEY_VOLUMEUP

发表评论

你的邮件地址不会公开


*