tag 标签: 4G模块

相关博文
  • 2025-1-8 16:23
    41 次阅读|
    0 个评论
    今天我们继续学习Lua语法基础教程,中篇。 五、变量 5.1 number变量 变量,可以看作是一个桶,在里面装你想要装的内容。这些内容可以是Lua包含的所有合法类型。 例如:我想要新建一个桶,名叫bucket,在里面放入233这个数字,就可以像下面一样: 让我们试着自己新建几个变量吧! 新建变量year,并将变量的值设置为1926 新建变量month,并将变量的值设置为8 新建变量day,并将变量的值设置为7 5.2 了解nil nil类型表示没有任何有效值,只要是没有声明的值,它就是nil 比如我打印一个没有声明的值,便会输出nil: 这里需要你思考一下,运行以下代码,将会输出什么结果? 5.3 赋值语句 赋值是改变一个变量值的最基本的方法。 如下面一样,使用等号对左边的变量进行赋值 Lua可以对多个变量同时赋值,变量用逗号分开,赋值语句右边的值会依次赋给左边的变量。 当左右值的数量不一致时,Lua会进行下面的设定: 值的个数:按变量个数补足nil 变量个数 < 值的个数:多余的值会被忽略 下面的例子可以展示这种设定: 这里需要你思考一下,运行以下代码,将会输出什么结果? 5.4 交换变量 这部分需要你自己完成一个任务: 已知下面的代码,并且已知a和b的值,请在交换他们的值,使打印输出12 34 5.5 输出变量 我们已经知道了,在Lua中,可以使用print函数来打印你想要得到的结果。 同时在上一节,我们学会了新建变量和设置变量的值。 让我们试着输出某个变量吧!使用print函数,输出已知变量。 我们已知变量num为某个数字,试着输出它的值吧! 5.6 算数运算符 运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。 上一节中,新建的数字变量,我们称之为number类型的变量。 本节我们来学习使用算术运算符,如下所示: 我们可以通过以下实例来理解算术运算符的应用: 你需要完成下面的任务: 已知,一个长方体的长宽高分别为a、b、c(单位米),且这个物体重量为m(单位克) 请打印出物体的密度(单位g/m³) 注:密度计算公式 密度 = 质量 / 体积 六、字符串 6.1 string 类型变量 字符串(即string),就是一串文本数据,可以存储你要的文本。 在第二节中,print出的数据就是一个字符串。 Lua 语言中字符串可以使用以下三种方式来表示: 单引号间的一串字符 双引号间的一串字符 ]间的一串字符 你可以参考下面的例子来深入理解: 接下来你需要完成下面的练习: 新建三个变量s1、s2、s3 分别存入字符串数据:str、abc、233,使输出打印正确 6.2转义字符 在上一节中,我们学习了如何声明字符串。 但是我们有时候会遇到一些特殊的问题,如:如何输出单引号和双引号?如何输出回车换行? 也许我们可以用下面的方式简单规避,输出单引号时,声明字符串用双引号括起来,像下面这样 同理,输出双引号时,声明字符串用单引号括起来,像下面这样 但是,这样会出现一个问题:如何同时显示单引号和双引号?这里就需要转义字符登场了。 转义字符用于表示不能直接显示的字符,比如后退键、回车键、等。 以\开头的都是转义字符,下面时常用的转义字符格式: 例如,如果我们想给str赋值一个单引号,一个双引号('"),那么我们可以这样写: 下面需要你来完成一个简单的任务: 新建一个变量str,给str赋值为 ab\cd"ef'g\h]] 并打印出来 6.3string拼接 字符串和字符串可以相加吗?可以!我们可以用拼接符号来将两个独立的字符串拼起来。 我们使用..来表示字符串拼接符号,如下面的示例代码: 下面你要完成这个任务: 已知三个字符串变量s1、s2、s3 请将他们按顺序拼接起来,存入all,并使用print输出结果 6.4number转string 上面一节学习了如何拼接字符串,这个方法固然很好用,但是有时候我们会遇到一个需求,那就是把number类型的变量和string类型的变量拼接起来,组成一个新的string 比如下面的变量n和s,如何拼接起来呢? 我们可以直接将number类型的变量n转换成string类型的值,这样就可以拼接了 使用tostring(value)函数即可实现这一操作: 下面你要完成这个任务: 已知三个变量n1、s、n2 然后将他们按顺序拼接起来,存入变量result,使输出结果正确 小提示:在某些情况下,Lua会自动将number类型转换成string类型 6.5string转number 上面一节学习了如何将number转成string,这一节我们来学习如何将string转成number 比如下面的变量s,存储的内容是一个字符串,但是代表了一个数字,如何转成number再与n相加计算呢? 我们可以直接将string类型的变量s转换成number类型的值,这样就可以计算了 使用tonumber(value)函数即可实现这一操作: 下面你要完成这个任务: 已知三个字符串变量s1、s2、s3,其内容均为纯数字 请计算他们的算术和,赋值给新建的变量result,使下面代码输出正确结果 七、逻辑运算 7.1布尔型和比较运算 布尔型(boolean)只有两个可选值:true(真) 和false(假) Lua 把 false 和 nil 看作是false,其他的都为true(包括0这个值,也是相当于true) Lua 中也有许多的关系运算符,用于比较大小或比较是否相等,符号及其含义如下表: 我们可以通过以下实例来更加透彻的理解关系运算符的应用: 下面问题来了,运行以下代码,将会输出什么结果?请自行思考 7.2 逻辑运算符 逻辑运算符基于布尔型的值来进行计算,并给出结果,下表列出了 Lua 语言中的常用逻辑运算符: 我们可以通过以下实例来更加透彻的理解逻辑运算符的应用: 下面问题来了,运行以下代码,将会输出什么结果? 7.3检验大小(自测题) 题目:如果已知number变量n,那么如果需要判断n是否符合下面的条件: 3
  • 2025-1-8 15:32
    28 次阅读|
    0 个评论
    今天我们来学习Lua语法基础教程。由于篇幅过长,将分为上中下三篇进行讲解,本篇为上篇。 一、初识Lua Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。这意味着什么呢?这意味着Lua虚拟机可以很方便的嵌入别的程序里,从而为应用程序提供灵活的扩展和定制功能。而整个Lua虚拟机编译后仅仅一百余K,经过适当的裁剪还能做到更小,十分适合嵌入式的开发。 同时,在目前脚本引擎中,Lua的运行速度占有绝对优势。这些都决定了Lua是作为嵌入式脚本的最佳选择。 在我们编写代码之前,需要做一下准备,就是:确保你输入标点符号时,用的不是中文输入法 。 二、第一个Lua程序 几乎所有语言的第一行代码,都是输出hello world,本教程也不意外。 在Lua中,打印结果只需要使用print这个函数即可。同时,如果需要使用函数,只需要在函数名后加上双括号,同时传入你想传入的值即可。 所以,我们来执行下面的代码,打印出hello world吧! 三、输出数据 上一部分,我们知道了,在Lua中,可以使用print函数来打印你想要得到的结果。 并且还知道了,函数是指可以实现某些功能的子程序,可以使用函数名(参数)来执行。 让我们试着输出一些其他东西吧!使用多个print函数,输出自己想输出的数据。 四、代码注释 代码注释就是在代码里,不会运行的部分。注释完全不会被运行。 这部分是为了在查看代码时,可以更好地立即现有代码含义用的。 我们可以用--开头,来写一段单行注释 也可以用-- ]结尾,写一段多行注释。 下面是注释的例子:
  • 2025-1-8 15:09
    16 次阅读|
    0 个评论
    今天我们来学习低功耗4G模组Air780E快速入门之跟服务器之间的加密通信,伙伴们,一起学起来! 一、编写脚本 1.1准备资料 Air780E开发板 Air780E开发板设计资料 LuatOS-Air780E/网络加密通信程序源码demo TCP/UDP 测试服务器 API介绍说明 1.2 程序详解 1.2.1首先配置联网配置 1.2.2联网后,创建联网成功后,对收发数据事件的处理函数 1.2.3联网函数 二、烧录代码到硬件 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库同时使用吗? 支持与http/mqtt/websocket/ftp库同时使用, 互不干扰。 以上就是今天的全部内容~
  • 2025-1-8 14:08
    15 次阅读|
    0 个评论
    今天我们学习模组日志总体介绍,以下进入正文。 一、本文讨论的边界 本文是对4G 模组, 以及 4G+GNSS 模组的日志功能的总体介绍。通过日志,可以对研发过程中,以及模组运行过程中的各种故障进行分析。 二、4G模组日志的几种类型界 4G 模组的日志有两种类型:业务日志和底层日志。业务日志是指在用模组的用户代码输出的日志,包括 AT指令交互的日志和二次开发的业务代码输出的日志。 2.1 AT 交互的业务日志 把模组作为 AT 指令的方式做开发的时候, 可以通过串口工具,抓取 AT 指令的日志。也可以由设备的主控 CPU,输出和模组的 AT 指令的交互日志。AT 交互的日志,用普通的串口工具,比如 sscom,LLcom,都可以使用。 2.2 二次开发的业务日志 在用 LuatOS 二次开发的代码里面, 用 print()函数, 就可以输出任何的信息到 Luatools。通过 Luatools 的日志查看界面, 就可以非常方便的查看, 保存,分析业务日志。使用 Luatools 查看日志的详细资料,可以查看: Luatools下载和使用教程 2.3 底层日志 当遇到疑难问题, 用业务日志无法定位问题原因的时候, 就需要抓取底层日志,交给技术同事分析问题。 无论是 AT 指令方式的开发,还是在模组内部做二次开发,都可以抓取底层日志。 三、怎么抓底层日志 本章的内容,适合 780 系列模组,700系列模组,不适合 724和795系列模组。底层日志工具,叫做 EPAT 工具。 3.1 下载底层日志工具 点击如下链接,直接下载底层日志工具EPAT:模组底层日志抓取和分析工具 。 3.2 日志输出端口 如彻底讲清楚USB驱动问题这篇教程所说,USB的虚拟端口中,有一个底层日志的输出端口。可以从设备管理器的端口属性中根据“设备实例路径”中的值是否是0004,来判断底层日志的输出端口。 正常情况下,要用USB物理接口抓取日志,因为USB虚拟出来的端口的输出速率很高,基本不会出现丢日志的现象。 而串口抓底层日志,很容易丢失日志,导致抓不全日志,给问题分析带来很大的障碍。 3.3 EPAT工具中图标功能 3.4 EPAT底层日志抓取方法 ① 打开EPAT工具,抓日志选择第一项“Serial Device” ② 选择日志端口,准备抓取log - (1)打开设备端口配置界面 - (2)关闭或打开端口,如果端口被占用,工具也不会提示"端口已被占用",所以如果发现端口选择正确,并且日志还是没有出来的话,可以确认下日志端口是否有被占用,而导致EPAT没有打开日志端口。 - (3)日志端口可以同时打开两个,一个用模块的DBG_UART端口打开,另一个使用USB的日志输出端口,AT固件需要设置AT+ECPCFG=logPortSel,2(重启生效)才能设置日志端口可以从USB和DBG_UART两个端口输出。好处是在进入休眠的时候,待USB断开,就会用DBG串口输出日志,等模块唤醒时就会重新虚拟出来USB端口,就会从USB的日志口抓取日志。这样抓取休眠中的程序日志 也基本上不会出现日志丢失的情况。 - (4)打开日志输出端口和修改波特率的界面 - (5)选择日志输出端口 - (6)USB的虚拟日志端口不用特意修改波特率; DBG_UART端口默认为3M波特率输出,请不要随意更改,如果技术/研发同事发现日志丢失严重,可手动写入修改为6000000(6M)波特率; ③ 抓取底层日志 如果输出的日志有乱码,先确认波特率是否有改动,是不是默认3M波特率抓取的,或确认串口线是否支持3M波特率输出。然后再点击上图红框中的图标匹配数据库comdb解析文件。 ④ 获取数据库db文件 抓日志时,可以不做数据库匹配,只需要把文件发给技术同事就可以了;但如果技术同事建议本地先匹配数据库文件后再抓取,那优先保证日志可以正常输出出来,然后再匹配数据库文件。 - LuatOS开发的db文件获取 在底层core .soc后缀的固件中,通过解压缩工具打开该文件,可以看到里面会有一个comdb.txt文件,在EPAT选择更新数据库文件的时候 选择该文件,随后点击"UPDATE",如果变为绿灯 代表匹配成功;如果是还是红灯表示 选择的db文件和现在模块中烧录的固件不匹配; - AT开发的db文件获取 AT开发方式只能从技术同事中获取,一般AT的底层问题,不需要用户去看,所以一般不需要匹配数据库文件,抓取成功日志将zip日志压缩包和模块使用的AT固件完整版本号(发ATI 指令查看版本号)发给技术同事,分析时自行匹配。 数据库文件更新成功后, 灯会变成绿色 ⑤ 保存日志 - 导出日志前,先停止打印 - 点击保存日志的图标 保存的日志文件不要以相同名称文件覆盖的形式保存,否则日志会保存失败,实际内容不会覆盖。 ⑥ 将保存出来的ZIP日志压缩包发给技术分析。 ​
  • 2025-1-7 16:57
    117 次阅读|
    0 个评论
    一、UDP概述 UDP(用户数据报协议,UserDatagramProtocol)是一种无连接的、不可靠的传输层协议,主要用于实现网络中的快速通讯。以下是UDP通讯的主要特点: 1.1 无连接通讯: UDP在发送数据之前不需要建立连接,这大大减少了通讯的延迟。发送方只需将数据包封装成UDP报文,并附上目的地址和端口号,即可直接发送。 1.2 不可靠传输: UDP不保证数据包的顺序性、完整性和可靠性。数据包在传输过程中可能会丢失、重复或乱序到达。因此,UDP通讯需要应用层自行处理这些问题,如实现错误检测、数据重传等机制。 1.3 面向报文: UDP以报文为单位进行数据传输,每个报文都是独立的。这种面向报文的特性使得UDP能够保持数据的完整性,并且便于进行错误检测和处理。 1.4 高效性: UDP的头部结构非常简单,只包含必要的字段,如源端口、目的端口、数据长度和校验和。这种简洁的头部设计使得UDP在处理数据包时更加高效,减少了网络延迟。 1.5 实时性: UDP通讯具有较快的传输速度,适用于对实时性要求较高的应用场景,如视频通话、在线游戏等。在这些场景中,即使数据包偶尔丢失或延迟,也不会对整体功能产生严重影响。 二、准备软件环境 “凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。 2.1 Luatools工具 要想烧录AT固件到4G模组中,需要用到强大的调试工具:Luatools; Luatools工具集具备以下几大核心功能: 一键获取最新固件:自动连接服务器,轻松下载最新的模组固件。 固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中。 串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能。 串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求。 Luatools下载之后,无需安装,解压到你的硬盘,点击Luatools_v3.exe运行,出现如下界面,就代表Luatools安装成功了: 2.2 烧录代码 首先要说明一点:脚本代码,要和固件的LuatOS-SoC_V1112_EC618_FULL.soc文件一起烧录。 整体压缩文件:内含有文件一:Core固件和文件二:UDP-UART脚本文件,如图所示。 2.2.1 找到烧录的固件文件 官网下载,底层core下载地址:LuatOS底层core注:本demo使用如图所示固件 2.2.4 正确连接电脑和4G模组电路板 使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线; 2.2.5 识别4G模组的boot引脚 在下载之前,要用模组的boot引脚触发下载,也就是说,要把4G模组的boot引脚拉到1.8v,或者直接把boot引脚和VDD_EXT引脚相连。我们要在按下BOOT按键时让模块开机,就可以进入下载模式了。 具体到Air780E开发板, 当我们模块没开机时,按着BOOT键然后长按POW开机。 当我们模块开机时,按着BOOT键然后点按重启键即可。 2.2.6 识别电脑的正确端口 判断是否进入BOOT模式:-模块上电,此时在电脑的设备管理器中,查看串口设备,如下图: -进入boot下载模式,如下图所示: -这时候,硬件连接上就绪状态,恭喜你,可以进行烧录了! 2.2.7 新建项目 首先,确保你的Luatools的版本大于或者等于3.0.6版本. 在Luatools的左上角上有版本显示的,如图所示: Luatools版本没问题的话,就点击Luatools右上角的“项目管理测试”按钮,如下图所示: 这时会弹出项目管理和烧录管理的对话框,如下图: 2.2.8 开始烧录 选择780E板子对应的底层core和刚改的main.lua脚本文件。下载到板子中。 点击下载后,我们需要进入boot模式才能正常下载。 2.3 TCP/UDPweb测试工具 为了方便测试,提供了免费的不可商用的TCP/UDPweb测试工具:TCP/UDPweb工具(luatos.com) 详细使用说明参考:TCP/UDPweb测试工具使用说明。 2.4 PC端串口工具 LLCOM的下载链接:LLCOM,详细使用说明可以直接参考下载网站。 串口接线方式: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. 2.4.1 LLCOM工具设置:初始配置 2.4.2 数据发送前的配置 三、UDP-UART透传功能实现的概述 本文教你怎么使用luatos脚本语言,就可以让4G模组连接上一个UDP服务器,并且模组和服务器之间实现数据的双向传输! 3.1 本教程实现的功能定义 通过网页端启动一个UDP服务器; 4G模组插卡开机后,连接上UDP服务器; 4G模组向UDP服务器发送"UDPCONNECT",服务器可以收到数据并且在网页端显示; UDP服务器网页端向4G模组发送datafromUDPserver,4G模组可以收到数据并且通过串口输出显示; 3.2核心脚本代码详解 3.2.1 串口初始化 本文示例:串口使用MAIN_UART(uart1) 3.2.2 数据接收回调:搭建响应桥梁 这里使用uart.rx接口,和以zbuff的方式存储从uart1外部串口收到的数据--收取数据会触发回调,这里的"receive"是固定值不要修改。 3.2.3 UDP网络配置:铺就数据通道 3.2.4 UDP至串口透传:数据无缝流转 3.2.5 串口至UDP反透传:信息双向传递 3.3 成果演示与深度解析: 3.3.1 成果运行精彩呈现 3.3.2完整实例深度剖析 四、总结 UDP-UART汇总: UDP(用户数据报协议)是一种无连接的传输层协议,它提供不可靠的服务,不保证数据包的顺序、完整性或正确性,但具有较低的时延和开销。UDP常用于需要快速传输且对丢包不太敏感的应用,如实时音视频、在线游戏等。 UART(通用异步收发传输器)是一种串行通信协议,用于在计算机和其他设备之间传输数据。UART通信是异步的,意味着每个数据包的发送和接收是独立的,不需要时钟信号来同步。UART通信通常用于低速设备之间的连接,如微控制器、传感器等。 将UDP与UART结合起来,通常是在嵌入式系统或物联网(IoT)应用中,需要将设备上的数据通过网络传输到远程服务器或其他设备时。在这种情况下,UART可能用于设备内部的串行通信,而UDP则用于设备之间的网络通信。例如,一个基于微控制器的设备可能通过UART接口收集传感器数据,然后通过UDP协议将这些数据发送到远程服务器进行分析或存储。 需要注意的是,UDP和UART是不同层次的协议,UDP位于传输层,而UART位于物理层和数据链路层(在某些上下文中,可能被视为一种简单的通信接口)。它们各自在其层次上发挥作用,但可以在某些应用场景中结合使用以实现设备到网络的通信。 五、常见问题 5.1 UDP是否支持单向/双向认证? UDP本身不直接支持单向或双向认证。UDP是一种无连接的协议,主要用于实时应用,如IP电话和视频会议,它不保证数据的可靠交付。虽然UDP本身不提供认证功能,但可以在应用层或通过网络设备实现用户认证。这种认证可以在连接建立的起始阶段进行,并且可以通过多种方式实现,包括单向认证(如客户端向服务器提供认证信息)和双向认证(双方相互验证身份)。具体实现方式取决于应用场景和需求。 六、扩展 6.1 关于TCP和UDP TCP(TransmissionControlProtocol,传输控制协议)和UDP(UserDatagramProtocol,用户数据报协议)都是网络层之上的传输层协议,它们在网络通讯中扮演着重要的角色,但有着显著的区别。以下是TCP和UDP的简化对比: 6.2 连接性: TCP:面向连接。在数据传输之前,需要先建立连接(三次握手),确保数据传输的可靠性。 UDP:无连接。数据传输前不需要建立连接,直接发送数据包。 6.3 可靠性: TCP:提供可靠的传输服务。通过确认应答、超时重传、错误校验等机制,确保数据按顺序、无错误地传输。 UDP:不保证数据的可靠性。数据包可能会丢失、重复或乱序到达。 6.4 速度: TCP:由于需要建立连接和进行各种可靠性检查,TCP的传输速度相对较慢。 UDP:没有连接建立和可靠性检查的开销,UDP的传输速度通常更快。 6.5 应用场景: TCP:适用于需要可靠传输的应用场景,如网页浏览、文件传输等。 UDP:适用于对实时性要求较高、但对数据可靠性要求不高的应用场景,如视频流、音频流、在线游戏等。 6.6 流量控制: TCP:具有流量控制和拥塞控制机制,能够根据网络状况调整数据传输速率。 UDP:没有流量控制和拥塞控制机制,数据发送速率完全取决于应用程序。 6.7 头部开销: TCP:头部开销较大,包含源端口、目的端口、序列号、确认号、窗口大小等多个字段。 UDP:头部开销较小,仅包含源端口、目的端口、长度和校验和等字段。 今天就分享到这里了!