环境:raspbian-stretch(2018-06-27) 树莓派:3代B型 1、树莓派设备,需要在野外也能拥有独立联网能力,那必不可少的需要使用物联网模块。 这里使用的是微雪的SIM868通讯模块,如下图: 2、将SIM868如下插入在空展板中,SIM868中使用的是联通4Gsim卡,其实SIM868采用PIN#8(TX)、PIN#10(RX)引脚与树莓派进行串口通讯,供电则是通过PIN#4(5V)、PIN#6(GOUND)支持。SIM868模块采用http传输协议与服务器连接。 3、服务器配置 安装Apache服务,使用xampp软件安装该服务,xampp链接:https://pan.baidu.com/s/15dt5s3DbZVd8YPckv2GkzA 密码:78fg 运行XAMPP Control Panel, 启动Apache服务,如果启动失败,应该是端口被占用,更改Apache的服务端口,就OK! 4、程序代码 1)、python代码 import time import serial def send_data(param): W_http_6='AT+HTTPPARA="URL","http://./iot.php?status='+str(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(1)if __name__ == '__main__': ser = serial.Serial("/dev/ttyS0",115200) print ser W_http_1='AT+HTTPTERM\r\n'ser.write(W_http_1) print "http_1"time.sleep(2) W_http_2='AT+SAPBR=3,1,"CONTYPE","GPRS"\r\n'ser.write(W_http_2) print "http_2"time.sleep(2) W_http_3='AT+SAPBR=3,1,"APN","CMNET"\r\n'ser.write(W_http_3) print "http_3"time.sleep(2) W_http_4='AT+SAPBR=1,1\r\n'ser.write(W_http_4) print "http_4"time.sleep(2) W_http_5='AT+HTTPINIT\r\n'ser.write(W_http_5) print "http_5"time.sleep(2) status=1while True: send_data(status) print status status = status+1time.sleep(3) 2)、php程序代码: <?php header("Content-type: text/html; charset=utf-8"); $file = 'log.txt';//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个$status = $_GET['status']; echo $status ; if($status != "") { $content = "status=".$status.",time=".date("Y/m/d H:i:sa")."\n"; if($f = file_put_contents($file, $content,FILE_APPEND)){// 这个函数支持版本(PHP 5) echo "写入成功。<br />"; } }if($data = file_get_contents($file)){; // 这个函数支持版本(PHP 4 >= 4.3.0, PHP 5) echo "写入文件的内容是:$data"; } ?> 5、代码解析 这里使用的Python版本号为2.7.13 import time import serial 以上代码是在通过调用serial库,设置树莓派串口通信的波特率为115200,并使用 ser.write()函数向串口写入可操作SIM868模块进行通讯的AT指令,这里的AT指令是对SIM868进行HTTP通讯前的配置,具体AT指令的含义在这里不再赘述,可自行百度查找。这是使用time.sleep()函数控制程序执行的等待时间,确保串口写入数据成功。 <?php header("Content-type: text/html; charset=utf-8"); $file = 'log.txt';//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个 $status = $_GET['status'];//从url中获取status参数的值 echo $status ; //输出status参数的值 if($status != "")//如果status参数有值,则将该值插入到日志中 { $content = "status=".$status.",time=".date("Y/m/d H:i:sa")." \n";//定义插入到日志的数据格式 if($f = file_put_contents($file, $content,FILE_APPEND)){// 这个函数支持版本(PHP 5) echo "写入成功。<br />"; } } //读出日志中的所有数据,并输出到html中 if($data = file_get_contents($file)){; // 这个函数支持版本(PHP 4 >= 4.3.0, PHP 5) echo "写入文件的内容是:$data"; } ?> 6、测试结果 树莓派terminal端运行 python sim868.py 浏览器查看日志情况,可以看到树莓派通过SIM868模块确实将数据发送给了服务器!!! 参考资料:http://www./communication/397109 |
|