?今天我們來學(xué)習(xí)合宙低功耗4G模組Air780E快速入門之跟服務(wù)器之間的加密通信,伙伴們,一起學(xué)起來!
一、編寫腳本
1.1 準(zhǔn)備資料
Air780E開發(fā)板購買
Air780E開發(fā)板設(shè)計(jì)資料
LuatOS-Air780E/網(wǎng)絡(luò)加密通信程序源碼demo
合宙的 TCP/UDP 測(cè)試服務(wù)器
API介紹說明
1.2 程序詳解
1.2.1 首先配置聯(lián)網(wǎng)配置
-- 測(cè)試網(wǎng)站 https://netlab.luatos.com/ 點(diǎn)擊 打開TCP 獲取測(cè)試端口號(hào)
-- 要按實(shí)際情況修改
local host = "112.125.89.8" -- 服務(wù)器ip或者域名, 都可以的
local port = 45186 -- 服務(wù)器端口號(hào)
local is_udp = false -- 如果是UDP, 要改成true, false就是TCP
local is_tls = true -- 加密與否, 要看服務(wù)器的實(shí)際情況
--=============================================================
1.2.2 聯(lián)網(wǎng)后,創(chuàng)建聯(lián)網(wǎng)成功后,對(duì)收發(fā)數(shù)據(jù)事件的處理函數(shù)
-- 等待聯(lián)網(wǎng)
sys.waitUntil("IP_READY")
-- 時(shí)間同步
socket.sntp()
-- 開始正在的邏輯, 發(fā)起socket鏈接,等待數(shù)據(jù)/上報(bào)心跳
local taskName = "sc"
local topic = taskName .. "_txrx"
log.info("topic", topic)
local txqueue = {}
--[[創(chuàng)建一個(gè)任務(wù)線程
@param1 function 任務(wù)函數(shù)名,用于resume喚醒時(shí)調(diào)用
@param2 string 任務(wù)名稱,用于喚醒任務(wù)id
@param3 function 接收到非目標(biāo)消息時(shí)的回調(diào)函數(shù)
@param4 any 任務(wù)函數(shù)fun的可變參數(shù)
@return number 返回該任務(wù)的線程號(hào)
]]
sysplus.taskInitEx(sockettask, taskName, netCB, taskName, txqueue, topic)
while 1 do
local result, tp, data = sys.waitUntil(topic, 30000)
log.info("event", result, tp, data)
if not result then
-- 等很久了,沒數(shù)據(jù)上傳/下發(fā), 發(fā)個(gè)日期心跳包吧
table.insert(txqueue, os.date())
sys_send(taskName, socket.EVENT, 0)
elseif tp == "uplink" then
-- 上行數(shù)據(jù), 主動(dòng)上報(bào)的數(shù)據(jù),那就發(fā)送呀
table.insert(txqueue, data)
sys_send(taskName, socket.EVENT, 0)
elseif tp == "downlink" then
-- 下行數(shù)據(jù),接收的數(shù)據(jù), 從ipv6task來的
-- 其他代碼可以通過 sys.publish()
log.info("socket", "收到下發(fā)的數(shù)據(jù)了", #data,"data:",data)
end
end
end
1.2.3 聯(lián)網(wǎng)函數(shù)
function sockettask(d1Name, txqueue, rxtopic)
-- 打印準(zhǔn)備連接的服務(wù)器信息
log.info("socket", host, port, is_udp and "UDP" or "TCP", is_tls and "TLS" or "RAW")
-- 準(zhǔn)備好所需要的接收緩沖區(qū)
local rx_buff = zbuff.create(1024)
local netc = socket.create(nil, d1Name)
socket.config(netc, nil, is_udp, is_tls)
log.info("任務(wù)id", d1Name)
while true do
-- 連接服務(wù)器, 15秒超時(shí)
log.info("socket", "開始連接服務(wù)器")
sysplus.cleanMsg(d1Name)
local result = libnet.connect(d1Name, 15000, netc, host, port)
if result then
log.info("socket", "服務(wù)器連上了")
--向服務(wù)器發(fā)送數(shù)據(jù)
libnet.tx(d1Name, 0, netc, "helloworld")
else
log.info("socket", "服務(wù)器沒連上了!!!")
end
while result do
-- 連接成功之后, 先嘗試接收
-- log.info("socket", "調(diào)用rx接收數(shù)據(jù)")
local succ, param = socket.rx(netc, rx_buff)
if not succ then
log.info("服務(wù)器斷開了", succ, param, ip, port)
break
end
-- 如果服務(wù)器有下發(fā)數(shù)據(jù), used()就必然大于0, 進(jìn)行處理
if rx_buff:used() > 0 then
log.info("socket", "收到服務(wù)器數(shù)據(jù),長度", rx_buff:used())
local data = rx_buff:query() -- 獲取數(shù)據(jù)
sys.publish(rxtopic, "downlink", data)
rx_buff:del()
end
-- log.info("libnet", "調(diào)用wait開始等待消息")
-- 等待事件, 例如: 服務(wù)器下發(fā)數(shù)據(jù), 有數(shù)據(jù)準(zhǔn)備上報(bào), 服務(wù)器斷開連接
result, param, param2 = libnet.wait(d1Name, 15000, netc)
log.info("libnet", "wait", result, param, param2)
if not result then
-- 網(wǎng)絡(luò)異常了, 那就斷開了, 執(zhí)行清理工作
log.info("socket", "服務(wù)器斷開了", result, param)
break
elseif #txqueue > 0 then
-- 有待上報(bào)的數(shù)據(jù),處理之
while #txqueue > 0 do
local data = table.remove(txqueue, 1)
if not data then
break
end
result,param = libnet.tx(d1Name, 15000, netc,data)
log.info("libnet", "發(fā)送數(shù)據(jù)的結(jié)果", result, param)
if not result then
log.info("socket", "數(shù)據(jù)發(fā)送異常", result, param)
break
end
end
end
-- 循環(huán)尾部, 繼續(xù)下一輪循環(huán)
end
-- 能到這里, 要么服務(wù)器斷開連接, 要么上報(bào)(tx)失敗, 或者是主動(dòng)退出
libnet.close(d1Name, 5000, netc)
-- log.info(rtos.meminfo("sys"))
sys.wait(30000) -- 這是重連時(shí)長, 自行調(diào)整
end
end
二、燒錄代碼到硬件
2.1 正確連接電腦和4G模組電路板
使用帶有數(shù)據(jù)通信功能的數(shù)據(jù)線,不要使用僅有充電功能的數(shù)據(jù)線;
2.2 識(shí)別4G模組的boot引腳
在下載之前,要用模組的boot引腳觸發(fā)下載, 也就是說,要把4G模組的boot引腳拉到 1.8v,或者直接把boot引腳和VDD_EXT引腳相連。我們要在按下BOOT按鍵時(shí)讓模塊開機(jī),就可以進(jìn)入下載模式了。
具體到 Air780E開發(fā)板,
2.2.1 當(dāng)我們模塊沒開機(jī)時(shí),按著BOOT鍵然后長按PWR開機(jī)。
2.2.2 當(dāng)我們模塊開機(jī)時(shí),按著BOOT鍵然后點(diǎn)按重啟鍵即可。
?
2.3 識(shí)別電腦的正確端口
判斷是否進(jìn)入BOOT模式:模塊上電,此時(shí)在電腦的設(shè)備管理器中,查看串口設(shè)備, 會(huì)出現(xiàn)一個(gè)端口表示進(jìn)入了boot下載模式,如下圖所示:
?
當(dāng)設(shè)備管理器出現(xiàn)了3個(gè)連續(xù)數(shù)字的com端口,并且每個(gè)數(shù)字都大于4,這時(shí)候, 硬件連接上就緒狀態(tài),恭喜你,可以進(jìn)行燒錄了!
2.4 新建項(xiàng)目
首先,確保你的 LuaTools 的版本,上大于 2.2.13 版本的。
在 LuaTools 的左上角上有版本顯示的,如圖所示:
?
LuaTools 版本沒問題的話, 就點(diǎn)擊 LuaTOols 右上角的“項(xiàng)目管理測(cè)試”按鈕,如下圖所示:
?
這時(shí)會(huì)彈出項(xiàng)目管理和燒錄管理的對(duì)話框,如下圖:
新建一個(gè)項(xiàng)目
注意:這里截圖使用的hello world項(xiàng)目的燒錄教程,燒錄的時(shí)候要將腳本換成本次demo的。
?
2.5 開始燒錄
選擇780E板子對(duì)應(yīng)的底層core和剛改的main.lua腳本文件。下載到板子中。
?
?
點(diǎn)擊下載后,我們需要進(jìn)入boot模式才能正常下載,在(3)(4)小節(jié)已經(jīng)介紹了如何進(jìn)入boot模式。
?
三、驗(yàn)證功能
3.1 打開TCP SSL連接測(cè)試工具。
?
3.2 配置端口,tcp連接,是否加密。
?
3.3 成功連接并發(fā)送數(shù)據(jù)
?
四、常見問題
4.1 最多同時(shí)支持多少個(gè)連接?
socket支持多個(gè)連接的, 通常最多支持8個(gè)。加密連接(TLS/SSL)需要更多內(nèi)存, 這意味著能容納的連接數(shù)會(huì)小很多, 同時(shí)也更慢。
4.2 可以與mqtt庫同時(shí)使用嗎?
支持。
以上就是今天的全部內(nèi)容,合宙低功耗4G模組Air780E快速入門之跟服務(wù)器之間的加密通信,你學(xué)會(huì)了嗎?
?審核編輯 黃宇
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9160瀏覽量
85425 -
加密通信
+關(guān)注
關(guān)注
1文章
12瀏覽量
2758
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論