用微信控制树莓派
文章目录
源码
老习惯,先抛源码,老司机可以直接读源码
动机
- 近期公司有一个有趣的项目,希望用乐高玩具式的可视化编程工具来操控硬件(在网页中)
- 所以想把硬件的响应包装为服务
- 于是得到可以用微信操作树莓派这个副产品
- 所以想把硬件的响应包装为服务
- 树莓派操控硬件需要有root权限,作为服务之后则没有限制
- 解耦
想法
- 将微信视为控制界面(interface), 获得联网能力(远程操作)
- 将树莓派视为连接代码和物理世界的介质
架构设计
- 初期效用flask作为web框架
- 使用flask-sockets提供websocket服务:led_websocket.py
- 把led_server视为下位机,api视为指令集
树莓派与GPIO
关于如何使用树莓派的引脚操作外部设备,推荐阅读mango同学的树莓派GPIO入门01-使用GPIO接口控制发光二极管闪烁,写得十分清楚
通过RPi.GPIO
库,我们几乎不需要硬件的知识,就能轻易地用python代码操控硬件
接口定义
我们接下来led为例,演示如何将硬件功能暴露为api,可通过http请求,操控硬件(暂不考虑操作权限/安全问题,如果你愿意可以简单定义一个秘钥:?key=xx
),对细节感情兴趣的小伙伴可以跟进我的源码库,我有计划把它做得完备。
目前我们定义三个功能:
- 点亮led灯
- 熄灭led灯
- 使led灯闪烁几次
接下来使用flask将其暴露出去,成为web api
代码读起来很容易:
|
|
完整的源码参考led_server.py
现在我们可以把服务跑起来了:sudo python led_server.py
ps: websocket版本参考这里:led_websocket.py
测试接口
我的树莓派当前ip为:192.168.0.106
我们对这些api进行测试:
- 点亮红灯: curl 192.168.0.106/led_up
- 熄灭红灯: curl 192.168.0.106/led_down
- 闪啊闪 : curl 192.168.0.106/led_up_down
你也可以在浏览器里控制这些灯(使用js):
|
|
如此一来我们可以在浏览器里操控硬件了
对接微信
对接微信这步很简单,如果你读过我之前的文章:把聊天机器人接入微信,直接看源码就好了。没读过前文也没关系,代码很好理解,我把核心部分列下:
|
|
源码在这里:wechat_pi.py
跑起来就好:python wechat_pi.py
,由于需要微信扫码,所以先把你的树莓派连到屏幕上(使用图形界面),我使用VNC,之后有空把二维码弄到命令行里
脑洞
因为微信能在广域网中使用,所以你可以在任何能联网的地方控制树莓派了,进行远程控制,我最近的一个脑洞是在下班路上用微信给树莓派发一个打开空调
的消息,就可以提前打开空调啦
原理也很简单使用红外接收器学习空调遥控器的指令集(目前只要开关机的指令),然后使用红外发射器伪造成遥控器控制空调。最后对接到微信即可
目前采集红外信号部分已经完成了
文章作者 种瓜
上次更新 2016-08-29