今天我们来学习合宙低功耗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 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键然后点按重启键即可。

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快速入门之跟服务器之间的加密通信,你学会了吗?

关于Air780E:与服务器的加密通信操作方法的更多相关文章

  1. Security基础(三):OpenSSL及证书服务、邮件TLS/SSL加密通信

    一.OpenSSL及证书服务 目标: 本案例要求熟悉OpenSSL工具的基本使用,完成以下任务操作: 使用OpenSSL加密/解密文件 搭建企业自有的CA服务器,为颁发数字证书提供基础环境 方案: 使 ...

  2. 单片机上使用TEA加密通信(转)

    源:单片机上使用TEA加密通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.72 单片机:STM32 说 ...

  3. 如何使用HTML5的WebSocket实现网页与服务器的双工通信(一)

    本系列服务端双工通信包括两种实现方式:一.使用Socket构建:二.使用WCF构建.本文为使用Socket构建服务端的双工通信,客户端同样使用Html5的WebSocket技术进行调用. 一.网页客户 ...

  4. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  5. SSL及其加密通信过程

    SSL及其加密通信过程 什么是SSL SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密.它主要是分为两层: ...

  6. Python3+ssl实现加密通信

    一.说明 1. python标准库ssl可实现加密通信 2. ssl库底层使用openssl,做了面向对像化改造和简化,但还是可以明显看出openssl的痕迹 3. 本文先给出python实现的soc ...

  7. 转: https 加密通信流程

    https 加密通信流程当用户在浏览器中输入一个以https开头的网址时,便开启了浏览器与被访问站点之间的加密通信.下面我们以一个用户访问https://qbox.me为例,给读者展现一下SSL/TL ...

  8. Filebeat与Logstash配置SSL加密通信

    为了保证应用日志数据的传输安全,我们可以使用SSL相互身份验证来保护Filebeat和Logstash之间的连接. 这可以确保Filebeat仅将加密数据发送到受信任的Logstash服务器,并确保L ...

  9. 开源项目SMSS发开指南(四)——SSL/TLS加密通信详解

    本文将详细介绍如何在Java端.C++端和NodeJs端实现基于SSL/TLS的加密通信,重点分析Java端利用SocketChannel和SSLEngine从握手到数据发送/接收的完整过程.本文也涵 ...

  10. bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能

    xmlrpc .  https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...

随机推荐

  1. TCP/TP协议栈(逐渐更新版)

    TCP/IP协议栈 应用层 DNS协议 传输层 TCP协议 TCP协议报文结构 源端口 目的端口 序列号 确认号 头长度header length or data offset 保留字段reserve ...

  2. LaTeX 常用引用标签前缀

    引用对象 标签前缀 Chapter ch Section sec Subsection sec Appendix app Figure fig Table tab List item itm Equa ...

  3. uni-app之camera组件-人脸拍摄

    小程序录制视频:10-30秒:需要拍摄人脸,大声朗读数字(123456)这种. 1.camera组件 camera页面内嵌的区域相机组件.注意这不是点击后全屏打开的相机 camera只支持小程序使用: ...

  4. 2024 秋季PAT认证甲级(题解A1-A4)

    2024 秋季PAT认证甲级(题解A-D) 写在前面 这一次PAT甲级应该是最近几次最简单的一次了,3个小时的比赛差不多30分钟就ak了(也是拿下了整场比赛的rk1),下面是题解报告,每个题目差不多都 ...

  5. FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24

    在许多实际应用中,相对于反映类别之间微妙差异的细粒度标签,我们更容易获取粗粒度标签.然而,现有方法无法利用粗标签以无监督的方式推断细粒度标签.为了填补这个空白,论文提出了FALCON,一种从粗粒度标记 ...

  6. EF Core – Library use EF

    前言 写 Library 有时候会用到 database, 会想用 EF 来维护. 比如 Identity, IdentityServer, OpenIddict, 这些 Library 都有使用到 ...

  7. 2024.7.5-2024.7.20 HA省学会集训游记(焦作一中)

    这是一篇长篇小说 DAY1 除了DAY4-DAY5个别内容以外,这些都是补的,但是全写完有太多了qwq,挑题写了 树状数组和线段树基础 很多都是一些模板题,太模板的题不再做太多解释 题目: P4062 ...

  8. C++ const常量指针

    const常量指针 const是C++关键字,译为常量,const指针即为常量指针. 分为三类 指向const的指针 const指针 指向const的const指针 指向const的指针 表示指向区域 ...

  9. 关于 JS 函数的一切

    本文基于: Bilibili - 自由的加百利 前置条件: 需掌握函数的编写.传参.返回.调用 理解作用域.掌握定时器的用法 知道引用类型和基本数据类型的区别 知道函数也是引用类型 听说过同步异步的概 ...

  10. 左值 <->右值

    左值引用指向左值 右值引用指向右值 int a = 5; int &ref_a = a; // 左值引用指向左值,编译通过 int &ref_a = 5; // 左值引用指向了右值,会 ...