热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mqtt串口_合宙Luat2G/4G系列模块Lua版本串口功能汇总

1硬件概述本文将描述Air系列模块(2G和4G模块)Lua版本上通用串口、调试串口、调试串口、USB口的特性和使用方法,先看一张对比图:若无特别说明,下文中描述的串口包括通用串口、

《mqtt 串口_合宙Luat 2G/4G系列模块Lua版本串口功能汇总》

1

硬件概述

本文将描述Air系列模块(2G和4G模块)Lua版本上通用串口、调试串口、调试串口、USB口的特性和使用方法,先看一张对比图:

《mqtt 串口_合宙Luat 2G/4G系列模块Lua版本串口功能汇总》

若无特别说明,下文中描述的串口包括通用串口、调试串口、USB口三种,描述的串口通信的对端设备称作MCU。

2

应用层数据收发原理

注意:默认状态下,在合适的时间点(此时间点不可预知),系统会自动进入休眠状态;串口数据收发之前,必须通过pm.wake(…)接口使系统持续处于唤醒状态,才能保证收发功能正常;收发结束后,可以通过pm.sleep(…)接口允许系统自动休眠。

2.1   数据接收

在core中的应用层,有一个1460字节的缓冲区,串口驱动接收到的数据插入此缓冲区;脚本有轮询和中断两种方式,通过uart.read(…)接口读取缓冲区中的数据;

需要注意如下两点:

1)脚本读取的速度要大于数据插入的速度,否则会造成缓冲区溢出,数据出错;

2)MCU一次性发送给模块的数据,调用uart.read接口,并不一定能够一次性读取完整,必须使用“循环读取数据”+“数据拼接判断完整性”的方案来处理;例如MCU一次性发送1460字节的数据,模块使用轮询或者中断第一次读取数据时,缓冲器里面可能才接收到10字节的数据。

2.1.1  uart.read接口详解

uart.read(id, format)

— 读取串口数据(此接口不会阻塞,立即返回)

— @number id 串口ID

— @string or number format 读取串口数据的格式,有如下几种

— number类型的数字:表示读取指定长度字节的数据

—     如果缓冲区中没有数据,则返回空字符串,返回值为string类型

—     如果缓冲区中的数据长度小于等于要读取的数据长度,则返回缓冲区中的所有数据,返回值为string类型

—     如果缓冲区中的数据长度大于要读取的数据长度,则返回要读取的长度的数据,返回值为string类型

— string类型的*l:  表示读取到换行符\n

—     如果缓冲区中没有数据,则返回空字符串,返回值为string类型

—     如果缓冲区中的数据没有\n,则返回缓冲区中的所有数据,返回值为string类型

—     如果缓冲区中的数据有\n,则返回到\n结束的所有数据(包括\n),返回值为string类型

— string类型的*n:  表示读取整型数据

—     如果缓冲区中没有数据,则返回0,返回值为number类型

—     如果缓冲区中的第一个字节的数据不是+、-、数字,则返回0,返回值为number类型

—     如果缓冲区中的前几个字节满足整型数据格式[+-]%d+,则按照最长匹配返回数据,返回值为number类型

— string类型的*s:  表示读取到空格字符

—     如果缓冲区中没有数据,则返回空字符串,返回值为string类型

—     如果缓冲区中的数据没有空格,则返回缓冲区中的所有数据,返回值为string类型

—     如果缓冲区中的数据有空格,则返回到空格结束的所有数据(不包括空格),返回值为string类型

2.1.2   轮询方式读取数据

轮询方式比较简单,脚本定时调用uart.read接口读取数据、拼接数据、检查数据完整性、处理数据即可。

详细代码参考uart的demo。

2.1.3   中断方式读取数据

中断方式处理逻辑如下:

1)脚本调用uart.on(id, “receive”, intFnc)注册中断处理函数intFnc;

2)脚本接收到core中产生的数据中断消息后,执行intFnc;

3)脚本在intFnc中循环调用uart.read接口读取数据、拼接数据、检查数据完整性、处理数据,直至没有数据可读;

什么情况下,core中才会产生数据中断消息呢?

当缓冲区为空时,收到数据才会插入缓冲区,然后产生数据中断消息;如果缓冲区不为空,收到数据时仅仅插入缓冲区,并不会产生数据中断消息。所以第3步要把缓冲区中的数据读完,这样才能保证以后收到的数据,可以产生中断消息,脚本可以及时处理。

详细代码参考uart的demo。

2.2  数据发送

脚本使用uart.write接口发送数据,一次性最多支持发送1460字节的数据;

可以通过异步消息来通知脚本数据已经发送成功,参考uart的demo。

3

相关常见问题

3.1  api文档在哪里

http://wiki.openluat.com/doc/luatApi/#uart

代码详见uart的demo。

3.2  休眠、唤醒和功耗控制

默认状态下,在合适的时间点(此时间点不可预知),系统会自动进入休眠状态;串口数据收发之前,必须通过pm.wake(…)接口使系统持续处于唤醒状态,才能保证收发功能正常;收发结束后,可以通过pm.sleep(…)接口允许系统自动休眠。

如果项目不要求低功耗,为了编程方便,可以调用pm.wake使系统一直处于唤醒状态。

如果项目要求低功耗,除了动态控制休眠唤醒外,还要使用uart.close关闭串口,这样才能完全消除串口功能的功耗。

3.3  2G模块的调试串口可以用来做普通数据传输使用吗

可以用来做普通数据传输,但是不建议使用,原因有如下两点:

1)调试串口数据传输不稳定,很容易丢失数据;必须在应用层之上增加重试和容错机制。

2)调试串口主要用于烧写固件和输出日志,有一套专用协议,如果要用做普通数据传输,必须按照这套协议开发对端程序。

有需要的话,参考hostUart的demo。

3.4  4G模块的USB口可以和PC之间进行数据传输吗

USB在PC端映射出的ASR Modem Device AT口可以和PC进行数据传输。

代码详见usbdata的demo。

3.5  RS485通信的收发方向控制

可使用uart.set_rs485_oe接口配置此功能。请参考:

http://wiki.openluat.com/doc/luatApi/#uartset_rs485_oe

3.6   串口无法数据通信

检查一下串口电平是否匹配,软件上是否进入了休眠。

以上就是合宙Luat 2G/4G模块Lua版本的通用串口、调试串口、USB口的特性和使用方法,如有疑问或建议,请留言给我们吧~

《mqtt 串口_合宙Luat 2G/4G系列模块Lua版本串口功能汇总》

《mqtt 串口_合宙Luat 2G/4G系列模块Lua版本串口功能汇总》

更多福利,敬请期待

《mqtt 串口_合宙Luat 2G/4G系列模块Lua版本串口功能汇总》

Luat相关教程文章: Luat系列官方教程1:下载调试工具LuaTools的使用指南 Luat系列官方教程2:控制LED小灯

Luat系列官方教程3:Luat程序的基本时序

Luat系列官方教程4:学会使用并看懂Luatools的trace信息

Luat系列官方教程5: Socket代码详解 Luat系列官方教程6: MQTT代码详解

Luat系列官方教程7:串口收发

Luat小企业系列原创文章:

小企业怎么寻找生意的蓝海?

小企业2B新产品怎样定价?

小企业的2B业务怎么获客(一)?

合宙Luat将陆续推出小企业系列原创作品,敬请关注!

《mqtt 串口_合宙Luat 2G/4G系列模块Lua版本串口功能汇总》

《mqtt 串口_合宙Luat 2G/4G系列模块Lua版本串口功能汇总》

 ▼ Luat热文推荐 ▼

>小企业怎么寻找生意的蓝海?

>NB-IoT,未来的物联网脊梁,还是扶不起的阿斗?

>2019年最值得工作和落户的几个城市,有你的家乡吗?

>为什么说『 物联网通信模块业务』没有前途?

>4G模块价格进入2位数时代,合宙Air720模块正式量产发货

>NB向左,GPRS向右,谁会率先突破百亿连接数?

>GPRS模块为什么会低至十几元?我所经历的物联网模块国产化过程


推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
author-avatar
徐毛毛的大猫儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有