使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒

文章目录

  • 开发前提
  • I.获取机顶盒画面
  • II.安装VNC Sserver
  • III.红外线遥控
    • 红外线解码
    • 可视化操作平台
    • 红外线发送
  • IV.FRP内网穿透
    • FRP配置
  • V.使用流程
  • 写在最后

由于各种条件限制,我经常需要出差到外地进行机顶盒的调试工作, 但是我不想动弹 这个就会产生大量的差旅费用,增加公司的开销,为了解决这个问题,我研究了使用树莓派当作控制、显示平台,arduino作为红外线操作平台,使用frp进行内网穿透,实现异地调试机顶盒。以后小的问题就可以直接让运营带着这套东西去当地,技术直接远程调试就行了。

最后组装起来大概是这个样子的:
使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒_第1张图片
然后用远程桌面连接树莓派可以看到机顶盒的画面,大概是这个样子的(请不要吐槽画质,为了加快响应速度只能压一下画质了╮(╯▽╰)╭):
使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒_第2张图片

开发前提

1.带图形界面的Linux系统(windows系统也可以,考虑到这东西需要拿到外地去用,拿便宜小巧的树莓派当平台性价比更高)
2.arduino开发板
3.红外线接收模块/红外线发送模块各一个
4.视频采集卡
5.需要异地调试的机顶盒(遥控器得是红外线的)

I.获取机顶盒画面

首先,去某宝买一个支持linux平台的视频采集卡,将机顶盒和视频采集卡用HDMI线连接,将视频采集卡和树莓派用USB线连接。
接下来在树莓派上安装一个VLC media player[官方下载地址]
启动vlc,选择媒体-打开捕获设备,捕获模式使用默认的Video camera,视频设备名称选择插入采集卡后增加的设备(如果下拉框中没有显示可以手动输入)。音频设备名称只有一个选的,然后点播放就行了。其他品牌型号的采集卡有可能配置不一样,请咨询卖家客服。
使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒_第3张图片

II.安装VNC Sserver

这是远程桌面软件,通过这个软件和采集卡实现远程看到机顶盒画面。
vnc的使用请参考我另一篇博客Linux下vnc的安装、使用以及设置开机启动

III.红外线遥控

只能看见机顶盒的默认页面并没有什么卵用,还需要能够控制机顶盒(目前只讨论红外线的遥控器,蓝牙的以后再研究。)
树莓派自带GPIO,也有红外的模块LIRC,可是踩了一个多月的坑,看了大半个月的英文文档,最终还是扑街了,红外线发射模块无法正常工作╮(╯▽╰)╭
最后决定再加一个平台——arduino开发板,通过树莓派给arduino发送指令,arduino再来发送红外线。

红外线解码

首先准备一个arduino开发板,长这个样子(图片来自百度):
使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒_第4张图片
首先准备好红外线模块,一个用来发送,一个用来解析遥控器的信号(图片来自我买的那家某宝店)
使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒_第5张图片
用杜邦线连接红外线模块和arduino开发板,设置好针脚,先烧录红外线解码程序,然后通过串口监视器收集红外线码:
使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒_第6张图片
其中rawData就是我们需要的数据。

可视化操作平台

写代码是为了什么!为了偷懒! 提高效率!
用python的tkinter模块可以快速生成UI(虽然很丑)

try:
    import Tkinter as tk
except ModuleNotFoundError:
    import tkinter as tk

win = tk.Tk();
win.title("模拟遥控器");
win.geometry('300x620');#设置宽高

tk.Button(win,text=1,command=function1,width=3).grid(row=1, column=1,padx=10, pady=10, ipadx=10, ipady=10);
tk.Button(win,text=2,command=function2,width=3).grid(row=1, column=2,padx=10, pady=10, ipadx=10, ipady=10);
tk.Button(win,text=3,command=function3,width=3).grid(row=1, column=3,padx=10, pady=10, ipadx=10, ipady=10);

win.mainloop();

以上代码就可以生成3个按钮的UI,每个按钮的点击事件由command绑定。

红外线发送

先将红外线发送程序烧录到arduino上,然后将树莓派和arduino连接,运行写好了发送逻辑代码的python文件。当arduino收到树莓派发送的数据时,RX指示灯会亮。

IV.FRP内网穿透

因为涉及到实时的图像传输,长时间使用数据量会比较大,同时公司有个闲置的服务器,这次就决定不用免费的NATAPP,转用FRP进行内网穿透。
官方文档
官方下载地址
将压缩包分别下载到服务端和客户端(树莓派)上后解压即可。
使用FRP服务首先需要设置一下配置文件,好在官方已经提供了精简版的配置文件和全量配置文件,就在压缩包里面,服务端是 frps.ini 和 frps_full.ini。客户端是frpc.in 和 frpc_full.ini。

FRP配置

服务端配置:

[common]
bind_port = 7000
//默认配置中监听的是 7000 端口,可根据自己实际情况修改。

token = xxxxxxxx
//自定义字符串,用于连接验证,不用配置在common下

客户端配置:

[common]
server_addr = 1.1.1.1
// FRP服务端的公网IP
server_port = 7000
//对应服务端监听的端口

token = xxxxxxxxxx
//对应服务端的token

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5901
remote_port = 3000
//开放VNC使用的5901端口给服务端,服务端使用3000端口映射到5901端口。

服务端启动服务:./frps -c ./frps.ini
客户端启动服务:./frpc -c ./frpc.ini
客户端启动成功:
在这里插入图片描述

FRP还有更多功能,详细的使用方法请阅读官方文档。

V.使用流程

连接好各种硬件,启动树莓派。
首先SSH连接到树莓派,vncserver :1启动一个桌面。
然后./frpc -c ./frpc.ini启动FRP服务。
接下来用VNC使用服务器的公网IP+客户端配置的映射端口号连接桌面,我上面配置的是服务器的3000端口映射到树莓派的5901(就是VNC的端口),那么VNC应该连接的是:1.1.1.1:3000。
接着输入树莓派PI的账号密码登陆。
启动VLC播放器获取采集卡的推流。
运行遥控器的python文件。

写在最后

这套东西就是低配版的物联网,以后有时间了可以研究研究更多玩法,比如说在公司遥控家中的树莓派喂鱼喂猫,实时的家庭监控之类的(不要和我说市面上已经有现成的了,自己弄的才好玩啊!)

你可能感兴趣的:(使用树莓派+arduino+采集卡+frp实现异地控制电视机顶盒)