跳转至

UDP

一、UDP 概述

UDP(用户数据报协议,User Datagram Protocol)是一种无链接的、不可靠的传输层协议,主要用于实现网络中的快速通讯。以下是 UDP 通讯的主要特点:

1.1 无链接通讯:

UDP 在发送数据之前不需要建立链接,这大大减少了通讯的延迟。发送方只需将数据包封装成 UDP 报文,并附上目的地址和端口号,即可直接发送。

1.2 不可靠传输:

UDP 不保证数据包的顺序性、完整性和可靠性。数据包在传输过程中可能会丢失、重复或乱序到达。因此,UDP 通讯需要应用层自行处理这些问题,如实现错误检测、数据重传等机制。

1.3 面向报文:

UDP 以报文为单位进行数据传输,每个报文都是独立的。这种面向报文的特性使得 UDP 能够保持数据的完整性,并且便于进行错误检测和处理。

1.4 高效性:

UDP 的头部结构非常简单,只包含必要的字段,如源端口、目的端口、数据长度和校验和。这种简洁的头部设计使得 UDP 在处理数据包时更加高效,减少了网络延迟。

1.5 实时性:

UDP 通讯具有较快的传输速度,适用于对实时性要求较高的应用场景,如视频通话、在线游戏等。在这些场景中,即使数据包偶尔丢失或延迟,也不会对整体功能产生严重影响。

二、演示功能概述

本文教你怎么使用 AT 命令,通过几个简单的步骤,就可以让合宙 4G 模组与 UDP 服务器通讯。

1. 使用 UDP 服务器 2. 4G 模组插卡开机后,使用 AT 指令完成 UDP 链接建立,数据发送,数据接收以及链接关闭操作

三、准备硬件环境

工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下硬件环境。

本文章使用 Air700EMQ 核心板做演示;

参考:硬件环境清单,准备以及组装好硬件环境。

四、准备软件环境

工欲善其事,必先利其器。在正式介绍本功能示例之前,需要先准备好以下软件环境。

1. Luatools工具

2. LLCOM 串口通信工具

3. 合宙TCP/UDP web测试工具

4. 本教程使用的AT固件版本号是:AirM2M_700EMQ_V2019_LTE_AT,如果版本号不正确,参考:固件版本确认和烧录检查确认。

五、使用方法举例

5.1 确认开发板正常开机并联网正常

本次教程所用固件版本是V2019,通过 Luatools烧录过固件后可以通过打印来判断设备情况,具体参考下图:

5.2 UDP 相关指令

点击链接查看合宙 4G 模组 UDP 相关命令

5.3 打开测试服务器

在本文中用合宙 TCP/UDP web 测试服务器来演示整个过程。

点击右侧链接进入工具:https://netlab.luatos.com,浏览器中出现如下界面:

点击右上角“打开 UDP”,在 WEB 页面左上角会显示当前可用于链接的 UDP 服务器 IP 地址和端口号

如下图标记处:待测试的 IP 地址为:112.125.89.8: 端口号为:44482

注意:读者进行测试时 IP 和端口会随机分配,测试中我们替换成对应的 IP 和端口号即可。

六、UDP 通信实例

事实上,数据发送方式有快发和慢发两种,由 AT+CIPQSEND=n命令来设置。

1. n=0:快发模式0(缺省值),当服务器收到数据,模块返回:"SEND OK"(单链接)或 "n,SEND OK"(多链接);

2. n=1:快发模式1,当数据发送到模块,终端返回:"DATAACCEPT:length"(单链接) "DATAACCEPT:n,length" (多链接);

3. n=2:慢发模式当服务器收到数据,模块返回:"SEND OK"(单链接)或 "n,SEND OK"(多链接);

4. 慢发模式每发送一笔数据需要服务器那边的确认,而快发则发送到模块就可以了,不需要服务器的确认。推荐使用 0 或 1;

5. 这两种快发模式实现机制没有区别,区别只在于发送完数据,模式 0 提示 "SEDN OK",模式 1 提示 "DATA ACCEPT",使用快发模式时建议使用 CIPACK 命令查询每笔数据对端是否已经收到;

6. 6.1节使用分别介绍快发、慢发两种模式,其他小节只介绍快发模式介绍。

6.1 UDP 非透传应用:模块做为客户端,单链接,数据发送和数据接收

下面演示及普通链接流程,并进行 UDP 通讯操作。

查看流程时需要注意指令后面注释的内容,有助于理解指令具体作用

AT+CIPMUX=0         //设置为单链接模式

OK

AT+CIPQSEND=1            //注意:数据发送选择“快发模式1”时,选用指令AT+CIPQSEND=1 设置为快发模式。数据发送选择“慢发模式2”时,选用指令AT+CIPQSEND=2 设置为慢发模式。

OK

AT+CSTT               //启动任务,设置APN模块注册网络后会从网络自动获取<apn>并激活一个PDP上下文(此<apn>可以通过AT+CGDCONT?来查询),所以直接输入AT+CSTT即可,模块内部会按照自动获取的<apn>来设置CSTT的APN

OK  

AT+CIICR             //激活移动场景,获取IP地址

OK  

AT+CIFSR            //查询分配的IP地址

10.83.172.111        //   此处IP随机   

AT+CIPSTART="UDP","112.125.89.8",45214 //建立UDP链接,其中:"UDP"为链接的协议类型,“112.125.89.8"为对端服务器的IP地址45214 为对端服务器的UDP端口号

OK

CONNECT OK        //如果链接成功,会有如此URC上报

快发模式

AT+CIPSEND        //发送数据
>                 //等待发送的内容
234567890<CTRL-Z>//当出现">"后,输入待发送的数据:0123456789。<CTRL-Z>用来发送数据,发送16进制数0x1A即等同于发送<CTRL-Z>。

DATA ACCEPT:10    //成功将数据发送到模块

慢发模式

AT+CIPSEND        //发送数据
>                 //等待发送的内容
234567890<CTRL-Z>//当出现">"后,输入待发送的数据:0123456789。<CTRL-Z>用来发送数据,发送16进制数0x1A即等同于发送<CTRL-Z>。

SEND OK                     //当服务器收到数据, 模块返回 SEND OK ,否则阻塞

执行到此处,服务器成功接收到字符串“1234567890”

如下图,在 WEB 工具输入框输入字符“123456789”,点击发送按钮,模组成功接收字符“123456789”

AT+CIPCLOSE        //关闭UDP链接

CLOSE OK            //关闭成功

AT+CIPSTATUS        //查询下链接状态

OK
STATE: TCP CLOSED

AT+CIPSHUT        //关闭移动场景

SHUT OK

AT+CIFSR        //查询当前的模块IP

+CME ERROR: 3   //IP地址已经没有了

指令以上执行如下图所示:

6.2 UDP 透传应用:模块做为客户端,单链接,数据发送和数据接收

数据透传(Transparent Transmission)是指将原始数据从一个设备直接传输到另一个设备,不对数据(除“+++”退出透传模式指令外)进行任何处理或解析,这种方式类似于数据的"直通车",确保数据的完整性和一致性,透传模式能够实现更高的传输效率和更低的延迟。

AT+CIPMODE=1                //设置为透明传输模式

OK

AT+CIPSEND=1                //设置为快发模式

OK

AT+CSTT                       //激活移动场景,获取IP地址

OK

AT+CIFSR                        //查询分配的IP地址

10.83.172.111                    //此处IP随机

AT+CIPSTART="UDP","112.125.89.8",45214    //建立UDP链接,其中:"UDP"为链接的协议类型,“112.125.89.8"为对端服务器的IP地址45214 为对端服务器的UDP端口号

OK

CONNECT                          //如果链接成功,会有如此URC上报
                                    //透传开始,在这里输入数据并传送,此时也可以接收服务器传来的数据,发送的字符内容都原样的会直接发送到服务器(“+++”字符除外)

此时发送字符“123456789”和“abcdefg”都直接发送到的服务器,如下图

哪怕是 AT 指令也会原样发送到服务器如:“AT+CSTT”

服务器下发的内容也会原样的发送到模组,如下图:

如果需要关闭链接,需要退出透传模式,使用“+++”字符串可以让模组退出透传模式,注意"+++"后不能够带有回车和其他字符。

+++                //推出透传模式,注意末尾不加回车
OK

指令执行实例如下图:

退出透传模式后我们可以正常发送 AT 指令,关闭链接,指令序列如下:

AT+CIPCLOSE        //关闭UDP链接

CLOSE OK            //关闭成功

AT+CIPSHUT            //关闭移动场景

SHUT OK               //关闭成功

指令执行实例截图如下:

当传输中有协议栈错误发生时,会转入 AT 命令状态并上报该错误码,指令如下:

UDP ERROR:xx            //当传输中有协议栈错误发生时,会转入AT命令状态并上报该错误码

AT+CIPSHUT                //发生这种情况时,+CIPSHUT关闭链接。如果没有错误发生,则+++返回AT命令状态,再+CIPSHUT关闭链接

SHUT OK

6.3 APN 设置与专网卡

用户根据自己使用的网络类型来区分,sim 卡可以分为公网卡和专网卡两种;对于如何判断自己手里的 sim 卡是公网卡还是专网卡可以通过下面两种办法区分:

  • 咨询 sim 卡供应商;
  • 如果有 apn 账号、或者有密码、或者有加密类型,则可以认为是专网卡。

对于公网卡和专网卡设置和查询有不同的指令,合宙 Air700EMQ 4G 模组设置和查询 APN 相关指令可以参考下图:

设置apn指令流程:
AT+CPIN?                                        //检查卡是否正常
AT+CPNETAPN=2,jscmiot,u9682,iot98765,2         //举例,根据实际填写,不能照抄
AT+CGATT?                                      //查询是否附着上数据网络,如果返回+CGATT: 0表示未附着上,1表示正常

APN 及专网卡常见问题

1. 模块如何设置 APN

1、如果是公网SIM卡,不需要用户主动设置APN,软件自动去网络端查询APN进行设置。

2、如果是专网SIM卡,首先咨询SIM卡提供商APN参数,然后通过AT+CPNETAPN=mode,“apnname”,“user”,“pwd”,authmoded进行专网卡的参数设置。

2. 专网卡链接服务器失败

1、有的专网卡没设置APN的情况下也能激活PDP,但是不能连专网卡指定的服务器,或者开机后模块没自动激活PDP,这个时候参考1,检查APN参数是否设置正确。

2、如果有其他厂家的模块,对比测试下是否链接正常。

3、如果无法百分百保证服务器配置没问题,最好在服务器端用wireshark抓包,或者在服务器上安装一个第三方工具,开启一个服务器端口来对比测试。

4、用定向Ip的物联网卡,需要把域名或IP加入白名单才能使用。

3. 专网卡访问白名单

用定向 IP 的物联网卡,需要把域名或 IP 加入白名单才能使用,下面列出模块会访问的域名或 IP 服务器。

七、总结

文章介绍了如何使用Air700EMQ模组通过AT指令进行UDP通信,透传和非透传两种应用。

八、参考资料

8.1 合宙 Air700EMQ 模组资料中心

https://docs.openluat.com/air700emq/

九、使用到的工具

https://docs.openluat.com/air_tools/

十、常见问题 Q&A

10.1 问:开发板发送 AT 指令无任何响应?

a.确保模组已经开机。

b.串口助手是否选择了正确 AT 指令端口。

c.检查串口助手参数是否设置正确,如波特率,停止位,奇偶校验,停止位,新行发送等。

d.确保模组固件为标准 AT 固件。

10.2 问:模组 AT 指令测试正常,但无法建立 UDP 链接?

a.检查模组建立 UDP 连接前是否已经获取到 IP 地址,通过指令 AT+CIFSR 查看。

b.检查 UDP 参数是否正确,如指令 AT+CIPSTART="UDP",XXX,YYY, “XXX”表示 UDP 链接 IP 地址"YYY"为端口号,同时需要确保发送建立 UDP 链接前服务器对应的端口处于打开状态。

10.3 问:重试多次 PDP 激活失败,UDP 应用一直链接失败,怎么解决?

a.使用 RESET 引脚复位模块。

b.极端情况下,直接给模块断电,再上电,POWER KEY 引脚拉低开机。