2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Micropython加速物联网开发8 - 2G网络TCP通信

Micropython加速物联网开发8 - 2G网络TCP通信

时间:2023-05-08 08:00:21

相关推荐

Micropython加速物联网开发8 - 2G网络TCP通信

M6220是一款基于eSIM技术的2G模组,支持GSM/GPRS,其2G工作频段有GSM850、GSM900、DCS1800和PCS1900。接下来就体验一下M6220与后台服务器的TCP通信。

首先在REPL中一步步敲命令熟悉一下整个流程,M6220模组和TPYBoard的UART4相连。

设置串口:

>>> from pyb import UART>>> u4=UART(4,115200)>>> u4.init(115200, bits=8, parity=None, stop=1)

串口发送指令AT+CGATT=1,配置M6220模组附着GPRS网络,设置成功返回OK

>>> u4.write('AT+CGATT=1\r\n')12>>> u4.read()b'AT+CGATT=1\r\n\r\n+CGATT:1\r\n\r\nOK\r\n'

指令AT+CGDCONT=1,"IP","cmnet"设置PDP上下文。1为id,IP为网络类型,cmnet代表移动网络

>>> u4.write('AT+CGDCONT=1,"IP","cmnet"\r\n')27>>> u4.read()b'AT+CGDCONT=1,"IP","cmnet"\r\n\r\nOK\r\n'

指令AT+CIPSTATUS查询模组TCP/IP状态,INITIAL状态表示可启动网络连接

>>> u4.write('AT+CIPSTATUS\r\n')14>>> u4.read()b'AT+CIPSTATUS\r\n\r\n+IPSTATUS: IP INITIAL\r\n\r\nOK\r\n'

通过指令AT+CIPSTART="protocol","ip address",port向服务器发起连接请求。protocol为协议类型,有TCP和UDP两种;ip address为服务器IP地址;port为服务器程序监听的端口号。服务器返回CONNECT OK表示连接成功。

>>> u4.write('AT+CIPSTART="TCP","x.x.x.x",1104\r\n')42>>> u4.read()b'AT+CIPSTART="TCP","x.x.x.x",1104\r\n\r\nCONNECT OK\r\n\r\nOK\r\n\r\n+CGREG: 1\r\n'

服务器使用TCP/UDP Socket调试工具:

数据收发:服务器给客户端发送数据'nihao',在REPL中通过u4.read()读取。客户端给服务器发送数据的AT指令如下:AT+CIPSEND

>data<ctrl-Z>

>>> u4.read()b'\r\n+RECEIVE,7:nihao\r\n\r\n\r\nOK\r\n\r\n+CGREG: 1\r\n'>>> u4.write('AT+CIPSEND\r\n')12>>> u4.read()b'AT+CIPSEND\r\n\r\n> '>>> u4.write('hello server, this is client')28>>> u4.writechar(0x1a)

服务器端记录:

指令 AT+CIPCLOSE断开连接,此时查询状态将返回IP CLOSE:

>>> u4.write('AT+CIPCLOSE\r\n')13>>> u4.write('AT+CIPSTATUS\r\n')14>>> u4.read()b'AT+CIPSTATUS\r\n\r\n+IPSTATUS: IP CLOSE\r\n\r\nOK\r\n'

通过以上步骤,在REPL中输入指令一步步实现了串口配置、模组配置、建立连接、收发数据、断开连接,接下来编写服务器和客户端的程序来实现一个简单的网络通信功能。

程序功能为:TPYBoard启动之后自动配置UART4,和服务器建立连接,然后发送'USR'指令到服务器,服务器返回'LedOn'指令给TPYBoard,开发板判断指令后点亮4号LED灯。

服务器程序:

#!/usr/bin/python#server.pyif __name__ == '__main__':import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('x.x.x.x', 1104))sock.listen(5)while True:connection,address = sock.accept()try:print "Connect from:", addressconnection.settimeout(5)buf = connection.recv(1024)if buf == 'USR':connection.send('LedOn')else:connection.send('Error')except socket.timeout:print 'time out'connection.close()

客户端程序:

#main.pyimport pybif __name__=='__main__':u4 = pyb.UART(4, 115200)u4.init(115200, bits=8, parity=None, stop=1)u4.write('AT+CGATT=1\r\n') u4.write('AT+CGDCONT=1,"IP","cmnet"\r\n')u4.write('AT+CIPSTART="TCP","x.x.x.x",1104\r\n') pyb.delay(2000)u4.read()u4.write('AT+CIPSEND\r\n')u4.write('USR')u4.writechar(0x1a)pyb.delay(2000)if 'LedOn' in u4.read():print('receive command[LedOn] from server')pyb.LED(4).on()else:print('Error')

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。