今天就和大家分享一个正在制作的物联网开关门监控设备。

因为考虑需要在户外使用这套物联网门控设备,所以利用树莓派完成这个设备有两个问题需要解决,

第一是需要解决树莓派和相关模块的供电问题。

第二就是需要户外没有宽带网络情况下的信号传输问题。

只要解决这两个问题那么剩下来的问题就是编程方面的了,针对以上两个问题,这里我们采用比较大众化的方式解决,设备的供电问题我们使用太阳能配合蓄电池进行实现7X24小时供电,信号的传输问题我们使用一块叫做SIM868的通讯模块来实现。下面来介绍一下设备制作的材料准备、制作过程以及程序的编写和调试。

准备材料及工具

1.树莓派(Raspberry Pi 3B+) 数量:1块

2.SIM868通讯模块(这里使用的是适配树莓派的微雪电子的SIM868通讯模块) 数量:1块

3.电磁感应磁条(常开常闭型) 数量:1组

4.SIM868模块外接天线 数量:1根(根据现场安设实际情况确定)

5.树莓派T型扩展板 数量:1块

6.实验面包板 数量:1块

7.杜邦线(公对公,公对母) 数量:若干

8.太阳能板 数量:1块

9.带保护板的锂电池 数量:2组(根据电池使用的性能情况可适当增加)

10.电压电流转换板 数量:1块

11.连接电线 数量:(根据现场安设实际情况确定)

12.两芯屏蔽线 数量:10米(0.3粗即可根据现场安设实际情况确定)

13.防爆箱 (防尘、防雾) 数量:1个(规格根据实际情况确定)

14.Micro USB充电线 数量:2根

15.SIM卡(移动和联通均可,模块暂不支持电信CDMA) 数量:1张

16.电烙铁及焊锡

设备供电及模块链接说明

供电原理:设备的供电依靠太阳能板配合锂电池进行供电,需要一块可以将太阳能板和锂电池的输出电压和电流转换成树莓派和SIM868通讯模块工作电压和电流的转换板,设备供电链接图如图。

实现效果,白天可以通过太阳能负责给树莓派及通讯模块供电并同时给锂电池充电。晚上将由充电完毕的锂电池负责给设备供电。

设备链接:树莓派的GPIO PIN# 2针脚(5V)和 PIN# 23针脚 链接电磁感应模块的引线。负责接收电磁感应模块的开关状态,树莓派的GPIO PIN# 4(5V),PIN# 6(Ground) ,PIN# 8(TX),PIN# 10(RX)分别链接SIM868通讯模块的5V,ground,串口TX和RX,负责实现模块的树莓派与SIM868通讯模块的串口通讯和供电链接,并将信号树莓派的接收到的电磁感应磁条开关信号,通过SIM868通讯模块出输出去(这里采用的是http传输协议,具体实现方法见程序编码部分)

程序代码

python程序源码:

import RPi.GPIO as GPIO

import time

import serial

def gpio_init():

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BOARD)

GPIO.setup(23,GPIO.OUT)

def send_data(param):

W_http_6='AT+HTTPPARA="URL","http://**************/iot.php?status='+param+'"\r\n'

ser.write(W_http_6)

time.sleep(2)

W_http_7='AT+HTTPACTION=0\r\n'

ser.write(W_http_7)

time.sleep(3)

if __name__ == '__main__':

ser = serial.Serial("/dev/ttyS0",115200)

W_http_1='AT+HTTPTERM\r\n'

ser.write(W_http_1)

time.sleep(3)

W_http_2='AT+SAPBR=3,1,"CONTYPE","GPRS"\r\n'

ser.write(W_http_2)

time.sleep(3)

W_http_3='AT+SAPBR=3,1,"APN","CMNET"\r\n'

ser.write(W_http_3)

time.sleep(3)

W_http_4='AT+SAPBR=1,1\r\n'

ser.write(W_http_4)

time.sleep(3)

W_http_5='AT+HTTPINIT\r\n'

ser.write(W_http_5)

time.sleep(3)

gpio_init()

status=1

while True:

if GPIO.input(23) == True:

if status==1:

send_data(2)

status=2

print("门的状态:关闭")

else:

pass

else:

if status==2:

send_data(1)

status=1

print("门的状态:打开")

else:

pass

time.sleep(3)

GPIO.cleanup()

php程序源码

require_once("../../func/dbaccess.php");

if (doConnect($cn) == false) {

return false;

}

$strSQL = "insert into iot_tbl (position,status,create_time) values ("'.第一号门.'",'". $_GET['status']."',now())";

doInsertUpdate($strSQL);

doClose($cn);

代码解析

这里使用的Python版本号为3.7

import RPi.GPIO as GPIO

import time

import serial

引用了python的3个类库GPIO,time以及串口调试库serial,为实现程序的调试可编写,在使用serial串口调试库前,要实现树莓派的串口配置和Linux系统下的串口调试工具minicom的安装。

ser=serial.Serial("/dev/ttyS0",115200)

W_http_1='AT+HTTPTERM\r\n'

ser.write(W_http_1)

time.sleep(3)

W_http_2='AT+SAPBR=3,1,"CONTYPE","GPRS"\r\n'

ser.write(W_http_2)

time.sleep(3)

W_http_3='AT+SAPBR=3,1,"APN","CMNET"\r\n'ser.write(W_http_3)

time.sleep(3)

W_http_4='AT+SAPBR=1,1\r\n'ser.write(W_http_4)

time.sleep(3)

W_http_5='AT+HTTPINIT\r\n'ser.write(W_http_5)

time.sleep(3)

以上代码实在通过调用serial库,设置树莓派串口通信的波特率为115200,并使用 ser.write()函数向串口写入可操作SIM868模块进行通讯的AT指令,这里的AT指令是对SIM868进行HTTP通讯前的配置,具体AT指令的含义在这里不再赘述,可自行百度查找。这是使用time.sleep()函数控制程序执行的等待时间,确保串口写入数据成功。

def gpio_init():

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BOARD)

GPIO.setup(23,GPIO.OUT)

gpio_init()函数是实现对接收电磁感应模块的GPIO PIN#23针脚的初始化配置。

status=1

while True:

if GPIO.input(23) == True:

if status==1:

send_data(2)

status=2

print("门的状态:关闭")

else:

pass

else:

if status==2:

send_data(1)

status=1

print("门的状态:打开")

else:

pass

time.sleep(3)

这里使用status变量初始化门的状态为1表示门已打开,并使用while True循环分割三秒钟(time.sleep(3))检测GPIO PIN#23 号针脚的电流状态,从而判断门的开关状态,并调用send_data()函数进行数据的发送。

def send_data(param):

W_http_6='AT+HTTPPARA="URL","http://**************/iot.php?status='+param+'"\r\n'

ser.write(W_http_6)

time.sleep(2)

W_http_7='AT+HTTPACTION=0\r\n'

ser.write(W_http_7)

time.sleep(3)

这里将门的状态status变量的值当做参数传送给你个send_data()函数,在添加到HTTP请求的URL中,在服务器端写了个PHP程序iot.php(程序源码j解析如下)用以接收SIM868通讯模块发送过来的HTTP请求,并使用GET的方式获得到HTTP请求URL中传入的status值,并插入到MySQL数据库中。

require_once("../../func/dbaccess.php");//封装链接操作MySQL数据库的函数

if (doConnect($cn) == false) { //链接数据库

return false;

}

$strSQL = "insert into iot_tbl (position,status,create_time) values ("'.第一号门.'",'".$_GET['status']."',now())"; //将数据插入MySQL数据库的SQL语句

doInsertUpdate($strSQL); //执行SQL

doClose($cn); //关闭数据库链接

程序拓展

以上程序完成的是对开关门信号的检测、发送和接收数据,属于整个设备接收和处理数据的核心部分,对接收到的数据,还要做进一步的展示,这里我采用了HTML+JQuery+AJAX的方式,并配合在HTML中播放音频文件和刷新开关门状态图表,来动态展示开关门的效果。实现原理是使用AJAX操作PHP程序循环实时读取MySQL数据库,查看当前门的开关状态,并循环局部刷新HTML页面播放音频和刷新html页面图标,对门的开关效果进行动态展示。每个人的需求不同,展示部分的代码就不做说明,也参照上诉方案自行编写。

python树莓派设备_Python+树莓派制作IoT(物联网)门控设备相关推荐

  1. python制作物联网控制软件下载_Python+树莓派制作IoT(物联网)门控设备

    今天就和大家分享一个正在制作的物联网开关门监控设备. 因为考虑需要在户外使用这套物联网门控设备,所以利用树莓派完成这个设备有两个问题需要解决, 第一是需要解决树莓派和相关模块的供电问题. 第二就是需要 ...

  2. python树莓派编程_python树莓派编程

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 例如,你可以用树莓派搭建你自己的家用云存储服务器.? 树莓派用python来进行 ...

  3. IoT物联网平台「设备影子」开发实战

    IoT物联网平台提供设备影子功能,在云端通过一个JSON文件持久化存储设备上报状态值和业务系统的期望值.每个设备有且只有一个设备影子,设备可以通过MQTT协议获取期望值desired和设置设备状态re ...

  4. python 检测车速_Python+树莓派监测汽车车速

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 这一切起源于我姐夫在Facebook(脸书)上的一个帖子: "Facebook,我需要你的帮助. ...

  5. Android设备接入阿里云IoT物联网平台——设备接入类

    1. 准备工作 1.1 注册阿里云账号 使用个人淘宝账号或手机号,开通阿里云账号,并通过__实名认证(可以用支付宝认证)__ 1.2 免费开通IoT物联网套件 产品官网 ​​https://www.a ...

  6. python 单机程序_Python tkinter制作单机五子棋游戏

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python家庭,作者Python家庭 实战项目:使用Python ...

  7. python 角度传感器模拟_python树莓派红外反射传感器

    本文实例为大家分享了python树莓派红外反射传感器的程序,供大家参考,具体内容如下 1.工具 rpi3,微雪ARPI600,Infrared Reflective Sensor 2.基本原理 Inf ...

  8. 树莓派python爬虫 股票_Python树莓派 爬虫心得

    平台: 树莓派 linux 语言:python 搞一个爬虫都清楚是怎么回事,我这里玩过之后有下面的心得: 为什么要用树莓派呢,省电啊,没乱七八糟的桌面问题,可以一直开着. 1.树莓派上的磁盘写入对于不 ...

  9. 树莓派python手势识别控制_python树莓派相机实现手势识别源码调用的百度API_新锐下载...

    # 使用python3运行 # 作者:xuehu96 # 编写时间 2019年8月11日 from picamera import PiCamera,Color import time import ...

最新文章

  1. pyqt5程序发生错误不中断_关于Windows页面错误的一些基础概念
  2. 使用 ASP.NET 配置类
  3. 消防信号总线原理_建筑电气消防设计6大常见问题分析
  4. [翻译]React组件模式
  5. canal修改同步binlog日志位点
  6. objective-c 语法快速过(4)
  7. 由一条编译报错信息,引出两个Go编译的重要知识
  8. springBoot 注入@Slf4j,框架中的方法无法调用。。。
  9. python地理数据处理库geopy
  10. CODE[VS]1160 蛇形矩阵
  11. 浅谈HTML5之一:语法的改变
  12. 认真测试直播软件,【转】如何测试直播软件
  13. 联想计算机usb驱动程序,联想笔记本USB3.0驱动
  14. TASKCTL连接不到服务端的几种情况和解决办法
  15. 安全电子签章密码技术规范_「签签课堂」(四)一篇读懂电子合同的专业术语...
  16. excel 第2讲:单元格格式设置
  17. wireless_ultimate技术所得
  18. Go语言核心之美 2.1-整数
  19. 【iOS】This operation can fail if the version of the OS on the device is incompatible
  20. 如何自学Axure(0基础入门教程)

热门文章

  1. 文巾解题 1190. 反转每对括号间的子串
  2. mapreduce编程实例(2)-求最大值和最小值
  3. python爬虫分析大学排名_Python爬虫获得国内高校排名,python,获取,大学排名
  4. 新手入门深度学习 | 3-1:数据管道Dataset
  5. 聚类算法中各种距离的计算与python的具体实现代码
  6. 详解下一代神经网络-无监督对比学习框架SimCLR
  7. 关于联邦学习What、How、Who的灵魂三问
  8. Spring Boot 2.0官方文档之 Actuator
  9. 4000+系统,10w+服务的立体式监控是如何炼成的?
  10. Reddit如何使用Memcached来存储3TB的缓存数据--转