很长一段时间,笔者一直在使用树莓派4当作电脑来用。为了实现控制电灯,笔者使用C语言,用GTK库编写了一个软件,通过点击的方式,控制树莓派的gpio针脚,通过继电器完成电灯的控制。
为了更方便控制,笔者想到了ssh开关。这是一个app,可以设置快捷命令。实现一键链接ssh并执行指令,从而遥控电灯。
虽然这样很方便,但笔者还是想用自己的方式实现它。于是设计了这个系统。后端采用python3,用fastapi框架和RPi.GPIO库开发。APP端使用expo(react native)开发,从而实现手机控制电灯。
下面是效果:
其实关键代码很简单,先看服务端:
@app.get("/gpio/{pin}/on")
def on(pin):
GPIO.setup(int(pin), GPIO.OUT)
GPIO.output(int(pin), True)
return {
"pin":pin,
"state": 'on'
}
它的作用是通过获得请求的pin,用RPi.GPIO库去定义输出。
然后看手机端:
核心控件就是一个开关。
<Switch
trackColor={{ false: "#767577", true: "green" }}
thumbColor={isEnabled ? "#fff" : "#fff"}
ios_backgroundColor="#3e3e3e"
onValueChange={toggleSwitch}
value={isEnabled}
/>
事件不过是请求树莓派:
const toggleSwitch = () => {
setIsEnabled(previousState => !previousState);
if(isEnabled){
fetch('http://192.168.31.214:3000/gpio/17/off');
}else{
fetch('http://192.168.31.214:3000/gpio/17/on');
}
};
最后,全部代码位于:github.com/codetyphon/…