关于Air780E:与服务器的加密通信操作方法

news/2024/10/21 4:04:41

今天我们来学习合宙低功耗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


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 thenlog.info("服务器断开了", succ, param, ip, port)breakend-- 如果服务器有下发数据, used()就必然大于0, 进行处理if rx_buff:used() > 0 thenlog.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)breakelseif #txqueue > 0 then-- 有待上报的数据,处理之while #txqueue > 0 dolocal data = table.remove(txqueue, 1)if not data thenbreakendresult,param = libnet.tx(d1Name, 15000, netc,data)log.info("libnet", "发送数据的结果", result, param)if not result thenlog.info("socket", "数据发送异常", result, param)breakendendend-- 循环尾部, 继续下一轮循环

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键然后点按重启键即可。

图片

2.3 识别电脑的正确端口

判断是否进入BOOT模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了boot下载模式,如下图所示:

图片

当设备管理器出现了3个连续数字的com端口,并且每个数字都大于4,这时候, 硬件连接上就绪状态,恭喜你,可以进行烧录了!

2.4 新建项目

首先,确保你的 LuaTools 的版本,上大于 2.2.13 版本的。

在 LuaTools 的左上角上有版本显示的,如图所示:

图片

LuaTools 版本没问题的话, 就点击 LuaTOols 右上角的“项目管理测试”按钮,如下图所示:

图片

这时会弹出项目管理和烧录管理的对话框,如下图:

新建一个项目

注意:这里截图使用的hello world项目的烧录教程,烧录的时候要将脚本换成本次demo的。

图片

2.5 开始烧录

选择780E板子对应的底层core和刚改的main.lua脚本文件。下载到板子中。

图片

图片

点击下载后,我们需要进入boot模式才能正常下载,在(3)(4)小节已经介绍了如何进入boot模式。

图片

三、验证功能

3.1 打开TCP SSL连接测试工具。

 

图片

3.2 配置端口,tcp连接,是否加密。

 

图片

3.3 成功连接并发送数据

 

图片

四、常见问题

4.1 最多同时支持多少个连接?

socket支持多个连接的, 通常最多支持8个。加密连接(TLS/SSL)需要更多内存, 这意味着能容纳的连接数会小很多, 同时也更慢。

4.2 可以与mqtt库同时使用吗?

支持。

以上就是今天的全部内容,合宙低功耗4G模组Air780E快速入门之跟服务器之间的加密通信,你学会了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/72516.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第一天 | 704. 二分查找、 27. 移除元素、977.有序数组的平方 (上)

1-704.二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例 2: 输…

基于BP神经网络的苦瓜生长含水量预测模型matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)T表示温度,v表示风速,h表示模型厚度 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)for i = 1:13;figure;subplot(211);plot(y1{i},ro);hold onplot(Train_output1{i},b);xlabel(…

小车侧方位停车过程的动态模拟matlab仿真

1.课题概述小车侧方位停车过程的动态模拟matlab仿真。仿真得到小车的停车动画,小车移动的xy轴坐标以及角度变换。2.系统仿真结果 3.核心程序与模型 版本:MATLAB2022a%阶段3 %车轮 pause(1); for i=1:13ya1=ya1+0.5;yb1=yb1+0.5;ya2=ya2+0.5;yb2=yb2+0.5;cla; patch([Car…

实现dnmp中多站点多版本php并存

实现dnmp中多站点多版本php并存 PHP多版本部署之docker方式 背景 搞了一段时间Python,这两天又要开始做一些PHP相关的项目了,本地开发环境、测试环境、线上环境都需要重新弄了,为了开发方便还是决定用Docker方式来部署,自己又不想写Dockfile和compose文件啥的。于是找了下,…

数据采集实践第一次作业

目录作业①:定向爬取大学排名信息实验要求及结果心得体会作业②:商城商品比价定向爬虫实验要求及结果心得体会作业③:爬取网页中的JPEG和JPG格式图片实验要求及结果心得体会码云连接作业①:定向爬取大学排名信息 实验要求及结果要求 用requests和BeautifulSoup库方法定向爬…

mysql学习笔记3

通过Node-red对mysql数据库进行操作 1、环境配置 操作系统 宿主机:UBUNTU 虚拟环境:KVM 虚拟机1:Armbian 虚拟机2:Debian 网络 虚拟网络(默认的default配置): +-------------------+ +-------------------+ | | | …

这十年我与广告不共戴天练就的十八般武艺 #PC去广告 #手机去广告

背景大家应该都体会过广告的苦恼,比如看着好看的电视,突然给播放广告,这时候痛苦系数飙升。随着社会进步,广告的载体,还有形式也越来越多,比如手机端各种APP启动广告,PC端软件弹窗,网站Banner等,这些广告最主要的目的就是诱骗你误操作点击,然后陷入几乎无限弹窗的循环…

产品经理不会画架构图

在当今竞争激烈的科技行业中,产品经理扮演着至关重要的角色。他们是产品的灵魂人物,负责从概念提出到产品上线的整个过程。然而,有一个问题常常困扰着许多产品经理,那就是不会画架构图。在一些团队中,产品经理不会画架构图可能会遭到同事的质疑甚至群嘲。这不仅会影响产品…