1 WebSocket概述

WebSocket是HTML5下一种新的协议(本质上是一个基于TCP的协议),它实现了浏览器与服务器之间的全双工通信,能够节省服务器资源和带宽,达到实时通讯的目的。WebSocket协议通过握手机制,允许客户端和服务器之间建立一个类似TCP的连接,从而方便它们之间的通信。

  • 在线聊天应用:允许用户实时发送和接收消息,而无需页面刷新或轮询服务器。

  • 实时协作应用:支持多用户实时编辑文档或共享白板等场景。

  • 实时游戏:允许多个玩家之间进行实时的游戏交互。

  • 实时数据展示:用于显示实时数据,如股票市场变化、天气预报更新等。

  • 实时通知和提醒:用于向用户发送实时的通知消息,如新邮件提醒、社交媒体通知等。

  • 在线会议和视频通话:支持实时的音视频通信。

2 准备硬件环境

“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”

2.1 Air780E开发板

本demo使用的是Air780E核心板。

2.2 PC电脑

请准备一台配备USB接口且能够正常上网的电脑。

2.3 SIM卡

请准备一张可正常上网的SIM卡,该卡可以是物联网卡或您的个人手机卡。

特别提醒:请确保SIM卡未欠费且网络功能正常,以便顺利进行后续操作。

2.4 数据通信线

请准备一根用于连接Air780E开发板和PC电脑的数据线,该数据线将实现业务逻辑的控制与交互。您有两种选择:

  • USB数据线(其一端为Type-C接口,用于连接Air780E开发板)。通常,这种数据线的外观如下示意图所示:

普通的手机USB数据线一般都可以直接使用;

  • 数据线是USB转TTL串口线。通常,这种数据线的外观如下示意图所示:

在本教程中,我们将采用以下数据线配置进行测试和数据查看:

  • 第一种:USB数据线:此数据线不仅用于为测试板供电,还用于查看数据日志。其一端为Type-C接口,连接Air780E开发板;另一端为标准USB接口,连接PC电脑。

  • 第二种:USB转TTL串口线:此数据线主要用于Websocket-UART透传数据的查看。其一端为USB接口,连接PC电脑;另一端为TTL串口接口,连接Air780E开发板,以便进行串口通信和数据传输。

2.5 组装硬件环境

2.5.1 请按照SIM卡槽上的指示方向正确插入SIM卡,务必确保插入方向正确,避免插反导致损坏!

通常,插入SIM卡的步骤如下:

  • 将SIM卡的金属接触面朝下,对准卡槽的开口。

  • 用力平稳地将SIM卡推入卡槽,直至听到“咔嚓”一声,表示SIM卡已正确安装到位。

2.5.2 USB数据线,连接电脑和Air780E开发板,如下图所示:

3
准备软件环境

“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。

3.1 Luatools工具

要想烧录AT固件到4G模组中,需要用到合宙的强大的调试工具:Luatools;

Luatools工具集具备以下几大核心功能:

  • 一键获取最新固件:自动连接合宙服务器,轻松下载最新的合宙模组固件。

  • 固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中。

  • 串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能。

  • 串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求。

Luatools下载之后,无需安装,解压到你的硬盘,点击Luatools_v3.exe运行,出现如下界面,就代表Luatools安装成功了:

3.2 烧录代码

首先要说明一点:脚本代码,要和固件的LuatOS-SoC_V1112_EC618_FULL.soc文件一起烧录。

整体压缩文件:内含有文件一:Core固件和文件二:WebSocket加密通讯脚本文件,文件三:WebSocket-UART透传脚本文件,如图所示。

3.2.1 压缩文件:

阅读原文下载完整压缩文件包:
https://docs.openluat.com/air780e/luatos/app/socket/websocket/

3.2.2 压缩包内部文件

文件一:Core固件

文件二:WebSocket加密通讯脚本文件

文件三:WebSocket-UART透传脚本文件

3.2.3 找到烧录的固件文件

https://docs.openluat.com/air780e/luatos/app/socket/websocket/

3.2.4 正确连接电脑和4G模组电路板

使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线;

3.2.5 识别4G模组的boot引脚

在下载之前,要用模组的boot引脚触发下载,也就是说,要把4G模组的boot引脚拉到1.8v,或者直接把boot引脚和VDD_EXT引脚相连。我们要在按下BOOT按键时让模块开机,就可以进入下载模式了。

具体到Air780E开发板,

  • 当我们模块没开机时,按着BOOT键然后长按POW开机。

  • 当我们模块开机时,按着BOOT键然后点按重启键即可。

3.2.6 识别电脑的正确端口

判断是否进入BOOT模式:-模块上电,此时在电脑的设备管理器中,查看串口设备,如下图:

进入boot下载模式,如下图所示:

这时候,硬件连接上就绪状态,恭喜你,可以进行烧录了!

3.2.7 新建项目

首先,确保你的Luatools的版本大于或者等于3.0.6版本.

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

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

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

3.2.8 开始烧录

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

点击下载后,我们需要进入boot模式才能正常下载。

3.3 PC端串口工具

阅读原文下载:
https://docs.openluat.com/air780e/luatos/app/socket/websocket/

  • 串口接线方式:Air780提供三个Uart.

MAIN_UART:通用串口,可用于AT命令和数据传输最大波特率921600bps,默认波特率自适应9600-115200bps支持硬件流控(RTS/CTS)

AUX_UART:通用串口

DBG_UART:用于输出调试信息

注意:

  • 以上PinOut图示,对应的V1.8的开发板,版本号在板子丝印上可查阅。

  • V1.4的开发板,由于LCD脚有差异,图示的LCD_RS/LCD_CLK实际位于开发板管脚编号06/05的UART2/AUX_UART脚,不在编号11/14脚。

  • V1.8的开发板17脚改为VBAT.

3.3.1 LLCOM工具设置:初始配置

3.3.2 数据发送前的配置

4 WebSocket加密通讯的概述

本小节教你怎么使用luatos脚本语言,就可以让合宙4G模组连接上一个WebSocket服务器,并且模组和服务器之间实现数据的交互!

4.1 本教程实现的功能定义:

  • 4G模组插卡开机后,连接上WebSocket服务器;

  • 这是个测试服务,当4G模组发送的是json,且action=echo,就会回显所发送的内容

  • 发送内容是

    wsc:send((json.encode({action="echo",msg=os.date()})))

4.2 文章内容引用

  • 780E开发板软硬件资料:Air780E产品手册

  • websocket函数接口不做详细介绍,可通过此链接查看具体介绍:websocket-网络接口-LuatOS文档

4.3 核心脚本代码详解

4.3.1 websocket客户端创建

4.3.2 设置额外的headers

4.3.3 设置自动重连机制

4.3.4 注册websocket回调

4.3.5 连接服务器

4.3.6 发布消息

4.3.7 websocket客户端关闭(关闭后资源释放无法再使用)

wsc:close()

4.4 成果演示与深度解析:视频+图文全面展示

4.4.1 成果运行精彩呈现

4.4.2 演示视频生动展示

4.4.3 完整实例深度剖析

5 WebSocket-UART透传的概述

在某些应用场景下,可能需要将WebSocket接收到的数据通过UART串口发送到其他设备,或者将UART串口接收到的数据通过WebSocket发送到服务器。这通常需要通过一个中间层或网关设备来实现数据的转换和传输。

5.1 本教程实现的功能定义:

  • 4G模组插卡开机后,连接上WebSocket服务器;

  • 本小节教你怎么使用luatos脚本语言,就可以让合宙4G模组通过Uart1透传数据发送到WebSocket服务器,并且模组和服务器之间实现数据的交互!

5.2 文章内容引用

  • 780E开发板软硬件资料:Air780E产品手册

  • websocket函数接口不做详细介绍,可通过此链接查看具体介绍:websocket-网络接口-LuatOS文档

5.3 核心脚本代码详解

5.3.1 websocket客户端创建

5.3.2 设置额外的headers

5.3.3 设置自动重连机制

5.3.4 注册websocket回调

5.3.5 连接服务器

5.3.6 串口初始化

本文示例:串口使用MAIN_UART(uart1)

5.3.7 接收UART消息

5.3.8 发布消息

5.3.9 websocket客户端关闭(关闭后资源释放无法再使用)

5.4 成果演示与深度解析:视频+图文全面展示

5.4.1 成果运行精彩呈现

5.4.2 完整实例深度剖析

6 总结
  • WebSocket加密确保了数据在传输过程中的安全性,防止被窃取或篡改;而WebSocket透传则指数据在不改变内容的情况下,通过WebSocket协议进行传输,通常涉及中间层或网关设备的数据格式转换与传递

  • Air780E作为一款4G模组,支持WebSocket协议,并可通过Luatools等工具进行调试和固件管理。在Air780E上实现WebSocket加密通讯,通常需要使用SSL/TLS等加密协议来确保数据传输的安全性。

7 常见问题
  • websocket服务器的连接地址,格式为ws(或wss)://xxx开头

  • websocket需要在任务中启动,带自动重连,支持心跳协议

  • websocket心跳包,建议180秒

  • 注意串口发送过去的数据是字符格式,这里进行对比时注意echo的类型ifuart_rx_buff_data=='"echo"'

8 扩展

在WebSocket中,WS和WSS代表两种不同的连接类型,它们分别具有以下特点:

8.1 WSS(WebSocketSecure)

  • 含义:表示安全的WebSocket连接,即在TLS(传输层安全协议)之上的WebSocket通信。WSS相当于HTTPS在WebSocket中的应用,提供了数据加密和完整性验证等安全功能。

  • 端口:默认情况下,WSS协议使用443端口,这是大多数网站用于HTTPS通信的标准端口。

  • 使用场景:适用于需要保护通信内容、防止数据窃取或篡改的场景。WSS是处理敏感数据或进行安全通信时的推荐选择。

8.2 WS(WebSocket)

  • 含义:表示非安全的WebSocket连接,即没有加密的WebSocket通信。

  • 端口:默认情况下,WebSocket的WS协议使用80端口。

  • 使用场景:适用于不需要数据加密的场景,或者在安全性要求不高的环境中使用。然而,对于敏感数据或需要保护通信内容的情况,WS可能不是最佳选择。

源码开放:WebSocket应用示例的更多相关文章

  1. jQuery LigerUI 最新版压缩包(含chm帮助文档、源码、donet权限示例)

    jQuery LigerUI 最新版压缩包 http://download.csdn.net/download/heyin12345/4680593 jQuery LigerUI 最新版压缩包(含ch ...

  2. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

    概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...

  3. Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

    概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...

  4. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...

  5. Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

    概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...

  6. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  7. Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  8. Java 集合系列 06 Stack详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Java 集合系列 05 Vector详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  10. Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. armbian挂载sd卡记录

    mkdir -p /mnt/mmctouch  /etc/init.d/mount.shvim /etc/init.d/mount.sh内容见图mount /dev/mmcblk1p1 /mnt/mm ...

  2. 【漏洞分析】Penpie 攻击事件:重入攻击构造奖励金额

    背景信息 2024 年 9月 3日,Penpie 合约遭受重入攻击,攻击者在重入阶段向合约添加流动性来冒充奖励金额,从而获取合约内原有的奖励代币.资产损失高达 2734 万美元. 2024 年 5月, ...

  3. 论文解读 -TongGu:专注于文言文的大模型

    一.简要介绍 文言文是通往中国古代丰富遗产和智慧的门户,但其复杂性给大多数没有专业知识的现代人构成了巨大的理解障碍.虽然大型语言模型(LLM)在自然语言处理(NLP)方面显示出了显著的能力,但它们在文 ...

  4. ArgoWorkflow教程(四)---Workflow & 日志归档

    上一篇我们分析了argo-workflow 中的 artifact,包括 artifact-repository 配置以及 Workflow 中如何使用 artifact.本篇主要分析流水线 GC 以 ...

  5. JavaScript Library – Alpine.js

    前言 Alpine 是高山的意思.Alpine.js 是一个轻量级的 JS Framework. 我为什么会去用它呢? 是这样的,我在做企业网站开发的时候会有 2 个阶段. 第一个 draft 阶段, ...

  6. C# and TypeScript – Enum Flags

    前言 以前就有提过 Enum Flags,但平日不常用.最近翻 Angular 源码,发现它很多地方用到,而且没有封装语义代码.一堆符号真的看不惯啊... 于是又去复习了一遍,熟悉熟悉.顺便写一篇做记 ...

  7. Asp.net core 学习笔记之 Microsoft Graph API

    早年如果我们要读写用户得 outlook 内容是比较麻烦的, 要用许多 smtp 之类的方式. 现在终于是有了 http 级的 API 可以 call 了. 不仅仅是 outlook, calenda ...

  8. 十三,Spring Boot 中注入 Servlet,Filter,Listener

    十三,Spring Boot 中注入 Servlet,Filter,Listener @ 目录 十三,Spring Boot 中注入 Servlet,Filter,Listener 1. 基本介绍 2 ...

  9. Java——图片文件位于 bin 目录下,下载新图片会导致应用程序重启

    当应用程序在运行时需要加载图片文件时,如果图片文件位于 bin 目录下,下载新图片会导致应用程序重启,这是因为 Java 应用程序在加载资源时通常会遵循以下机制: 类加载器: Java 应用程序使用类 ...

  10. php获取支付宝用户信息

    php获取支付宝用户信息 一:创建应用 要在您的应用中使用支付宝开放产品的接口能力: 您需要先去蚂蚁金服开放平台(open.alipay.com),在开发者中心创建登记您的应用,此时您将获得应用唯一标 ...