Air800GPS信息上传Mqtt服务器

Air800这个模块还是比较熟悉的了,上一次是用它获取了gps信息并上传到了阿里云,这次我自己安装了一个mqttt的服务器,参见EMQ X安装。
Air800是上海合宙推出的一款集合GPRS(2G网络)通信和GPS位置获取的一款模块,能够很方便的制作出各种基于定位和2G数据传输的一些应用。具体的说明可以参考Air800S模块。
本篇就讲一下,这两个核心功能,如何使用GPRS联网,并将获取的GPS信息通过Mqtt发送到云端。

一、下载必要的文件

合宙公司的各种模块都可以使用lua这个编程语言进行二次开发,极大的降低了二次开发的难度,假设你已经安装好了luatools这个工具,目前常用的是“LuaTool-V2”。必要的文件包括两部分:core文件和lua脚本demo文件,这些东西都可以在老版的合宙官网中Air800 M4模块区中找到。

二、创建vscode项目

这里我们使用到了两个功能:mqtt和gps,所以使用vscode打开这两个文件夹


这里我们使用gps Demo中的v2版本,mqtt Demo中的sendInterruptRecv版本,之后创建一个新的文件夹,在其中创建main.lua和gpsmqtt.lua这两个文件,截图中其他文件可以不用管。

三、修改代码

复制gps Demo v2版本中的main.lua内容到新建的main.lua中

--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "GPSV2"
VERSION = "2.0.0"
PRODUCT_KEY = "dfhsdhsdgjsgdhsgh"--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
--[[
如果使用UART输出日志,打开这行注释的代码"--log.openTrace(true,1,115200)"即可,根据自己的需求修改此接口的参数
如果要彻底关闭脚本中的输出日志(包括调用log模块接口和Lua标准print接口输出的日志),执行log.openTrace(false,第二个参数跟调用openTrace接口打开日志的第二个参数相同),例如:
1、没有调用过sys.opntrace配置日志输出端口或者最后一次是调用log.openTrace(true,nil,921600)配置日志输出端口,此时要关闭输出日志,直接调用log.openTrace(false)即可
2、最后一次是调用log.openTrace(true,1,115200)配置日志输出端口,此时要关闭输出日志,直接调用log.openTrace(false,1)即可
]]
--log.openTrace(true,1,115200)require "sys"require "net"
--每1分钟查询一次GSM信号强度
--每1分钟查询一次基站信息
net.startQueryAll(60000, 60000)--加载控制台调试功能模块(此处代码配置的是uart1,波特率115200)
--此功能模块不是必须的,根据项目需求决定是否加载
--使用时注意:控制台使用的uart不要和其他功能使用的uart冲突
--使用说明参考demo/console下的《console功能使用说明.docx》
--require "console"
--console.setup(1, 115200)--加载硬件看门狗功能模块
--根据自己的硬件配置决定:1、是否加载此功能模块;2、配置Luat模块复位单片机引脚和互相喂狗引脚
--合宙官方出售的Air201开发板上有硬件看门狗,所以使用官方Air201开发板时,必须加载此功能模块
---[[
require "wdt"
wdt.setup(pio.P0_30, pio.P0_31)
--]]--加载网络指示灯功能模块
--根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚
--合宙官方出售的Air800和Air801开发板上的指示灯引脚为pio.P0_28,其他开发板上的指示灯引脚为pio.P1_1
--require "netLed"
--netLed.setup(true,pio.P1_1)
--网络指示灯功能模块中,默认配置了各种工作状态下指示灯的闪烁规律,参考netLed.lua中ledBlinkTime配置的默认值
--如果默认值满足不了需求,此处调用netLed.updateBlinkTime去配置闪烁时长--加载错误日志管理功能模块【强烈建议打开此功能】
--如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api
require "errDump"
errDump.request("udp://ota.airm2m.com:9072")--加载远程升级功能模块【强烈建议打开此功能】
--如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update
--PRODUCT_KEY = "v32xEAKsGTIEQxtqgwCldp5aPlcnPs3K"
--require "update"
--update.request()--加载GPS功能测试模块
require "testGps"--启动系统框架
sys.init(0, 0)
sys.run()
  1. 复制testGps.lua和testMqtt.lua两个文件到新建的gpsmqtt.lua文件中,然后改改
module(...,package.seeall)require "mqtt"
require "gpsv2"--改成你的mqtt服务器
local host, port = "xxxx", 1883-- 代码复制过来以后,这里应该有两个taskInit
-- 这里插一句,合宙基于luat搞了个luatOS,给力
-- 这里这个task就是gps的task
sys.taskInit(function(...)-- 在这里打开gpsgpsv2.open(2, 115200, 2, 5)while true do-- 这句的意思是判断下gps是否定位成功,但是我是室内测试的,gps信息获取不到的--所以注释掉了,BTW,本来就是我加的-- if gpsv2.isFix() then-- 获取整型的经纬度信息,即使gps定位是失败的,也是可以获取到的,还有agps呀local lat, lng = gpsv2.getIntLocation()local alti = gpsv2.getAltitude()-- data是当时搞阿里云时拼的字符串,这次直接复制过来了-- 说起来,luat现在可以搞json了,不需要用这种方法拼字符串了local data = "{\"params\":{\"GeoLocation\":{\"CoordinateSystem\":1,\"Latitude\":"..lat..",\"Longitude\":"..lng..",\"Altitude\":"..alti.."}}}"log.info("testGps isFix:", gpsv2.isFix())log.info("testGps lng,lat:", gpsv2.getIntLocation())log.info("testGps message:", gpsv2.getAltitude(), gpsv2.getSpeed(),gpsv2.getAzimuth(), gpsv2.getUsedSateCnt(), gpsv2.getViewedSateCnt())-- 这里牛逼了,在luat内部我理解是实现了一个消息池-- 可以将消息直接发送到这里,下边mqtt读取时,不仅可以在mqtt服务器获取消息,-- 还可以读取这里的消息sys.publish("pub_msg", data)-- end-- 延时3s,也就是3s输出一次gps定位信息sys.wait(3000)end
end)-- 测试MQTT的任务代码
sys.taskInit(function()-- 创建mqtt客户端local mqttc = mqtt.client(misc.getImei(), 300, "user", "password")    while true do-- 如果socket没准备好就等着,如果服务器没链接上就等着while not socket.isReady() do sys.wait(1000) endwhile not mqttc:connect(host, port) do sys.wait(2000) end-- 订阅一个主题试试mqttc:subscribe(string.format("/device/%s/req", misc.getImei()))while true do-- 如果r为True则收到了服务器下发的消息,也就是正常的mqtt流程local r, data, param = mqttc:receive(5000, "pub_msg")if r thenlog.info("这是收到了服务器下发的消息:", data.payload or "nil")-- 如果r为False,也就是没有收到消息,但是如果data的值是“pub_msg”-- 这里需要注意了,这个pub_msg可不是瞎写的,而是从上而下都是这个关键词-- 如果data 是pub_msg,那么就说明是消息池中的内容,此时param是上边-- sys.publish的内容elseif data == "pub_msg" thenlog.info("这是收到了订阅的消息和参数显示:", data, param)-- 将收到的消息发布到指定的主题,也就是发送到了mqtt的服务器上去了mqttc:publish(string.format("/device/%s/resp", "air800"), param)-- 超时,没啥好说的elseif data == "timeout" thenlog.info("这是等待超时主动上报数据的显示!")mqttc:publish(string.format("/device/%s/report","air800"), "test publish " .. os.time())elsebreakendendendmqttc:disconnect()
end)

Air800GPS信息上传Mqtt服务器相关推荐

  1. Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器

    一.硬件准备 USB转ESP8266两块.DHT11温度湿度传感器.ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别) USB转ESP8266 ...

  2. 正在将错误信息上传至服务器,android - 将Base64编码的图像上传到服务器-400服务器错误 - 堆栈内存溢出...

    我正在使用Volley将具有JSON负载的Base64编码图像上传到HelpScout服务器 . 返回com.android.volley.ServerError和状态代码400 . 我将图像编码如下 ...

  3. Android热修复之 - 收集崩溃信息上传服务器

    1.概述 大致的流程就是在用户崩溃的时候,我们获取崩溃信息.应用当前的信息和手机信息,然后把它保存到手机内存卡,再找我就直接找出来看看.后来衍生到上线后某些奇葩机型会有部分问题,所以不得不上传到服务器 ...

  4. Android全局捕获异常信息,并上传到服务器。

    android全局捕获异常信息 由于最近在做一个国外的项目,所以客户测试时,有些简单的问题直接可以改改.但是当客户拿着国外的手机,或者一些各种机型的手机出现不同的问题时,真心不知道咋解决了.所以如果在 ...

  5. 往服务器上传文件的软件,上传云服务器文件的软件

    上传云服务器文件的软件 内容精选 换一换 若用户私钥泄露,用户可通过管理控制台使用新的密钥对替换弹性云服务器内的公钥,替换完成后,用户需要使用本地保存的新密钥对的私钥登录该弹性云服务器,无法使用替换前 ...

  6. android 监测bug上传到服务器,基于Android 错误信息捕获发送至服务器的详解

    程序员最头疼的事情就是bug和debug.这次debug长达20天,搞的我心力交瘁.累,因为Android兼容性,不同手机会有不同的bug出来,而且很难复现,所以就上网找了下类似保存错误log到文件再 ...

  7. 苹果的指纹信息会上传服务器吗,苹果新专利遭曝光 指纹信息上传到云端

    原标题:苹果新专利遭曝光 指纹信息上传到云端 中关村在线讯:最近各大媒体相继报道了苹果最新专利遭曝光的消息,根据美国专利和商标局(USPTO)的 一份新专利中,在未来苹果对待指纹生物数据的方法很可能发 ...

  8. 网站上传到服务器mysql数据库,网站上传到服务器mysql数据库吗

    网站上传到服务器mysql数据库吗 内容精选 换一换 安装MySQL本文档以"CentOS 6.5 64bit(40GB)"操作系统为例,对应MySQL版本为5.1.73.Cent ...

  9. 文件上传打满服务器带宽,文件上传云服务器 带宽选择

    文件上传云服务器 带宽选择 内容精选 换一换 弹性云服务器支持通过内网访问OBS,OBS可供用户存储任意类型的数据.将图片.视频等数据存储至OBS后,在ECS上可以访问OBS,下载桶中的图片或视频等数 ...

最新文章

  1. 火热的激情、严密的计划成就双冠梦想——我的项管经验(转载)
  2. 解决端口出现err-disabled问题
  3. NHibernate中,查询SqlServer数据库多个实体对象
  4. Redis cluster集群扩容缩容原理
  5. 如何分析线程转储– IBM VM
  6. 过滤你不想看见的网页里的东西
  7. Python操作Excel最好选择什么模块?
  8. python查看list_reverseiterator object中的内容
  9. 大神干货:腾讯广告算法大赛亚军女极客生存图鉴
  10. 文件上传功能如何测试
  11. STM32F103mini教程学习总结与心得(一)
  12. SCI论文下载之chrome插件
  13. 取整函数(ceil、floor、round)
  14. 快速排序的时间复杂度和空间复杂度
  15. mfc chartctrl 饼状图编写_南瓜糯米饼:外酥里糯,吃到嘴巴里,真是舌尖上的享受...
  16. [php]php设计模式 (总结)
  17. SAP ABAP ZBA_R001 查询用户下的角色,事务代码
  18. RPG Maker MV 做任务
  19. wordpress瀑布流图片主题PhotoBroad模板V2.0
  20. 再见深圳!我要去成都搞IT了!

热门文章

  1. window下安装php扩展xhprof
  2. python计算相似矩阵
  3. linux SecureCRT ssh key认证登陆
  4. OpenCV入门系列 —— cv::dilate 图像膨胀
  5. 虚拟机设置--draft
  6. 机器学习4-x——音乐推荐系统代码实现
  7. python的numpy.random.choice(a, size=None, replace=True, p=None)函数
  8. 测试总结——大数据测试
  9. 使用PyTorch构建的“感知器”网络
  10. 基于光纤传能的异构无源光网络研究