`概述 利用Edison实现智能浇花系统,并提供网页查看当前环境参数、历史操作步骤的功能。
涉及技术: - 开发语言: python
- 网络框架:flask+bootstrap
- 传输协议:MQTT
- MQTT服务器:mosquitto
- 数据库:sqlite
系统框图
功能简述- Edison采集温度传感器,光线传感器,使用Topic:sensor 发送到MQTT服务器,格式为:{"loc":%d, "temp":%d, "light":%d};
- 网页服务器订阅sensor这个Topic,获取温度与光强,这里我们使用光强来模拟湿度。当检测到光强连续10次小于3时,认为盆景需要浇水了,此时网页服务器使用Topic:water发送到MQTT服务器,格式为:{"water":1}并将操作记录到数据库。
- Edison订阅Topic:water,当收到该Topic时启动线程闭合继电器,接通水泵,10s后断开继电器,结束浇水。
网页服务器框架网页使用Flask与bootstrap,flask是一个轻量级python Web应用框架。bootstrap一个很流行的前端开发框架。 登陆界面
环境信息界面
操作记录界面
实时视频界面
缺个摄像头~~~~
代码解析Edison代码Edison上使用phao.mqtt处理MQTT客户端,开始时设置两个回掉函数on_connect和on_message.(下方serverip,port填写MQTT服务器的IP与端口号) - if __name__ == '__main__':
- client = mqtt.Client()
- client.on_connect = on_connect
- client.on_message = on_message
- print make_sensor_string()
- try:
- print "enter
" - client.username_pw_set("username","password")
- client.connect("serverip", port, 60)
- client.loop_forever()
- except KeyboardInterrupt:
- client.disconnect()
on_connect回掉函数
连上MQTT服务器的回掉函数,连接上后订阅Topic:water,同时启动线程每隔一秒使用Topic:sensor发送温度与光强。 - def on_connect(client, userdata, flags, rc):
- print("Connected with result code " + str(rc))
- client.subscribe("water")
- t = threading.Thread(target=perform_time, args=())
- t.start()
代码分享
其他代码可以查看附件。这里不再详谈。需要有Flask基础。
其他水泵
水泵可以使用类似下面这款,可以用继电器控制开关。
参考书
`
|