树莓派3 USB端口定时控制乐高灯光及手机远程控制求助
树莓派USB端口自动化控制+远程手动控制方案
一、自动化定时流程实现
1. 获取所在地区黄昏时间
用sunwait工具专门处理日出日落/黄昏时间,比手动计算靠谱。先安装:
sudo apt update && sudo apt install sunwait
自己查下所在地区的经纬度(比如用地图APP定位后查看坐标),格式是「纬度N/S 经度E/W」,比如上海是31.2N 121.4E。
2. 编写USB开关脚本
创建一个可复用的脚本usb_light.sh,替换成你自己的uhubctl参数(用uhubctl命令能查到对应的总线和端口号):
#!/bin/bash case "$1" in on) uhubctl -l 1-1 -p 2 -a on # 这里的-l和-p根据你的树莓派USB总线调整 ;; off) uhubctl -l 1-1 -p 2 -a off ;; esac
给脚本加执行权限:
chmod +x usb_light.sh
3. 配置定时任务
用系统自带的cron来实现每日重复执行:
打开crontab编辑界面:
crontab -e
添加以下两行(替换成你的经纬度和脚本路径):
# 黄昏时刻自动开启USB @daily sunwait sun down 31.2N 121.4E && /home/pi/usb_light.sh on # 凌晨2:30自动关闭USB(选凌晨2-3点之间的任意时间即可) 30 2 * * * /home/pi/usb_light.sh off
保存退出后,cron会自动生效。
二、手机远程手动控制方案
1. SSH直接控制
树莓派先开启SSH:打开raspi-config → 选「Interfacing Options」→ 开启SSH。
手机装个SSH客户端(比如Termius、JuiceSSH),输入树莓派的局域网IP,登录后直接执行./usb_light.sh on或./usb_light.sh off就能手动控制。如果要外网访问,需要在路由器上做端口转发(转发22端口到树莓派IP)。
2. 极简Web界面控制(可选,更直观)
用Python写个简单的网页,手机打开浏览器就能点按钮控制:
先安装Flask:
pip install flask
创建app.py文件:
from flask import Flask, render_template_string import subprocess app = Flask(__name__) def control_usb(state): subprocess.run(["./usb_light.sh", state]) HTML_TEMPLATE = """ <!DOCTYPE html> <html> <body style="text-align:center; margin-top:50px;"> <h1>乐高灯光控制</h1> <form method="post" action="/on"> <button style="padding:10px 20px; font-size:18px;" type="submit">开启灯光</button> </form> <br> <form method="post" action="/off"> <button style="padding:10px 20px; font-size:18px;" type="submit">关闭灯光</button> </form> </body> </html> """ @app.route('/') def index(): return render_template_string(HTML_TEMPLATE) @app.route('/on', methods=['POST']) def turn_on(): control_usb('on') return render_template_string(HTML_TEMPLATE) @app.route('/off', methods=['POST']) def turn_off(): control_usb('off') return render_template_string(HTML_TEMPLATE) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
运行脚本:
python app.py
手机在局域网访问http://你的树莓派IP:5000就能直接点按钮控制了。外网访问同样需要路由器转发5000端口。
内容的提问来源于stack exchange,提问作者AmongTheShadows
相关产品推荐
相关产品推荐

