關於Air780E:與伺服器的加密通訊操作方法

电子老师傅發表於2024-10-17

今天我們來學習合宙低功耗4G模組Air780E快速入門之跟伺服器之間的加密通訊,夥伴們,一起學起來!

一、編寫指令碼

1.1 準備資料

Air780E開發板購買

Air780E開發板設計資料

LuatOS-Air780E/網路加密通訊程式原始碼demo

合宙的 TCP/UDP 測試伺服器

API介紹說明

1.2 程式詳解

1.2.1 首先配置聯網配置

-- 測試網站 https://netlab.luatos.com/ 點選 開啟TCP 獲取測試埠號

-- 要按實際情況修改

local host = "112.125.89.8" -- 伺服器ip或者域名, 都可以的

local port = 45186 -- 伺服器

local is_udp = false -- 如果是UDP, 要改成true, false就是TCP

local is_tls = true -- 加密與否, 要看伺服器的實際情況

--=============================================================

1.2.2 聯網後,建立聯網成功後,對收發資料事件的處理函式

local function sockettest()

-- 等待聯網

sys.waitUntil("IP_READY")

-- 時間同步

socket.sntp()

-- 開始正在的邏輯, 發起socket連結,等待資料/上報心跳

local taskName = "sc"

local topic = taskName .. "_txrx"

log.info("topic", topic)

local txqueue = {}

--[[建立一個任務執行緒

@param1 function 任務函式名,用於resume喚醒時呼叫

@param2 string 任務名稱,用於喚醒任務id

@param3 function 接收到非目標訊息時的回撥函式

@param4 any 任務函式fun的可變引數

@return number 返回該任務的執行緒號

]]

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

   -- 等很久了,沒資料上傳/下發, 發個日期心跳包吧



   table.insert(txqueue, os.date())



   sys_send(taskName, socket.EVENT, 0)

elseif tp == "uplink" then

   -- 上行資料, 主動上報的資料,那就傳送呀



   table.insert(txqueue, data)



   sys_send(taskName, socket.EVENT, 0)

elseif tp == "downlink" then

   -- 下行資料,接收的資料, 從ipv6task來的



   -- 其他程式碼可以透過 sys.publish()



   log.info("socket", "收到下發的資料了", #data,"data:",data)

end


關於Air780E:與伺服器的加密通訊操作方法

end

end

1.2.3 聯網函式

function sockettask(d1Name, txqueue, rxtopic)

-- 列印準備連線的伺服器資訊

log.info("socket", host, port, is_udp and "UDP" or "TCP", is_tls and "TLS" or "RAW")

-- 準備好所需要的接收緩衝區

local rx_buff = zbuff.create(1024)

local netc = socket.create(nil, d1Name)

socket.config(netc, nil, is_udp, is_tls)

log.info("任務id", d1Name)

while true do

-- 連線伺服器, 15秒超時

log.info("socket", "開始連線伺服器")

sysplus.cleanMsg(d1Name)

local result = libnet.connect(d1Name, 15000, netc, host, port)

if result then

   log.info("socket", "伺服器連上了")



   --向伺服器傳送資料



   libnet.tx(d1Name, 0, netc, "helloworld")

else

   log.info("socket", "伺服器沒連上了!!!")

end

while result do

   -- 連線成功之後, 先嚐試接收



   -- log.info("socket", "呼叫rx接收資料")



   local succ, param = socket.rx(netc, rx_buff)



   if not succ then



       log.info("伺服器斷開了", succ, param, ip, port)



       break



   end



   -- 如果伺服器有下發資料, used()就必然大於0, 進行處理



   if rx_buff:used() > 0 then



       log.info("socket", "收到伺服器資料,長度", rx_buff:used())



       local data = rx_buff:query() -- 獲取資料



       sys.publish(rxtopic, "downlink", data)



       rx_buff:del()



   end



   -- log.info("libnet", "呼叫wait開始等待訊息")



   -- 等待事件, 例如: 伺服器下發資料, 有資料準備上報, 伺服器斷開連線



   result, param, param2 = libnet.wait(d1Name, 15000, netc)



   log.info("libnet", "wait", result, param, param2)



   if not result then



       -- 網路異常了, 那就斷開了, 執行清理工作



       log.info("socket", "伺服器斷開了", result, param)



       break



   elseif #txqueue > 0 then



       -- 有待上報的資料,處理之



       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", "傳送資料的結果", result, param)



           if not result then



               log.info("socket", "資料傳送異常", result, param)



               break



           end



       end



   end



   -- 迴圈尾部, 繼續下一輪迴圈

end

-- 能到這裡, 要麼伺服器斷開連線, 要麼上報(tx)失敗, 或者是主動退出

libnet.close(d1Name, 5000, netc)

-- log.info(rtos.meminfo("sys")) sys.wait(30000) -- 這是重連時長, 自行調整

end

end

二、燒錄程式碼到硬體

2.1 正確連線電腦和4G模組電路板

使用帶有資料通訊功能的資料線,不要使用僅有充電功能的資料線;

2.2 識別4G模組的boot引腳

下載之前,要用模組的boot引腳觸發下載, 也就是說,要把4G模組的boot引腳拉到 1.8v,或者直接把boot引腳和VDD_EXT引腳相連。我們要在按下BOOT按鍵時讓模組開機,就可以進入下載模式了。

具體到 Air780E開發板,

2.2.1 當我們模組沒開機時,按著BOOT鍵然後長按PWR開機。

2.2.2 當我們模組開機時,按著BOOT鍵然後點按重啟鍵即可。

圖片

關於Air780E:與伺服器的加密通訊操作方法

2.3 識別電腦的正確埠

判斷是否進入BOOT模式:模組上電,此時在電腦的裝置管理器中,檢視串列埠裝置, 會出現一個埠表示進入了boot下載模式,如下圖所示:

圖片

關於Air780E:與伺服器的加密通訊操作方法

當裝置管理器出現了3個連續數字的com埠,並且每個數字都大於4,這時候, 硬體連線上就緒狀態,恭喜你,可以進行燒錄了!

2.4 新建專案

首先,確保你的 LuaTools 的版本,上大於 2.2.13 版本的。

在 LuaTools 的左上角上有版本顯示的,如圖所示:

圖片

關於Air780E:與伺服器的加密通訊操作方法

LuaTools 版本沒問題的話, 就點選 LuaTOols 右上角的“專案管理測試”按鈕,如下圖所示:

圖片

關於Air780E:與伺服器的加密通訊操作方法

這時會彈出專案管理和燒錄管理的對話方塊,如下圖:

新建一個專案

注意:這裡截圖使用的hello world專案的燒錄教程,燒錄的時候要將指令碼換成本次demo的。

圖片

關於Air780E:與伺服器的加密通訊操作方法

2.5 開始燒錄

選擇780E板子對應的底層core和剛改的main.lua指令碼檔案。下載到板子中。

圖片

關於Air780E:與伺服器的加密通訊操作方法

圖片

關於Air780E:與伺服器的加密通訊操作方法

點選下載後,我們需要進入boot模式才能正常下載,在(3)(4)小節已經介紹瞭如何進入boot模式。

圖片

關於Air780E:與伺服器的加密通訊操作方法

三、驗證功能

3.1 開啟TCP SSL連線測試工具。

圖片

關於Air780E:與伺服器的加密通訊操作方法

3.2 配置埠,tcp連線,是否加密。

圖片

關於Air780E:與伺服器的加密通訊操作方法

3.3 成功連線併傳送資料

圖片

關於Air780E:與伺服器的加密通訊操作方法

四、常見問題

4.1 最多同時支援多少個連線?

socket支援多個連線的, 通常最多支援8個。加密連線(TLS/SSL)需要更多記憶體, 這意味著能容納的連線數會小很多, 同時也更慢。

4.2 可以與mqtt庫同時使用嗎?

支援。

以上就是今天的全部內容,合宙低功耗4G模組Air780E快速入門之跟伺服器之間的加密通訊,你學會了嗎?

相關文章