tag 标签: 通讯模组

相关帖子
相关博文
  • 2025-6-13 17:57
    0 个评论
    如何在不同应用场景中高效设计Air780EPM的ADC电路?本文结合实践案例,深入讲解传感器接口设计、信号调理电路搭建及抗干扰措施,提供可复用的设计模板与优化建议,降低开发难度。 最近有工程师朋友问: Air780EPM的ADC精度怎么样,想节约一颗外挂ADC… 今天也跟大家一起分享下相关内容。在设计ADC硬件电路之前,请务必先查看LuatOS二次开发ADC相关库函数的描述。 最新ADC库函数详见:https://docs.openluat.com/osapi/core/adc/ 我们先回顾一段核心内容: Air780EPM共有4路外部ADC硬件通道,其通常的作用是用来测试电压数值。 ADC硬件连接被测电压的方式有两个: 当被测电压低于3.6V时,被测电压可以直连ADC; 当被测电压大于3.6V时,被测电压需先经过外部电阻分压,且经过分压后接在ADC的电压值需小于1.5V。 以上ADC的两种硬件连接方式,对应不同的软件设置,下文会提到。 除4路外部ADC通道外,Air780EPM还有2路内部ADC通道: 一路是CH_CPU,用来测量Air780EPM的CPU温度; 一路是CH_VBAT,用来测量Air780EPM的vbat电压(vbat,或者写为VBAT,也就是Air780EPM工作时的供电电压,对应Air780EPM的PIN42/PIN43)。 接下来,将按照大家在实际应用中常见的场景,分类描述如何设计ADC硬件电路。 一、测量Air780EPM的VBAT电压 用ADC测量VBAT电压时,不需要外接任何硬件电路。 Air780EPM内部有一路CH_VBAT: 专门用于测量Air780EPM的VBAT电压,测量范围就是Air780EPM可以正常工作的VBAT供电范围(3.3V-4.3V)。 可以使用如下代码读取VBAT电压: 二、测量低于3.6V的电压时 我们这里讨论的是使用Air780EPM的4路外部ADC,测量低于3.6V电压时的场景。 为社么要提到3.6V这个数字? 如本文最前面所说,当被测电压低于3.6V时,被测电压可以直连ADC,不需要外接电路。 是的,不需要外接电路的意思就是——被测电压可以直接接在ADC上,不做任何处理。但是,需要保证被测电压不高于3.6V。 相应的,软件应该这么做: 核心就是,软件在低于1.5V和大于1.5V且小于3.6V时的处理时不一样的。 如果你觉得比较懵,很正常。你需要先查看LuatOS二次开发ADC相关库函数的描述,详见: https://docs.openluat.com/osapi/core/adc/ 或者,你就把握一个原则: 当被测电压低于3.6V时,直连ADC就可以,剩下的交给软件同事去负责。 三、 测量高于3.6V的电压时 我们这里说的还是使用Air780EPM的4路外部ADC,测量高于3.6V电压时的场景。 当被测电压高于3.6V,使用4路外部ADC测量:必须将外部电压使用电阻分压,使挂在ADC上的电压低于1.5V。 那么,分压电阻怎么选择呢? 首先,取决于被测电压的值,测量最大电压5V和最大电压12V时的分压电阻肯定是不一样的; 其次,电阻一定要使用1%精度,这样才能尽可能的使分压比符合要求; 再次,可以在ADC输入处增加1个滤波电容,抑制高频噪声,避免ADC读数波动。 以上都是经验之谈,现在我们以被测电压为5V时来举例说明: 相应的,假设通过ADC测得的电压值是1.47V,则可以换算出来被测电压值为: 1.47V/0.294=5V 需要特别指出的是,即便使用MΩ级别的电阻,系统也会存在固定的功耗浪费: 总电流: I=5V/(2.4MΩ+1.0MΩ)≈1.47μA 总功耗: P=5V×1.47μA=7.35μW 功耗极低,适合电池供电的低功耗场景。 今天的内容就分享到这里了~
  • 2025-6-13 17:44
    0 个评论
    想要高效利用日志却不知如何设置等级?本实战宝典将拆解日志分级的底层逻辑,演示主流框架(如Log4j、Slf4j)的配置技巧,并分享动态调整与监控策略,助你快速实现科学的日志输出控制! 如何控制日志的输出等级?很多系统信息不需要显示… LuatOS系统使用log库进行日志输出,通过log库可以输出不同等级的用户日志。 最新log日志库函数手册详见:https://docs.openluat.com/osapi/core/log/ 一、LuatOS日志输出简介 LuatOS的log库具有基本的日志输出功能,通过灵活运用日志功能,开发者可以随时查看变量的数值或跟踪程序运行的逻辑顺序,非常适合嵌入式开发过程中用于调试,同时也便于长时间跟踪运行和排查问题。 1.1 LuatOS日志等级 LuatOS系统日志级别从低到高依次为:debug info warn error debug: 调试内容输出; info: 信息输出; warn: 为警告输出; error: 为错误输出。 系统默认日志等级是debug,可以输出debug及以上等级的日志。 1.2 设置日志输出等级 我们使用log.setLevel(level)函数设置日志输出等级: SILENT :禁止日志有任何内容输出; DEBUG: 输出debug级及以上级别的日志; INFO: 输出info级及以上级别的日志; WARN: 输出warn级及以上级别的日志; ERROR: 输出error级的日志。 特别注意:只有日志等级大于或等于当前设置的级别时,该日志才会被输出。 二、Air8101日志输出示例 日志输出demo通过输出不同等级日志,开发者可以快速了解日志功能的使用,适用于当前支持LuatOS开发的所有型号,源码通用。 下文以Air8101开发板为例,如果手中是其他型号,将链接中的型号更新为对应型号即可查看相关内容。 最新源码及实操教程详见: https://docs.openluat.com/air8101/luatos/app/common/log/ 示例代码如下: 运行结果截图: 今天的内容就分享到这里了~
  • 2025-6-13 17:29
    0 个评论
    定位等待终结者登场!AGPS功能开源让3秒定位成为标配,开发者可自由调用核心技术,打造个性化定位方案。从智能出行到精准物流,这场技术革新正重新定义GPS应用的边界,效率狂飙不止! AGPS (Assisted GPS,辅助全球卫星定位系统)通过移动网络预先获取卫星星历、时间等辅助数据,可大幅缩短GPS首次定位时间。 本文将以集成了4G、Wi-Fi、BLE、GNSS(全球导航卫星系统)等多功能的高性能工业引擎—— Air8000核心板 为例,带你了解AGPS功能及其基本使用方法,可根据实际需求灵活扩展应用。 一、定位相关基础知识 1.1 GPS定位 GPS(Global Positioning System)即全球定位系统,它是由美国研发的一种定位方式。 其特点是不需要SIM卡,不需要连接网络,只要在户外,基本上就能随时随地的准确定位。但是GPS启动后搜索卫星的时间比较多,一般需要2分钟左右(俗称冷启动)。 1)定位原理:接收机接收GPS卫星广播,通过解析可见GPS卫星的位置、距离等信息以及相应算法得出自己的位置信息。 2)主要优势:定位精度高,只要能接收到四颗卫星的定位信号,就可以进行定位。 3)主要缺点:GPS受天气和位置的影响较大。当遇到天气不佳的时候、或者处于高架桥/树荫的下面,或者在高楼的旁边角落、地下车库、室内或露天的下层车库(或者简单地说当见不到天空的时候),GPS的定位就会受到相当大的影响,甚至无法进行定位服务。 4)定位精度:Air8000定位精度2m。 1.2 AGPS辅助定位 AGPS是辅助GPS定位的一种方法。AGPS和GPS是一样的,只是加上网络的辅助而已,定位时必须有GPS模块存在。 A-GPS定位用于加快定位速度: 由于GPS冷启动时,搜星速度很慢(需要把头上二十多颗卫星挨个搜一遍),通常需要大约2分钟才能搜到,定位模组冷启动35秒左右就可以定位。 增加了AGPS定位之后,可以利用基站大体定位下你所在的位置,然后通过网络将这个位置发送到服务器,服务器根据这个位置将此时经过你头顶的卫星参数(哪几颗、频率、位置、仰角等信息)反馈给你的定位设备,设备上的 GPS就可以很有目的的去搜索卫星—— 此时你的搜星速度大大提高,几秒钟就可以定位。 1)定位原理:接收机接收GPS星历文件,通过解析可见GPS卫星的位置、距离等信息以及相应算法得出自己的位置信息。 2)主要优势: 搜星定位快,不管是冷启动、热启动,秒定;有效减少设备的电量消耗;缓解弱GPS信号情况下无法定位或精度降低的问题;对移动设备的计算能力要求更低。 3)主要缺点:必须联网,如果你的设备不能上网,或是停机了身边又没有Wi-Fi,是没法应用AGPS达到秒定效果的;必须有AGPS位置服务器的支持;与GPS一样,仍无法完美解决室内(室内无法接收GPS信号)定位的问题。 4)定位精定: Air8000定位精度2m。 二、Air8000核心板AGPS示例 Air8000示例持续更新中,本文将演示使用AGPS实现快速定位功能的相关要点。 最新源码及实操教程详见: https://docs.openluat.com/air8000/luatos/app/gnss/agps/ 2.1 实现流程 2.2 实现原理 Air8000通过蜂窝基站或Wi-Fi定位获取粗略位置坐标,再结合网络下发的卫星辅助数据(星历),显著缩短卫星信号搜索时间并加速定位解算,最终实现快速精准定位。 注意:GPS星历文件能保持4小时,定位成功后会自动更新星历。 由上面原理可知Air8000使用AGPS功能需要访问两个服务器,基站定位服务器和星历下载服务器。如果使用的是专网卡,需要将下面两个服务器配置在SIM卡的白名单中。 基站定位服务器 : bs.openluat.com 星历下载服务器:download.openluat.com 基站定位使用教程以及基站定位收费情况,可以参考:https://docs.openluat.com/air8000t/luatos/app/common/lbswifi/ 2.3 主要硬件 Air8000核心板套件,支持数据传输的USB数据线,Win10及其以上PC电脑。 2.4 示例代码 基于LuatOS系统的Air8000核心板GPS定位及AGPS功能演示代码,包含main.lua和agps_icoe.lua两个文件。 1)main.lua 文件代码用于打开GPS,配置GPS基本参数,启用AGPS辅助定位功能。 2)agps_icoe.lua 文件代码用于实现AGPS辅助定位功能。 2.5 运行结果 使用LuaTools烧录运行,通过日志搜索功能可以看到: 没有使用AGPS辅助定位,需要31秒左右才能定位成功;使用AGPS后,注入星历数据后3秒左右就能定位成功。 今天的内容就分享到这里了~
  • 2025-6-13 17:12
    0 个评论
    面对繁杂的嵌入式开发技术,如何快速入门?本指南聚焦LuatOS,通过简明易懂的教程,帮你快速搭建开发环境、掌握基础语法,并提供可复用的代码示例,让你在最短时间内实现第一个嵌入式应用。 学习LuatOS的主要方法之一是“运行各个功能模块的demo代码”,本期特别分享——LuatOS编程起步相关内容。 注意:本文档的读者,默认都已经了解初步的Lua语法。 如果不懂Lua语法的话,可以参考下方链接:http://docs.openluat.com/air780epm/common/lua_lesson/ 一、底层固件怎么启动LuatOS脚本 1.1 脚本入口执行文件 简单来说,底层固件首先就是要找到 main.lua 这个文件,然后启动它。所有的其他功能,都需要在main.lua发起。 如下图Air780EPM模组demo的Camera示例: 1.2 LuatOS启动脚本的详细流程 进一步详细的说,LuatOS的底层固件启动脚本的流程如下: 启动底层core:系统上电或者复位后,底层固件(core)首先启动,进行硬件初始化、内存分配、文件系统挂载等系统底层的基础操作。 加载Lua虚拟机:底层固件加载Lua虚拟机,为执行 Lua脚本提供运行环境; 加载main.lua:自动查找并加载存储在设备上的主脚本main.lua; 执行脚本代码:按顺序执行main.lua脚本中的代码,通常包括任务创建(如 sys.taskInit)、功能初始化等。 进入任务调度:脚本最后通常调用sys.run(),进入事件循环和多任务调度,正式运行用户逻辑。 1.3 怎么把固件和脚本烧录到硬件: 使用官方LuatTools,将底层固件和用户Lua脚本烧录到合宙模组或者引擎硬件;上电后,底层固件自动完成上述启动和脚本加载流程,无需手动干预。 Luatools下载及使用参见:https://docs.openluat.com/air780epm/common/Luatools/ 二、main.lua需要包含哪些部分? 2.1 项目信息声明 在main.lua的文件开头,需要声明项目名和版本号,便于管理和调试。后续的远程升级,也需要用到项目名和版本号。 例如: 2.2 系统库和必要模块加载 在main.lua需要加载LuatOS的基础库和扩展库(如zbuff、onewire等),用来实现具体的业务逻辑。 例如: 截止至当前发文,LuatOS已提供 74个核心库和55个扩展库 。 最新LuatOS库函数开发手册详见:https://docs.openluat.com/osapi/ 2.3 至少启动一个任务 在main.lua里面,至少需要启动一个任务,否则这个main就无所事事,是一个没什么实际用处的主脚本了。 启动一个任务的方法,分为2个步骤: 创建一个函数,把要做的事情,放在这个函数里面使用。这个函数必须是无限循环的,防止很快结束生命,不妨把这个函数命名为task1()。 调用sys.taskInit(task1),启动这个函数,于是这个任务,就放在待运行的任务列表里面了。 2.4 初步理解sys.run() sys.run() 是一个无限循环的函数。 main.lua的最后一行,只能是sys.run(),代表sys.run() 接管了LuatOS的所有的执行调度工作。 如下图Air780EPM模组demo的LED示例: sys.run()是LuatOS的运行中枢,后续会详细介绍。 三、LuatOS脚本编程的核心要点 3.1 LuatOS实现的典型功能 LuatOS脚本是利用了Lua的语法,以及基于LuatOS 核心库和扩展库 提供的API,进行简便的编程,实现如下功能: 1)实现和云端服务器通信; 2)采集外设的数据,控制外设设备; 3)实现人机交互,包括图形交互和语音交互。 3.2 LuatOS的学习要点 要想写好LuatOS的软件,实现上述三个功能,除了逐渐掌握Lua的基本语法之外,还需要熟悉LuatOS的核心库和扩展库,这样才能开发出优质的基于LuatOS的物联网设备软件。 学习的主要方法有如下几个: 1)运行各个功能模块的demo代码; 2)阅读docs.openluat.com的教程文档; 3)遇到不懂问AI; 4)在QQ大群和微信大群进行技术交流。 3.3 一个典型的LuatOS实现 一个典型的LuatOS实现,包含main.lua入口文件和若干个功能模块文件。 这里以Air780EPM开发板的蜂鸣器示例代码为例,有两个脚本文件以及一个管脚描述json文件。 - Air780EPM蜂鸣器应用示例 - 1)main.lua文件 作用是启动一个任务,让蜂鸣器响一秒钟,再停顿一秒钟,如此往复。 2)airbuzzer.lua 封装了驱动蜂鸣器的功能实现。 3)pins_Air780EPM.json描述了本例使用到的管脚的功能,Air780EPM的26管脚,用作PWM4。 把上述几个文件,连同Air780EPM最新的固件版本,用LuaTools建立一个工程,烧录到Air780EPM开发板,就可以听到蜂鸣器的播放声音了。 在应用开发中,可根据实际需求灵活调整。 今天的内容就分享到这里了,欢迎感兴趣的朋友加技术交流群一起探讨。
  • 2025-6-9 14:06
    0 个评论
    面对智能硬件开发中复杂的GPIO配置挑战,LuatIO可视化工具带来革命性解决方案。只需通过简单的图形化拖拽操作,即可完成引脚功能定义与参数设置。该工具将底层代码抽象为可视化模块,大幅降低开发门槛,同时提升调试效率,让硬件开发像搭积木一样简单高效。 本文以 Air780EPM 为例,分享LuatIO工具相关内容。 最新资料详见: http://docs.openluat.com/air780epm/common/luatio/ 一、 LuatIO工具 Air780EPM共有38个GPIO,这38个GPIO又可以复用为各种各样的功能,如上表所示。 比如PIN66: 什么时候用作I2C0_SDA? 什么时候用作I2C1_SDA? 什么时候用作GPIO19? 什么时候用作PWM1? 默认功能是什么? 如何进行初始化配置? 如何在初始化之后进行动态的配置? …… LuatOS之前的做法是: 通过mcu.altfun()函数进行配置,这个函数非常晦涩难懂,因为不仅要涉及到Air780EPM所使用主芯片对应的PAD 脚,还要知晓该PAD脚所需配置复用功能的AltFunc顺序号,对初学者非常不友好。 基于此,我们设计了可视化GPIO配置工具 ——LuatIO 由此工具生成对应的"pins_$model.json"文件,结合API库函数pins动态配置,最后以脚本的形式下载到模组中,即可完成该模组型号的GPIO复用配置。 二、如何使用LuatIO配置GPIO GPIO配置的全过程,我们分为四部分进行说明: 2.1 LuatIO可视化GPIO配置工具 目前单独的LuatIO工具只是阶段性的存在,后续会集成到LuaTools中,一个工具入口即可完成尽可能多的功能。 1)下载安装LuatIO工具 最新LuatIO工具下载链接:http://docs.openluat.com/air780epm/common/luatio/ 注意:LuatIO工具仅支持Win10及之上Windows操作系统。 2)LuatIO界面说明 如上截图,其中: 左侧为GPIO复用功能配置选择栏,空白框内可以写该管脚相应的注释说明; 右侧为Air780EPM的管脚排列图,其中淡绿色部分为可以配置的GPIO管脚。 以Air780EPM开发板V1.3为例,根据其硬件实际使用情况配置后的截图如下: 2.2 生成pins_Air780EPM.json文件 1)点击保存: 2)命名"pins_Air780EPM": 注意事项: 文件名必须严格遵守pins_$model.json格式:pins_Air780EPM; Air780EPM中的“Air”为大小写组合,“EPM”必须为大写。 生成的pins_Air780EPM.json文件截图如下: 2.3 API库函数pins动态配置 请使用LuatIO可视化工具进行配置,你通常不需要使用这个功能; 本库的API属于高级用法,仅动态配置管脚时使用(LuatIO本来已经初始化好了,但在代码运行过程中需要对某个或某些GPIO的复用功能进行动态调整); pins是LuatOS核心库,在脚本代码中不需要require,可以直接使用。 关于pins的详细说明参见: http://docs.openluat.com/air780epm/luatos/api/core/pins/ 2.4 将pins_Air780EPM.json下载到模组 本小节我们只针对不需要“API库函数pins动态配置”的情况进行演示;即便需要的情况下,pins的使用方法跟其它API核心库函数没有区别。 1)以Air780EPM开发板V1.3出厂固件为例: 最新固件下载详见:https://gitee.com/openLuat/LuatOS-Air780EPM/tree/master/demo 2)pins_Air780EPM保存在json文件夹内: 3)下载到Air780EPM开发板V1.3中: 三、其他相关说明 3.1 Lua代码中,需要声明调用pins_Air780EPM.json文件吗? 回答:不需要。更详细的说明,参见资料中心函数描述。 pins.loadjson(path)函数详见:http://docs.openluat.com/air780epm/luatos/api/core/pins/ 注意: LuatIO工具(pins_$model.json)和API函数pins都支持主推型号,老型号都不再支持。 3.2 虽然该工具很方便,但我已经习惯了mcu.altfun()函数配置,还可以继续使用吗? 回答:不可以了。 Air780EPM底层固件从V2005开始,将只支持pins_Air780EPM.json 一种GPIO复用功能配置方式,之前的mcu.altfun()方式将不再继续支持!遇到动态配置的情况,可以结合API库函数pins进行操作。 也就是说,如果您使用Air780EPM底层固件V2004或之前的版本已经量产出货,后续您因某种原因需要远程升级基于V2005及其后续底层固件版本的软件时——您的脚本文件也需要通过pins_Air780EPM.json的方式,重新对GPIO复用功能进行配置,原来的mcu.altfun()配置方式将会失效。 3.3 为什么我在合宙的Docs文档网站里,还经常看到关于mcu.altfun()函数的出现? 回答:在整理了。mcu.altfun()的API库函数说明已经从Docs上撤掉,但确实还有非常多的其它文档说明仍然“保留”,我们可能要花一段时间才能完全"清除"。 3.4 LuatIO功能将来会集成到LuaTools中吗? 回答:一定会的。目前单独的LuatIO工具只是阶段性的存在,很快就会集成到LuaTools中,大家通过一个工具入口即可完成尽可能多的功能。 3.5 如果未进行pins_Air780EPM.json的配置,代码可以运行吗? 回答:可以运行,会以Air780EPM各GPIO的默认功能执行;如果所引用的GPIO复用功能跟默认功能不一致,代码就会无法执行。 今天的内容就分享到这里了~
相关资源