python做物联网控制_python实现NB-IoT模块远程控制
本来想尝试下如果不使用运营商网络应用平台情况下,只是在服务商服务器上是否可以实现对终端完全控制,如果这样可行,那么物联网应用服务端更有灵活性。实际情况下,很难实现和运营商网络对等的处理,用python代码原型确实能够实现参数的变化(如PSM,eDXR等),但是终端分配的IP地址毕竟属于接入网部分,更近似一个局域网,如果采用其他方式访问(如IMSI、IMEI等),还是需要与运营商核心网进行配合。以下是尝试远程控制的实现方法。
主要实现功能
1、使用python pyserial模块通过串口发送AT命令给模组进行参数修改,参考<使用python pyserial模块串口通信>;
2、通过inter网进行控制命令传输,选用UDP进行主机控制,参考;
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实现NB-IoT模块远程控制相关推荐
- python和手势控制_Python手势识别与控制
# Python手势识别与控制 ## 概述 本文中的手势识别与控制功能主要采用 [OpenCV](https://opencv.org/) 库实现, OpenCV是一个基于BSD许可(开源)发行的跨平 ...
- 用python做自我介绍_python入门教程NO.2 用python做个自我介绍
本文涉及的python基础语法为:数据类型等 数据类型 1. 字符串的拼接 我们在上一章中已经简单介绍了一下字符串的创建方式,这里我们简单学习一下字符串的运算和拼接. 字符串的运算 `字符串的加法` ...
- 用python做一个木马_Python编程简单的木马程序(转载于乌云中)
Python编程简单的木马程序 light·2015/01/26 10:07 0x00准备好了 本文的内容仅用于研究和研究,不得用于非法目的! 这一次,我们使用Python编写了一个简单的木马,它具有 ...
- python键盘上下左右控制_python方向键控制上下左右代码
本文所示代码实现python编程方向键控制图片上下左右,我们首先看下演示结果. 演示: 实例代码: bif="1.jpg" mif="2.jpg" import ...
- python实时语音识别控制_Python实时语音识别控制
Python实时语音识别控制 概述 本文中的语音识别功能采用 百度语音识别库 ,首先利用 PyAudio 库录制语音指令,保存为受支持的 wav 音频文件,然后利用 百度语音识别库 提供的方法实现语音 ...
- python做时序图_python如何做时间序列
python做时间序列的方法:首先导入需要的工具包,输入"data.plot()","plt().show()"命令绘制时序图:然后由acf,pacf判断模型参 ...
- 用python做一个木马_Python编写简易木马程序
light · 2015/01/26 10:07 0x00 准备 文章内容仅供学习研究.切勿用于非法用途! 这次我们使用Python编写一个具有键盘记录.截屏以及通信功能的简易木马.依然选用Subli ...
- python第七章_python 第七章 模块
模块 一个py文件就是一个模块 模块一共三种:1.python标准库 2.第三方模块 3.应用程序自定义模块 import:1.执行对应文件 2.引入变量名 if__name__="__ma ...
- python网络爬虫应用_Python网络爬虫(requests模块应用1)
一.什么是requests模块? requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求.功能强大,用法简洁高效.在爬虫领域中占据着半壁江山的地位. 二.为什 ...
最新文章
- C++中的const关键字(zz)
- JavaMelody开源系统性能监控
- python中几种交换2个变量的值的方法
- 机器学习实战笔记(Python实现)-02-k近邻算法(kNN)
- 无线鼠标接收器对码软件_接收器太小容易丢 这几招记好就不怕
- 关于批量插入数据之我见(100万级别的数据,mysql)
- keil5出现‘Target not created‘
- 【英语学习】【医学】Unit 03 Blood
- System.out.println 在idea控制台输出的中文乱码问题
- top刷新间隔_还在用top监控CPU?我们都在用glances
- laravel中数据显示(默认值和下拉option默认选中)
- 记仇表情包在线生成源码
- skywalking-安装部署
- 如何看计算机系统是x86,怎么看电脑是x86还是x64 x64和x86有区别讲解分享
- 未能加载 mysql.data,未能加载文件或程序集“MySql.Data”或它的某一个依赖项
- PowerMill2019基础到三四五轴编程视频教程全
- 20 行 Python 代码批量抓取免费高清图片!
- 使用BERT的两层encoder实现tweet sentiment extraction
- 那些改变过世界的代码都是怎么写的?
- 微信小程序自定义输入框个数