1.上电检查流程
(1)AT //判断模组是否上电开机成功
(2)AT+CFUN=1 //关闭飞行模式
(3)AT+CEREG? //判断 PS 域附着状态,第二个参数为 1 或 5 表示附着正常
2. TCP Server 连接流程
(1)AT+SKTCREATE=1,1,6 //建立 socket
(2)AT+SKTCONNECT=1,116.16.1.120,12302 //与 TCP Server 连接
(3)AT+SKTSEND=1,5,3233343536 //文件描述符为 1 的 socket 发送数据 23456
(4)+SKTRECV: 1,5,3334353637 //文件描述符为 1 的 socket 收到数据 34567
3. UDP Server 连接流程
(1)AT+SKTCREATE=1,2,17 //建立 socket
(2)AT+SKTCONNECT=1,116.16.1.120,12302 //设定发送数据的地址
(3)AT+SKTSEND=1,5,3233343536 //发送数据 23456
(4)+SKTRECV: 1,5,3334353637 //收到数据 34567
4.Socket 状态查询和对象注销
(1)AT+SKTSTATUS=1 //查询 socket 文件描述符为 1 的 socket 的连接状态
(2)AT+SKTDELETE=1 //注销 socket 文件描述符为 1 的 socket
目前测试地点合肥双凤,使用的是普通物联卡,非nb卡,厂家解释:基站未配置好,漏网之鱼,言外之意就是nb模块必须使用nb卡。
测试发现,不使用心跳包,长时间不发送数据,不会被踢掉。
tcp连接测试是可以用的,不过延时还是挺大的,类似lora的cad模式,基站按照时间片去扫设备,简单理解这个周期就是最大延时,复用带宽吧,带负载(终端)能力强。能够合理利用这些空中无线带宽,就得靠运营商的强大算法,合理利用这些带宽,提高无线带宽的利用率。才能使nb领域发展的更好,这需要大量的测试验证,建模,反馈,修正。需要时间,才会美好。
luat tcp代码
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "air302_tcp_demo"
VERSION = "1.0.0"
-- sys库是标配
local sys = require "sys"
local sendFlag
--------------------------------------------------------------
sys.subscribe("uart_write1", function(data)
uart.write(1, data)
end)
sys.subscribe("uart_write2", function(data)
uart.write(2, data)
end)
uart.on(1, "receive", function(id, len)
local data = uart.read(id, 1024)
log.info("uart", "receive", data)
sys.publish("uart_write2", data) -- 或者调用uart.write(1, data)也可以的
end)
uart.on(1, "receive", function(id, len)
local data = uart.read(id, 1024)
log.info("uart", "receive", data)
sys.publish("uart_write2", data) -- 或者调用uart.write(2, data)也可以的
end)
uart.setup(1, 115200)
uart.setup(2, 115200)
--------------------------------------------------------------
gpio.setup(1, function()
-- 按一下boot按键试试
--log.info("gpio", "BOOT button release")
uart.write(1, "boot button release")
uart.write(2, "boot button release")
sendFlag=1
--netc:send("boot button release")
end)
sys.taskInit(function()
while 1 do
if socket.isReady() then
sys.wait(2000)
netc = socket.tcp()
netc:host("106.14.204.234")
netc:port(1308)
netc:on("connect", function(id, re)
log.info("tcp", "connect ok", id, re)
if re then
netc:send("IMEI:" .. nbiot.imei())
end
end)
netc:on("recv", function(id, re)
log.info("netc", id, #re, re)
if re then
-- 如果有数据就回显, 简单环路测试
netc:send(re)
end
end)
-- 启动tcp独立线程(系统级的)
if netc:start() == 0 then
-- 启动成功后, 连接中断时必然有NETC_END_XX事件
-- 因为是长连接, 就这样等着就差不多了
while netc:closed() == 0 do
sys.waitUntil("NETC_END_" .. netc:id(), 1000)
-- 定时发个心跳什么的
--log.info("netc", "heartbeat ping")
--netc:send("ping")
if sendFlag==1 then
sendFlag=0
log.info("tcp", "BOOT button")
netc:send("boot button release")
end
end
else
log.info("netc", "netc start fail!!")
end
-- 一定要清理好, 不然内存泄漏, 模块内存少啊!!!
netc:clean()
sys.wait(2000) -- 没连上, 或者断开了? 等2秒重试
else
sys.wait(10000)
end
end
end)
-- 结尾总是这一句哦
sys.run()
luat代码会继续完善,完善至4g cat1相当,数据存储,参数保存,串口透传等。