足球的来源:python实现NB-IoT??樵冻炭刂?/h1>

足球竞彩网 www.2ts2.com.cn  更新时间:2018年06月20日 14:05:25   作者:小炉灶   我要评论

这篇文章主要为大家详细介绍了python实现NB-IoT??樵冻炭刂?,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本来想尝试下如果不使用运营商网络应用平台情况下,只是在服务商服务器上是否可以实现对终端完全控制,如果这样可行,那么物联网应用服务端更有灵活性。实际情况下,很难实现和运营商网络对等的处理,用python代码原型确实能够实现参数的变化(如PSM,eDXR等),但是终端分配的IP地址毕竟属于接入网部分,更近似一个局域网,如果采用其他方式访问(如IMSI、IMEI等),还是需要与运营商核心网进行配合。以下是尝试远程控制的实现方法。

主要实现功能

1、使用python pyserial??橥ü诜⑺虯T命令给模组进行参数修改,参考<使用python pyserial??榇谕ㄐ?gt;;
2、通过inter网进行控制命令传输,选用UDP进行主机控制,参考<python socket网络接口编程>;
3、直接通过NB-IoT无线网络进行控制命令的传输;
4、python多窗口处理服务器端程序,实现接收和发送同时进行;

远程控制主机脚本

服务器端程序:监测UDP对应的端口号,如果接收到register信息则返回allowed,然后进入命令输入状态,等待命令输入完成,发送给终端,等待终端反馈,并接续下一个命令传送。

#!/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) 
  #等待结果返回 
  data,addrRsv = ss.recvfrom(BUFFER_SIZE) 
  if not data: 
    break 
  else: 
    print(data) 
 
ss.close() 

客户主机程序:发送register并成功接收allowed后,等待控制命令,通过串口转发给终端???,并接收终端??榈姆蠢∠?,返回给服务器侧。

#!/usr/bin/python3.6 
import serial 
import sys 
import os 
import re 
import socket 
 
#初始化UART端口 
ser = serial.Serial("COM5",9600,timeout=30) 
#选择相应的协议类型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 = '开机命令'.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() 

多线程窗口

为了使得服务器端能够实现同时实现接收和发送,可以在服务器端开启两个窗口进行监听,示例如下:

启动代码

#!/usr/bin/python3.6 
import threading 
import time 
import subprocess 
import os 
import sys 
 
def thread_fun1(): 
 #global vlock 
 while(1): 
  print("thread fun1 is running!!!") 
  time.sleep(1) 
 
#... ... 
print(len(sys.argv)) 
#vlock = threading.Lock() 
t1 = threading.Thread(target=thread_fun1,args=()) 
t1.start() 
addr = 'IP address' 
port = 60000 
cmdStr = "python anotherThread.py %s %d"%(addr,port) 
#设置creationflags = subprocess.CREATE_NEW_CONSOLE,用来创建新的控制台窗口 
subprocess.Popen(cmdStr,creationflags = subprocess.CREATE_NEW_CONSOLE) 

anotherThread.py

#!/usr/bin/python3.6 
 
def thread_fun2(): 
 while(1): 
  aa = input('cmd > ') 
  print("thread fun2 is running!!!") 
  print(aa) 
  if(aa == 'end'): 
   break 
thread_fun2() 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python实现的简单排列组合算法示例

    Python实现的简单排列组合算法示例

    这篇文章主要介绍了Python实现的简单排列组合算法,涉及Python使用itertools库进行排列组合运算相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • 用TensorFlow实现多类支持向量机的示例代码

    用TensorFlow实现多类支持向量机的示例代码

    这篇文章主要介绍了用TensorFlow实现多类支持向量机的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • python字典DICT类型合并详解

    python字典DICT类型合并详解

    这篇文章主要为大家详细介绍了python字典DICT类型合并,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 100行python代码实现跳一跳辅助程序

    100行python代码实现跳一跳辅助程序

    这篇文章主要介绍了100行代码实现跳一跳辅助程序,接下来要分享的是用“纯软件”的方法来玩“跳一跳”。本人只做过Android开发,因此下面只给出Android平台下的实现方法。需要的朋友可以参考下
    2018-01-01
  • python2.7读取文件夹下所有文件名称及内容的方法

    python2.7读取文件夹下所有文件名称及内容的方法

    python,本身来说是一门高级编程语言,python它入门简单,有基础的学起来很快就能有简单的应用,但是在非常高的抽象计算中,高级的python程序设计也是非常难学的。接下来给大家介绍python2.7读取文件夹下所有文件名称及内容的方法,一起看看吧
    2018-02-02
  • Python基于opencv实现的简单画板功能示例

    Python基于opencv实现的简单画板功能示例

    这篇文章主要介绍了Python基于opencv实现的简单画板功能,结合实例形式分析了Python使用opencv??榻型夹位嬷频南喙夭僮骷记?需要的朋友可以参考下
    2019-03-03
  • python获取目录下所有文件的方法

    python获取目录下所有文件的方法

    这篇文章主要介绍了python获取目录下所有文件的方法,实例分析了Python中os??橄聎alk方法的使用技巧,需要的朋友可以参考下
    2015-06-06
  • python实现猜数字游戏(无重复数字)示例分享

    python实现猜数字游戏(无重复数字)示例分享

    这篇文章主要介绍了python实现猜数字游戏(无重复数字)示例,需要的朋友可以参考下
    2014-03-03
  • python命令行参数sys.argv使用示例

    python命令行参数sys.argv使用示例

    这篇文章主要介绍了python命令行参数sys.argv使用示例,大家参考使用吧
    2014-01-01
  • 利用python生成一个导出数据库的bat脚本文件的方法

    利用python生成一个导出数据库的bat脚本文件的方法

    下面小编就为大家带来一篇利用python生成一个导出数据库的bat脚本文件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12

最新评论

  • 浙江大学杭州国际城市学研究中心博士后研究基地2018年上半年招聘启事 2019-04-20
  • 引爆全联盟!勇士老板宣布球队计划 完全不给活路 2019-04-16
  • 特金会:无非就是“一大”和“一多”!—吴建勋的博客—强国博客—人民网 2019-04-13
  • 贵州瓮安:荒坡变花海 美景引客来 2019-04-12
  • 国家审计促发展 促改革 促安全 促绩效系列访谈 2019-04-12
  • 中国是亚洲和平的基石 2019-04-05
  • 足球运动也是需要不断创新的,不能老是跟着别人的套路走!同样需要较高的综合素质,不能从小就走上专业化的道路。不然就只能是四肢发达头脑简单,就会陷入机械足球的泥潭! 2019-04-05
  • 你这帖子怎么像四两为你代笔的?[微笑] 2019-04-02
  • 郑板桥的“六分半书” 2019-04-02
  • 重庆私藏的绝美古镇 悠闲不打挤 2019-04-01
  • 香江直通车之专访香港义工联盟常务副主席马浩文 2019-03-31
  • 云南大学:努力开创边疆民族地区建设一流大学之路 2019-03-26
  • 女性之声——全国妇联 2019-03-19
  • 全国省级新税务机构统一挂牌 2019-03-05
  • 一根充电线从天而降 楼下玛莎拉蒂被砸出两个凹陷 2019-03-01
  • 288| 115| 321| 547| 840| 56| 518| 934| 632| 371|