下图是我阿里云上面部署的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相关推荐

  1. Air202入坑指南4---UART2(简单使用)

    Air202入坑指南4-UART2 下面的代码就是这个串口的简单使用的代码,可见波特率是115200,8N1.其他就是定义了一个信号量UART2_RECEIVE,这个信号量作为接收到信号之后串口怎么处 ...

  2. 发布开源框架到CocoaPods入坑指南

    个人原文博客地址: 发布开源框架到CocoaPods入坑指南 在开发过程中一定会用到一些第三方框架, 只要安装了CocoaPods, 然后通过pod install命令, 就可以集成框架到项目中了 可 ...

  3. python这个软件学会能做什么工作-学会Python真的有高收入?盯,请查收这份入坑指南...

    学会Python真的有高收入?盯,请查收这份入坑指南 2018-10-10 20:51:00 567点赞 6312收藏 186评论 小编注:想获得更多专属福利吗?金币加成.尊享众测.专属勋章.达人福利 ...

  4. python web-python web入坑指南

    原标题:python web入坑指南 Invest regularly in your knowledge portfolio. Make learning a habit. 自学python web ...

  5. 旧android 4 平板,如今的安卓平板值不值得买:小米平板4入坑指南

    如今的安卓平板值不值得买:小米平板4入坑指南 2018-08-04 07:30:40 29点赞 25收藏 42评论 购买理由 三年前入坑小米平板2,在当年的安卓平板环境里,小米平板还是一款十分值得购买 ...

  6. api 微信内置浏览器js_多端开发框架uni-app入坑指南,一套代码适用微信、头条等小程序...

    前言 hello 小伙伴们,现在我已经正式入坑 uni-app 了.uni-app 已经发布好几个月了,期间也是踩坑无数,但是官方秉承着不抛弃不放弃的精神,积极解决开发者的各种简单的.复杂的问题,在此 ...

  7. 微信小程序继续入坑指南

    微信小程序继续入坑指南 wxml 类似于html 感觉和ejs灰常的相似 数据绑定 js Page({data: {message: "hello world"} }) wxml ...

  8. Rust 入坑指南:鳞次栉比 | CSDN 博文精选

    作者 | Jackyzhe 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 很久没有挖Rust的坑啦,今天来挖一些排列整齐的坑.没错,就是要介绍一些集合类型的数据类型."鳞次栉 ...

  9. uniapp调用c语言方法,uni-app 入坑指南-web开发

    编辑推荐: 本文重点介绍了 uni-app 入坑指南,方便大家更好的了解 uni-app 本篇只讲述 uni-app,不与其他类似框架进行对比 本文来自于博客园,由火龙果软件Alice编辑推荐. 什么 ...

最新文章

  1. Python2和Python3中raise Exception
  2. JZOJ 5377. 【NOIP2017提高A组模拟9.19】开拓
  3. 迁移学习(transfer learning)与finetune的关系?【finetune只是transfer learning的一种手段】
  4. MySQL Encryption and Compression Functions(加密)
  5. FinalData磁盘文件恢复工具(绿色破解版)
  6. SpringBoot + Redis + Shiro 实现权限管理
  7. idea,Androidstudio快捷键大全,抽取成员变量快捷键
  8. Spring Cloud学习系列第三篇【服务容错保护】
  9. 喜报:毒霸成功通过VB100认证
  10. 你有必要不沾计算机一段时间英语,2014新人教版八年级英语下册第一单元必背词组及句子...
  11. 增长黑客——如何低成本实现爆发式成长
  12. 论文笔记:SAITS: SELF-ATTENTION-BASED IMPUTATION FOR TIMESERIES
  13. 解决 eclipse 上 Keystore was tampered with, or password was incorrect
  14. 网页炫酷特效拿来即可用(看板娘鼠标点击炫酷登录页面樱花特效生日祝福彩虹屁)
  15. 用友和金蝶ERP产品私有云部署方案
  16. VMware安装WinXP蓝屏及激活
  17. 一站式在线医疗解决方案,即构音视频技术助建互联网医疗
  18. 升华思想境界,走出博士的专家路线
  19. linux驱动开发篇(三)—— 总线设备驱动模型
  20. Ubuntu系统下生成Android app系统签名

热门文章

  1. Windows系统安装搭建ios开发环境
  2. 机械臂示教轨迹参数化方法 DMP, Dynamic Movement Primitive (一)
  3. sns是什么?可以做什么?
  4. Linux下 wchar_t 与char 转换
  5. 实训1_获取产业数据并存储_预处理与简单分析
  6. Android7.0 8.0进程保活与拉活的实现方式
  7. 随机抽奖转盘微信小程序项目源码
  8. 2.1.15 行首确保不是标点符号
  9. numeric_limits
  10. 网易2018校园招聘编程题真题集合3字符串碎片