国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實現(xiàn)NB-IoT模塊遠(yuǎn)程控制

2020-02-15 21:56:29
字體:
供稿:網(wǎng)友

本來想嘗試下如果不使用運營商網(wǎng)絡(luò)應(yīng)用平臺情況下,只是在服務(wù)商服務(wù)器上是否可以實現(xiàn)對終端完全控制,如果這樣可行,那么物聯(lián)網(wǎng)應(yīng)用服務(wù)端更有靈活性。實際情況下,很難實現(xiàn)和運營商網(wǎng)絡(luò)對等的處理,用python代碼原型確實能夠?qū)崿F(xiàn)參數(shù)的變化(如PSM,eDXR等),但是終端分配的IP地址畢竟屬于接入網(wǎng)部分,更近似一個局域網(wǎng),如果采用其他方式訪問(如IMSI、IMEI等),還是需要與運營商核心網(wǎng)進(jìn)行配合。以下是嘗試遠(yuǎn)程控制的實現(xiàn)方法。

主要實現(xiàn)功能

1、使用python pyserial模塊通過串口發(fā)送AT命令給模組進(jìn)行參數(shù)修改,參考<使用python pyserial模塊串口通信>;
2、通過inter網(wǎng)進(jìn)行控制命令傳輸,選用UDP進(jìn)行主機(jī)控制,參考<python socket網(wǎng)絡(luò)接口編程>;
3、直接通過NB-IoT無線網(wǎng)絡(luò)進(jìn)行控制命令的傳輸;
4、python多窗口處理服務(wù)器端程序,實現(xiàn)接收和發(fā)送同時進(jìn)行;

遠(yuǎn)程控制主機(jī)腳本

服務(wù)器端程序:監(jiān)測UDP對應(yīng)的端口號,如果接收到register信息則返回allowed,然后進(jìn)入命令輸入狀態(tài),等待命令輸入完成,發(fā)送給終端,等待終端反饋,并接續(xù)下一個命令傳送。

#!/usr/bin/python3.6 import socket import sys import re  BUFFER_SIZE = 1024 TARGET_ADDR = '' TARGET_PORT = 60000 TARGET = (TARGET_ADDR,TARGET_PORT)  ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) ss.bind(TARGET) print("server online!! wait for register!")  data,addrRsv = ss.recvfrom(BUFFER_SIZE) if not data:   sys.exit(0) else:   print(data)  if(re.match(b'register',data)):   ss.sendto(b'allowed',addrRsv) else:   ss.sendto(b'reject',addrRsv) while True:  #等待命令輸入   aa = input('cmd > ')   if not aa:     break   else:     cmdV = aa+'/r'     ss.sendto(cmdV.encode('utf-8'),addrRsv)   #等待結(jié)果返回   data,addrRsv = ss.recvfrom(BUFFER_SIZE)   if not data:     break   else:     print(data)  ss.close() 

客戶主機(jī)程序:發(fā)送register并成功接收allowed后,等待控制命令,通過串口轉(zhuǎn)發(fā)給終端模塊,并接收終端模塊的反饋消息,返回給服務(wù)器側(cè)。

#!/usr/bin/python3.6 import serial import sys import os import re import socket  #初始化UART端口 ser = serial.Serial("COM5",9600,timeout=30) #選擇相應(yīng)的協(xié)議類型UDP ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) BUFFER_SIZE = 1024 TARGET_ADDR = 'IP address' TARGET_PORT = 60000 TARGET = (TARGET_ADDR,TARGET_PORT)  aa = '開機(jī)命令'.encode('utf-8') #convert to bytes type ser.write(aa) while True:   line = ser.readline()   if not line:     print("can not get cmd result, release!")     sys.exit(0)   print(line)   if ( re.match(b'OK',line) ):     break ss.sendto(bytes('register','utf-8'),TARGET) data,addrRsv = ss.recvfrom(BUFFER_SIZE) if re.match(b'allowed',data):   print('register successfully!')   pass else:   print('register failure')   sys.exit(0)  while True:   data,addrRsv = ss.recvfrom(BUFFER_SIZE)   if not data:     print("time out,release now!!")     break   elif re.match(b'end',data):     print("end of process!!")     break;   ser.write(data)      while True:     line = ser.readline()     if not line:       print("can not get cmd result, release!")       break     print(line)     if ( re.match(b'OK',line) ):       ss.sendto(bytes('OK','utf-8'),TARGET)       break     elif(re.match(b'ERROR',line)):       ss.sendto(bytes('ERROR','utf-8'),TARGET)       break     else:       pass  ser.close()             
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 荆门市| 当涂县| 临洮县| 潮安县| 临夏市| 内乡县| 广水市| 阿拉善左旗| 应城市| 阿拉尔市| 桂林市| 北辰区| 金门县| 铜梁县| 罗定市| 高淳县| 虹口区| 巴林左旗| 通许县| 马鞍山市| 河曲县| 达日县| 富蕴县| 泽州县| 青海省| 京山县| 丰顺县| 磐石市| 内黄县| 垦利县| 三原县| 辛集市| 察雅县| 张家口市| 禄丰县| 北海市| 松桃| 广河县| 临夏县| 江永县| 白银市|