使用react-native配合fastapi,实现手机app遥控树莓派点亮led

1,799 阅读1分钟

很长一段时间,笔者一直在使用树莓派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/…