Air202入坑指南3---MQTT
下图是我阿里云上面部署的MQTT的服务器EMQX.
下面进行尝试把Air202的数据上传到这个服务器里面。
首先使用的是提供的Demo作为主要程序,主要需要修改的是IP地址以及端口以及用户名和密码。
--- 模块功能:MQTT客户端处理框架
-- @author openLuat
-- @module mqtt.mqttTask
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.28module(..., package.seeall)require "misc"
require "mqtt"
require "mqttOutMsg"
require "mqttInMsg"local ready = false--[[
TCP协议发送数据时,数据发送出去之后,必须等到服务器返回TCP ACK包,才认为数据发送成功,在网络较差的情况下,这种ACK确认就会导致发送过程很慢。
从而导致用户程序后续的AT处理逻辑一直处于等待状态。例如执行AT+CIPSEND动作发送一包数据后,接下来要执行AT+QTTS播放TTS,但是CIPSEND一直等了1分钟才返回SEND OK,
这时AT+QTTS就会一直等待1分钟,可能不是程序中想看到的。
此时就可以设置为快发模式,AT+CIPSEND可以立即返回一个结果,此结果表示“数据是否被缓冲区所保存”,从而不影响后续其他AT指令的及时执行AT版本可以通过AT+CIPQSEND指令、Luat版本可以通过socket.setSendMode接口设置发送模式为快发或者慢发快发模式下,在core中有一个1460*7=10220字节的缓冲区,要发送的数据首先存储到此缓冲区,然后在core中自动循环发送。
如果此缓冲区已满,则AT+CIPSEND会直接返回ERROR,socket:send接口也会直接返回失败同时满足如下几种条件,适合使用快发模式:
1. 发送的数据量小,并且发送频率低,数据发送速度远远不会超过core中的10220字节大小;没有精确地判断标准,可以简单的按照3分钟不超过10220字节来判断;曾经有一个不适合快发模式的例子如下:用户使用Luat版本的http上传一个几十K的文件,设置了快发模式,导致一直发送失败,因为循环的向core中的缓冲区插入数据,插入数据的速度远远超过发送数据到服务器的速度,所以很快就导致缓冲区慢,再插入数据时,就直接返回失败
2. 对每次发送的数据,不需要确认发送结果
3. 数据发送功能不能影响其他功能的及时响应
]]
--socket.setSendMode(1)--- MQTT连接是否处于激活状态
-- @return 激活状态返回true,非激活状态返回false
-- @usage mqttTask.isReady()
function isReady()return ready
end--启动MQTT客户端任务
sys.taskInit(function()local retryConnectCnt = 0while true doif not socket.isReady() thenretryConnectCnt = 0--等待网络环境准备就绪,超时时间是5分钟sys.waitUntil("IP_READY_IND", 300000)endif socket.isReady() thenlocal imei = misc.getImei()--创建一个MQTT客户端local mqttClient = mqtt.client(imei, 600, "admin", "public")--阻塞执行MQTT CONNECT动作,直至成功--如果使用ssl连接,打开mqttClient:connect("lbsmqtt.airm2m.com",1884,"tcp_ssl",{caCert="ca.crt"}),根据自己的需求配置--mqttClient:connect("lbsmqtt.airm2m.com",1884,"tcp_ssl",{caCert="ca.crt"})if mqttClient:connect("xx.xx.xx.xx", 1883, "tcp") then [[--此处需要修改为自己的IP]]retryConnectCnt = 0ready = true--订阅主题if mqttClient:subscribe({["/qos0topic"] = 0, ["/中文qos1topic"] = 1}) thenmqttOutMsg.init()--循环处理接收和发送的数据while true doif not mqttInMsg.proc(mqttClient) thenlog.error("mqttTask.mqttInMsg.proc error")breakendif not mqttOutMsg.proc(mqttClient) thenlog.error("mqttTask.mqttOutMsg proc error")breakendendmqttOutMsg.unInit()endready = falseelseretryConnectCnt = retryConnectCnt + 1end--断开MQTT连接mqttClient:disconnect()if retryConnectCnt >= 5 thenlink.shut()retryConnectCnt = 0endsys.wait(5000)else--进入飞行模式,20秒之后,退出飞行模式net.switchFly(true)sys.wait(20000)net.switchFly(false)endendend
)
简而言之就是直接跑例程,由上图可以看到当订阅了主题之后Air202就会发送对应的数据上来了。
Air202入坑指南3---MQTT相关推荐
- Air202入坑指南4---UART2(简单使用)
Air202入坑指南4-UART2 下面的代码就是这个串口的简单使用的代码,可见波特率是115200,8N1.其他就是定义了一个信号量UART2_RECEIVE,这个信号量作为接收到信号之后串口怎么处 ...
- 发布开源框架到CocoaPods入坑指南
个人原文博客地址: 发布开源框架到CocoaPods入坑指南 在开发过程中一定会用到一些第三方框架, 只要安装了CocoaPods, 然后通过pod install命令, 就可以集成框架到项目中了 可 ...
- python这个软件学会能做什么工作-学会Python真的有高收入?盯,请查收这份入坑指南...
学会Python真的有高收入?盯,请查收这份入坑指南 2018-10-10 20:51:00 567点赞 6312收藏 186评论 小编注:想获得更多专属福利吗?金币加成.尊享众测.专属勋章.达人福利 ...
- python web-python web入坑指南
原标题:python web入坑指南 Invest regularly in your knowledge portfolio. Make learning a habit. 自学python web ...
- 旧android 4 平板,如今的安卓平板值不值得买:小米平板4入坑指南
如今的安卓平板值不值得买:小米平板4入坑指南 2018-08-04 07:30:40 29点赞 25收藏 42评论 购买理由 三年前入坑小米平板2,在当年的安卓平板环境里,小米平板还是一款十分值得购买 ...
- api 微信内置浏览器js_多端开发框架uni-app入坑指南,一套代码适用微信、头条等小程序...
前言 hello 小伙伴们,现在我已经正式入坑 uni-app 了.uni-app 已经发布好几个月了,期间也是踩坑无数,但是官方秉承着不抛弃不放弃的精神,积极解决开发者的各种简单的.复杂的问题,在此 ...
- 微信小程序继续入坑指南
微信小程序继续入坑指南 wxml 类似于html 感觉和ejs灰常的相似 数据绑定 js Page({data: {message: "hello world"} }) wxml ...
- Rust 入坑指南:鳞次栉比 | CSDN 博文精选
作者 | Jackyzhe 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉 ...
- uniapp调用c语言方法,uni-app 入坑指南-web开发
编辑推荐: 本文重点介绍了 uni-app 入坑指南,方便大家更好的了解 uni-app 本篇只讲述 uni-app,不与其他类似框架进行对比 本文来自于博客园,由火龙果软件Alice编辑推荐. 什么 ...
最新文章
- Python2和Python3中raise Exception
- JZOJ 5377. 【NOIP2017提高A组模拟9.19】开拓
- 迁移学习(transfer learning)与finetune的关系?【finetune只是transfer learning的一种手段】
- MySQL Encryption and Compression Functions(加密)
- FinalData磁盘文件恢复工具(绿色破解版)
- SpringBoot + Redis + Shiro 实现权限管理
- idea,Androidstudio快捷键大全,抽取成员变量快捷键
- Spring Cloud学习系列第三篇【服务容错保护】
- 喜报:毒霸成功通过VB100认证
- 你有必要不沾计算机一段时间英语,2014新人教版八年级英语下册第一单元必背词组及句子...
- 增长黑客——如何低成本实现爆发式成长
- 论文笔记:SAITS: SELF-ATTENTION-BASED IMPUTATION FOR TIMESERIES
- 解决 eclipse 上 Keystore was tampered with, or password was incorrect
- 网页炫酷特效拿来即可用(看板娘鼠标点击炫酷登录页面樱花特效生日祝福彩虹屁)
- 用友和金蝶ERP产品私有云部署方案
- VMware安装WinXP蓝屏及激活
- 一站式在线医疗解决方案,即构音视频技术助建互联网医疗
- 升华思想境界,走出博士的专家路线
- linux驱动开发篇(三)—— 总线设备驱动模型
- Ubuntu系统下生成Android app系统签名
热门文章
- Windows系统安装搭建ios开发环境
- 机械臂示教轨迹参数化方法 DMP, Dynamic Movement Primitive (一)
- sns是什么?可以做什么?
- Linux下 wchar_t 与char 转换
- 实训1_获取产业数据并存储_预处理与简单分析
- Android7.0 8.0进程保活与拉活的实现方式
- 随机抽奖转盘微信小程序项目源码
- 2.1.15	行首确保不是标点符号
- numeric_limits
- 网易2018校园招聘编程题真题集合3字符串碎片