nb_iot之air302联网

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相当,数据存储,参数保存,串口透传等。

 

你可能感兴趣的:(NB-IOT)