咕咕咕,大家有没有想我?
咕咕咕的小冰老师终于恢复更新了!
既然是恢复更新自然是要整些不一样的,放个大招!
这次捣鼓的项目是偶然在B站上发现的一个mmd盒子伪全息项目——【伪全息播放盒】会动的手办了解一下,感觉有点意思,成本也才300块,就买来材料进行diy了。
因为UP主提供的材料清单很详细,所以硬件部分基本没有踩坑。
但当我望着做好的盒子看着mmd里的美烧酒发呆时,却萌生了一个点子。
能不能让这个盒子的功能性得到展现,而不是只是一个普通的视频播放器。
于是,就打算复健一下html和python写一个小项目出来。
效果如图:
IMG_2362.GIF
项目名称:MMD-BOX
项目地址:https://github.com/Zfour/mmd-box
项目演示:https://www.bilibili.com/video/BV1WV4y1x7Ct
原理:使用python socketio&flask实现视频的实时控制,将原有的hexo clock插件进行了移植和适配,写入了定时更新方法。
接下来,废话就不说了,聊聊制作mmd盒子的注意事项&方法,以及MMD-BOX的开发思路和使用教程。

MMD-BOX硬件制作流程

1.购买所需的材料

在购入材料前建议先看一遍【伪全息播放盒】会动的手办了解一下,顺便一键三连,了解制作的大致步骤。
加入UP主大脸彭的大表哥的粉丝群 201675690 里获取所需要的材料购置清单。
在原有的购置清单中,个人认为需要增加删减的项,大家可以根据自己的实际情况调整,另外附上一些注意事项。
1.买屏幕的时候会送一根短hdmi线,如果你有拔插需求的话,可以在购买长hdmi线的基础上,加上一个15块的母对母延长转接头,可以避免频繁拔插mmd盒子的HDMI接口产生不必要的麻烦。
image.png
2.买屏幕的时候店家送的排线比较长有200mm,在盒子里不好塞,可以购买较短的排线更换(或者问问店家有没有短点的)规格是60p 0.5mm 5cm长的FPC排线
image.png
3.底板的驱动板不是很好固定,如果贴起来又不方便拆卸调试,建议是给*4根m218的尼龙螺柱进行支撑,因为我买的是套装这个大家自己搜就好。
image.png
4.UP主大脸彭的大表哥视频中提到了led供电和驱动板供电的问题,一开始有想过改供电,但由于盒子相对封闭的条件,走线自然是个坑,于是从源头出发,问题的关键在于减少一根供电线,于是我就采用了套娃方法,利用usb接口的转接和分线,成功省掉了一个供电线。【貌似买多了两根T口usb线,因为买屏幕的时候貌似给了一根,不记得了】
image.png
5.关于盒子的组装方面:首先灯板别忘了叫老板焊接,定做亚克力,买屏幕的时候记得说从b站大脸彭的大表哥过来的,有优惠。到货后,
建议不使用亚克力商家提供的胶水拼装,而是使用UP主清单中的耐热双面胶进行亚克力的贴合。一是方便拆卸,二是不会留下非常明显的痕迹还占得牢固。
6.关于屏幕的固定方面:屏幕没有着力点,强行贴合也不方便拆卸。建议拿到屏幕后
不要撕掉贴合在屏幕表面的两张保护膜**。利用保护膜的着力点作为固定屏幕的地方,就能保障屏幕不滑落,还方便拆。
image.png
7.关于长排线的折叠方案,这个千万别暴力塞,压久了会坏。
image.png
8.关于屏幕点亮的问题,在群里潜伏的这几天,有友友反应屏幕点不亮。首先检查自己有没有开背光,然后拔插hdmi与供电线反复尝试。最后更换供电插头(别使用快充头),驱动板应该是5v 2a的供电。最后则是检查一遍排线是否插好,重新连接一下。
9.关于屏幕闪烁的问题,有时候屏幕会因为没有成功点亮导致闪频的情况出现,这时候不要慌,开机挂上20分钟1小时。(感谢店家的解答)
10.担心led耗电?其实不用担心,一天也就1分钱…
11.有闲钱的话还可以加个usb开关啥的。

2.细节处展示

1.散热板的摆放
image.png
2.尼龙柱的摆放与排线
image.png
3.供电统一接线
image.png

MMD-BOX网页开发流程

1.hexo clock的移植

这个其实没花什么功夫,主要是css的适配问题,用了flex布局稍微调了一下,在背景处加了个video标签放视频。
因为是长时间使用,刷新网页的频率不多,所以日期和天气的更新可能会出问题。
这里对时间和天气的网络请求进行了定时操作,每小时整点刷新一次,保障数据的更新。
目前存在的问题:该请求是通过ip进行查询的,因此如果开了梯,就可能地点异常。有时也会找不到地点。后期考虑接入更多可切换天气获取源,支持手动选择模式。

2.根据目标需求简单实现功能

作为视频播放盒子,最重要的痛点在于控制视频的播放模式。
于是就简单通过socketio实现了网络请求实时响应的方法。
可以通过ip4(路由本地地址)+/路由的形式切换视频。
这样写的目的一是实现实时操作,二是能够同过局域网实现跨设备操作。
例如,使用熟悉的ios快捷指令充当遥控器。
D70LS565$8TVT~2B}}%4{GS.jpg
image.png

当然,电脑也需要有操作途径,于是使用pyqt5将网络请求封装了一下,制作了一个exe,从而方便小白用户使用。

img.jpg

目前实现的beta 1.0版本实现了基本的功能,后面的话,会继续优化功能。
1.尝试其他可交互指令以及服务端消息推送开发,例如添加代办事项,rss订阅查询推送
2.桌宠模式,通过手机控制单一mmd角色实现手机控制,对应mmd动画的响应以及视频制作
3.游戏模式,桌面俄罗斯方块、叠叠乐,通过手机手柄进行游戏控制(待定)

3.编码途中踩坑

1.socket局域网跑不通的问题:可以尝试重启一下电脑,检查一下是否端口被占用或者防火墙设置。
2.ide跑flask记得加入初始参数端口,开启debug模式。
3.flask打包会出现找不到templates问题,这时需要在run.py中加入以下代码。

if getattr(sys, 'frozen', False): template_folder = os.path.join(sys.executable, '..', 'templates') static_folder = os.path.join(sys.executable, '..', 'static') app = Flask(__name__, template_folder=template_folder, \ static_folder=static_folder)

4.socketio部分隐藏依赖在打包时会取不到导致报错。
main.spec加入隐藏依赖。

hiddenimports=['pymysql', 'gevent', 'geventwebsocket', 'gevent.ssl', 'gevent.builtins', 'engineio.async_drivers.threading']

MMD-BOX使用教程

1.打开项目releases地址:https://github.com/Zfour/mmd-box/releases/tag/Beta
下载beta1.0。
image.png
2.解压压缩包,打开exe。
image.png
3.点击启动MMD-BOX,这时会挂载本地5050端口socket&flask服务,使用过程中不要关闭这个exe,关闭或点击停止MMD服务都将中断连接。
image.png
4.想要播放更多视频,可以打开视频目录,将想要的视频复制进去即可。目录为static\video。
image.png
5.切换循环模式,顾名思义,想要让一个视频循环播放,可以点单个循环。想刷列表视频则选择列表循环。
image.png
6.如果你不想看到时间UI,只想欣赏萌妹子的曼妙舞姿,你也可以切换UI显示模式,其实就是简单调了下display属性。
image.png
7.最后,播放上一个视频和下一个视频,顾名思义。就是切换,会马上响应。
image.png

最后

这时恢复更新的第一帖,接下来会继续优化这个项目,另外也会给朋友圈写点新的插件,做做感兴趣的硬件小玩意之类的,尝试通过python、html、硬件实现一定的交互操作。希望不鸽!
有任何问题可以在这个群里找到我——》674527148。
就这样了,下次预告,可能是个便携屏。