IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 快速实现ML302 4G TCP/UDP通信详解 -> 正文阅读

[网络协议]快速实现ML302 4G TCP/UDP通信详解

前言:虽然在如今的物联网开发中,像MQTT,COAP这些专门为了物联网而诞生的协议逐渐成为主流,但其实TCP/UDP做为最基本的通信方式,依然可以解决大部分的物联通信需求。所以我们在选择物联网协议时,也没必要一味的追求人云亦云,尤其是新手容易产生一种误区,别人都用MQTT那我也要用MQTT,其实您要做的是静下心来了解TCP/UDP和MQTT或者COAP这样的协议在通信方式,架构上的区别,然后和您的服务端开发人员在一起商议,结合物联网设备数量规模、设备是否长时间在线以及服务器容量和部署成本等特性来决定用什么协议。

一、本例程实现功能

Core通过ML302 4G Cat1模块和指定的服务器建立TCP连接,Core每10秒向服务器发送一个数据包(5字节),服务器每次收到这个5个字节的数据后会原封不动的回传这个5个字节数据给Core。

注意:ML302-GNML型号是支持2G网络的,如果您使用的4G天线满足DCS1800频段(17101785MHz),那么在没有4G网络的环境时,模块会自动接入2G网络,这样就极大扩展了其应用范围。如果您只想用2G网络不用4G网络,可以将4G天线换成满足GSM900(880915MHz)频段的天线。

二、 Core提供的TCP/UDP功能介绍

Core已将TCP的操作封装成三个简单的API函数,分别为:LIB_Cat1TcpUdpConfig(),LIB_Cat1TcpUdpRecv(),LIB_Cat1TcpUdpSend()。您只需要调用这三个API即可将ML302 4G模块远程连接上server端开始收发数据。并且Core会自动处理通信中的异常情况并尝试重新恢复通信(比如和server的tcp连接异常断开,网络异常等),您无需考虑这些复杂的情况即可实现4G模块长期稳定的在线通讯。

在LIB_Cat1TcpUdpConfig()函数调用时只需将参数改成"TCP"或"UDP"即可实现对应的TCP或UDP功能,至于LIB_Cat1TcpUdpRecv函数和LIB_Cat1TcpUdpSend函数的调用,TCP和UDP时无差别。

三、接线图

在这里插入图片描述

五、完整代码

Core通过ML302 4G模块和指定的服务器建立TCP连接,Core每10秒向服务器发送一个5字节数据包,服务器收到后返回同样的5字节数据。

--配置Core的USB口以虚拟串口模式工作,这样print()输出的内容就可以在电脑串口终端上显示了
LIB_UsbConfig("CDC")
--使能系统10毫秒定时器开始工作
LIB_10msTimerConfig("ENABLE")
--设置Cat1模块占用TX0、RX0、D5、D6引脚
--tcp服务器IP:"47.92.146.210" 端口号:8888
--心跳包间隔时间0(不使用心跳机制)。如果需要使用请在ApiDoc文档中查阅关于LIB_Cat1TcpUdpConfig函数的p8参数详细介绍
--TCP Client模式,如果要使用UDP,将"TCP"改成"UDP"即可
--不开启GPS功能,如果需要使用请在ApiDoc文档中查阅关于LIB_Cat1TcpUdpConfig函数的p10参数详细介绍
LIB_Cat1TcpUdpConfig("UART0","D5","HIGH","D6","HIGH","47.92.146.210",8888,0,"TCP","NO_GPS")
--变量初始化
send_tab = {1,2,3,4,5}
cnt_10ms = 0
cnt1_10ms = 0
--定义10ms中断回调函数
function LIB_10msTimerCallback()
    cnt_10ms = cnt_10ms + 1
    cnt1_10ms = cnt1_10ms + 1
end
--开始大循环
while(GC(1) == true)
do
    --查询是否收到server下发的数据,如果收到就print输出收到的数据
    recv_flag,recv_tab = LIB_Cat1TcpUdpRecv()
    if recv_flag == 1 then
        print(string.format("tcp client receive %d bytes", #recv_tab))
        for k,v in ipairs(recv_tab) do
            print(k,v)
        end
    end
    --6秒发送一包数据(1,2,3,4,5)给server
    if cnt_10ms >= 1000 then  --10000ms
        cnt_10ms = 0
        LIB_Cat1TcpUdpSend(send_tab)
    end
    --12秒打印一次Cat1模组状态信息(包含sim卡)
    --注意:这里只是为了演示,实际应用中您可以根据您的需求查询即可,不需要一直查询
    if cnt1_10ms >= 1200 then  --12000ms
        cnt1_10ms = 0
        State,IMSI,ICCID,CSQ = LIB_Cat1StatusQuery()
        print(string.format("module state: %s", State))
        print(string.format("module IMSI: %s", IMSI))
        print(string.format("module ICCID: %s", ICCID))
        print(string.format("module CSQ: %d ", CSQ))
    end 
end

代码运行结果

(1)实际接线图如下:
在这里插入图片描述
(2)Client端(Core)数据接收如下:

六、搭建测试服务端

上面的数据回传服务器,是在阿里云上专门搭建的一个现成的TPC/UDP测试服务端,只负责将设备发来的TCP/UDP数据原封不动的回传下去,开发者可以用它来进行测试,但不能保证该服务器一直稳定可用。
TCP测试可用:47.92.146.210",8888
UDP测试可用:47.92.146.210",9999

当然最好的还是开发者自己搭建一个这样的测试服务器,或者用利用PC上的网络调试助手工具结合花生壳进行内网穿透来搭建一个测试服务器,花生壳内网穿透已经在之前的《NBIOT TCP通信》中介绍过了,这里就不赘述了。

更多详情请参看 shineblink.com官网链接

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:12:53  更:2022-05-14 10:12:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 16:02:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码