Siri 语音控制小夜灯 2022-01-09 前进路上 暂无评论 2671 次阅读 本文发布于2022-01-09, 文章内容或资源可能已经失效,仅供参考,谢谢。 long long ago,我在某多多花了1分钱买了个普普通通小夜灯。订单里它长这样 [![小夜灯订单](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-0.jpg "小夜灯订单")](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-0.jpg "小夜灯订单") 等小夜灯送过来一看,嘿,它的确长这样,真是出乎我的意料。 [![小夜灯](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-1.jpg "小夜灯")](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-1.jpg "小夜灯") ---- 不过现在我不是要夸奖商家是多么的童叟无欺,看一下标题,我要介绍一下怎么用苹果设备上的 Siri 来通过语音控制这个小夜灯的开关。 # 第一阶段(手动控制) 这个小灯只暴露了一根USB接口线来作为电源输入方式,没有电池,本身也没有控制小夜灯的开关。使用方式为USB线接上电就亮,断开就不亮,逻辑很简单。 每当夜幕降临,拿出我祖传的“五福一安”充电器,插在寸土寸金的插板上,把小夜灯的 USB 线插在充电器上,然后小熊亮了。许久以后,我困了,不想耍手机了,要睡了,就得从床上爬起来,把小夜灯的 USB 线断开,然后去睡觉。 麻烦! 但我很长时间以来都是这么用的。 # 第二阶段(Siri控制) 当我说出通过 Siri 语音控制小夜灯的时候,你们一定好奇一个点,那就是 Siri 跟小夜灯怎么进行交互?我也不卖关子,就是通过树莓派(Raspberry Pi)。 某天我想开小夜灯的时候,看着小夜灯的USB线突发奇想,我还有一台吃灰的树莓派啊,能不能把它利用起来更加方便地控制小夜灯? 也就是在同一瞬间,一个解决方案浮现在脑海,这个解决方案最终达到的效果是可以通过苹果设备的Siri直接语音控制小夜灯的开关。 通过Siri控制小夜灯的开和关,需要先把小夜灯的USB线插在树莓派上,并且树莓派要连上网。我设想的具体流程是这样的。 > 1. 对苹果设备说“Hey Siri,打开小夜灯” 2. Siri 被唤起,并根据“打开小夜灯”指令匹配到事先添加好的快捷指令 3. 苹果设备执行“打开小夜灯”快捷指令,这个快捷指令只有一个操作,就是通过网络连接到树莓派,并向树莓派发送一个指令 4. 树莓派通过执行收到的指令来控制其USB口电源的开关,这样就做到了小夜灯电源的开关。 以上这4个步骤中,1、2、3没有问题,之前做过,我知道链路是通的。关键就在于第4步,之前没了解过树莓派是否可以控制其USB口的电源开关,但我还是持有乐观态度,我认为八成可以。 ### 树莓派控制USB口电源 经过网上冲浪,我找到了通过`uhubctl`来控制树莓派USB口电源的方法。以下操作均在我的树莓派4B(Debian 10)中执行,其他型号的树莓派请自行确认是否适用。 1. 检查4B的EEPROM固件版本,固件版本不能低于`000137ad` ```shell sudo rpi-eeprom-update ``` [![固件版本](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-2.png "固件版本")](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-2.png "固件版本") 2. 安装 `uhubctl`,版本最好不低于2.4.0。一开始我通过apt-get安装的,版本并不是最新的,导致控制失败(失败的现象是USB电源切断后又迅速恢复)。 后来我找到了`uhubctl`的github仓库,然后通过源码编译安装最新版。 编译安装前需要先安装`libusb-1.0` ```shell sudo apt-get install libusb-1.0-0-dev ``` 然后获取源码并编译 ```shell git clone https://github.com/mvp/uhubctl cd uhubctl make ``` 安装在`/usr/sbin/uhubctl` ```shell sudo make install ``` **据说安装完需要重启一下树莓派,但是我没有重启也没问题。** 3. `uhubctl`安装完毕,来试一下它是否好用。把小夜灯插在树莓派的任意USB口中。刚插上去后小夜灯亮了,说明USB供上电了。我们来关闭试一下 ```shell sudo uhubctl -l 2 -a off ``` 执行指令后看到小夜灯关闭了,说明USB口电源被切断了。由于树莓派的USB拓扑结构,4个USB端口的供电是统一控制的,上面这个指令关闭了4个USB端口的电源。 我们再来打开试一下 ```shell sudo uhubctl -l 2 -a on ``` 可以看到小夜灯又亮了。 成功! 4. 还剩最后一步,在苹果设备上创建2个快捷指令,一个叫“打开小夜灯”,一个叫“关闭小夜灯”,每个快捷指令里分别有个“通过SSH运行脚本”的操作。 配置方式如图(请确保在系统设置里给快捷指令“允许运行脚本”的权限) [![配置快捷指令](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-3.JPEG "配置快捷指令")](https://api.wuwz.net/distribute/web/zkkme/img/0041/0041-3.JPEG "配置快捷指令") 由于我配置的主机地址为局域网ip,所以需要将苹果设备与树莓派连接在同一个局域网下才能进行控制。当然也可以通过其他手段(公网ip接入、内网穿透)来实现通过公网控制,就不必在同一个局域网下了。 5. 完成以上步骤,就可以通过“Hey Siri,打开小夜灯”和“Hey Siri,关闭小夜灯”来打开和关闭小夜灯了。比原先方便多了。 # 改进方向 后续可以改进小夜灯的供电接口,以通过树莓派的GPIO引脚进行控制,毕竟通过切换树莓派的4个USB口电源来控制小夜灯不那么优雅。不过由于USB口暂时只有这一个小夜灯在用,所以还可以,问题不大。 > REFERENCE - ctl命令 usb_通过命令行控制树莓配4B的USB口电源以实现USB设备的复位操作 标签: 树莓派 如果您对此页面有任何问题或建议,请在本站留言,或联系邮箱me[at]zkk.me本网站部分内容转载自其他网站,如有侵权,请联系博主