本文使用树莓派3b+
思路
1.Http接口
使用flask将继电器的吸合动作写成WebApi的形式,访问Api即完成对应的吸合/断开动作。
2.运行日志
每次api被请求后向数据库保存被请求的记录。
数据库的简单操作详情见:Python SqlAlchemy+pymysql + MariaDB简单使用
GPIO定义
树莓派的40Pin引脚如下
本文中 使用BOARD编码的16和12脚位。
双路继电器
连线如下:
python代码
from flask import Flask
import RPi.GPIO as GPIO
from models import session, RelayLog
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
#初始化引脚,并指定BOARD编码方式
def gpio_init():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(12, GPIO.OUT)
@app.route('/ledon')
def led_on():
gpio_init()
GPIO.output(12, GPIO.HIGH)
# 记录开灯
session.add(RelayLog(device_name='led', device_cmd=1))
# 提交到数据库
session.commit()
return 'led_on'
@app.route('/ledoff')
def led_off():
gpio_init()
GPIO.output(12, GPIO.LOW)
# 记录关灯
session.add(RelayLog(device_name='led', device_cmd=0))
# 提交到数据库
session.commit()
return 'led_off'
@app.route('/fanon')
def fan_on():
gpio_init()
GPIO.output(16,GPIO.HIGH)
# 记录开风扇
session.add(RelayLog(device_name='fan', device_cmd=1))
# 提交到数据库
session.commit()
return 'fan_on'
@app.route('/fanoff')
def fan_off():
gpio_init()
GPIO.output(16,GPIO.LOW)
# 记录关风扇
session.add(RelayLog(device_name='fan', device_cmd=0))
# 提交到数据库
session.commit()
return 'fan_off'
if __name__ == '__main__':
app.run()