LuatOS快速上手——GPS定位

目录

1、前言:合宙Luat,让万物互联更简单

2、硬件:Air724UG & Air530

2.1 硬件模块介绍

2.2 实验硬件条件

3、嵌入式软件

3.1 打开电压域

3.2 配置串口

3.3 打开GPS

3.4 处理NMEA数据

3.5 打印GPS相关数据

4、实验结果


1、前言:合宙Luat,让万物互联更简单

LuatOS是合宙公司推出的一款嵌入式操作系统——嵌入式的脚本运行框架。覆盖各类物联网应用场景,可运行于4G Cat.1/MCU/NB-IoT/2G/Wi-Fi/蓝牙等等不同的物联网主控芯片。这么做的目的,用合宙自己的话来说,就是——合宙Luat,让万物互联更简单

结合最近项目开发的亲身经历,使用LuatOS来开发项目,的确很简单,很快能把想法实现。特别适合人手有限的物联网公司。还有大学生做创业项目、别业设计等等,就是可以更加专注于产品本身,而不必在顶层的硬件和软件上牵涉太多时间和精力。

这篇文章主要记录近期针对合宙的Cat1模块搭载GPS定位模块进行定位的一些开发情况。

2、硬件:Air724UG & Air530

2.1 硬件模块介绍

4G Cat.1模块——Air724UG

Air724UG是合宙2020年推出的一款4G Cat1全网通系列模块,可以支持AT指令、和Luatos两种开发模式。利用AT指令模式开发,就是把Air724UG完全当成一个普通的Cat1模块,用uart和上位机MCU通信,接受AT指令来完成联网、数据透传等功能。 

而使用Luatos的开发模式,一个明显差异就是会少用一个MCU,所有的控制、通信功能都在Air724UG模块内部来完成。在进行实际开发的时候,合宙提供了丰富的应用接口,只需要开发者自己编写脚本调用这些接口就可以了。比如本次开发要进行GPS模块的应用,需要应用串口uart和GPS模块进行通信、打开GPS模块、收到数据后要进行NMEA数据解析、判断定位是否成功,等等。其实还是挺复杂的,如果全是自己来编写驱动代码,也不是一件容易的事情。现在用合宙的Luatos,利用现有的API,开发起来很轻松,我用了一个下午就成功定位了,文章最后展示定位的地图位置。

Air724UG卖的也不贵,淘宝上很容易买到。而且官网提供的配套资料很全,特别方便。

GPS定位模块——Air530Z

 Air530Z是合宙自己推出的GPS /北斗双模单频定位模组,官方售价14.9园真便宜。淘宝上也能很方便买到Air530z的开发板,自带陶瓷天线,非常容易使用。

2.2 实验硬件条件

实验材料数量
Air724UG评估板1套
Air530Z评估板1套
杜邦线,用于开发板之间连接4根
USB数据线,用于连接电脑和Air724UG评估板1跟

模块之间连接,需要连接四根线:

Air530Z评估板Air724UG评估板
GND(黑)GND(黑)
RXD(橙)U1_TXD(橙)
TXD(蓝)U1_TXD(蓝)
VDD(红)VMMC(红)

3、嵌入式软件

3.1 打开电压域

硬件上Air724的VMMC引脚给GPS模块供电,需要在脚本打开Air724的电压域,让LDO输出供电3.2V.

pmd.ldoset(15,pmd.LDO_VMMC) 

3.2 配置串口

使用Air724的Uart1来接收GPS模块上报的数据,因此需要对串口1进行配置。即按照如下格式进行Uart的接口设置:串口代号、波特率——根据外接GPS模块来定、8位数据、校验位、停止位。

gps.setUart(1,9600,8,uart.PAR_NONE,uart.STOP_1)

3.3 打开GPS

gps.open(gps.TIMER,{tag="TEST3",val=300,cb=test3Cb})

3.4 处理NMEA数据

gps.setNmeaMode()接口会调用nmeaCb()函数打印NEMA数据,当GPS应用启动时会根据条件调用回调函数。

函数名:nemacb
功能  :NEMA数据的处理回调函数
参数  :
        data:一条NEMA数据
返回值:无
]]
local function nmeaCb(nmeaItem)
    log.info("testGps.nmeaCb",nmeaItem)
end

local function test1Cb(tag)
    log.info("testGps.test1Cb",tag)
    printGps()
end

local function test2Cb(tag)
    log.info("testGps.test2Cb",tag)
    printGps()
end

local function test3Cb(tag)
    log.info("testGps.test3Cb",tag)
    printGps()
end

3.5 打印GPS相关数据

打开一个循环定时器调用printGps()函数打印gps相关数据。

local function printGps()
    if gps.isOpen() then
        local tLocation = gps.getLocation()--获取度格式的经纬度信息
        local speed = gps.getSpeed()
        log.info("testGps.printGps",
            gps.isOpen()--获取GPS模块是否处于开启状态,gps.isFix()--获取GPS模块是否定位成功,
            tLocation.lngType,tLocation.lng,tLocation.latType,tLocation.lat,--打印经纬度
            gps.getAltitude(),--获取海拔
            speed,--获取速度
            gps.getCourse(),--获取方向角
            gps.getViewedSateCnt(),--获取可见卫星的个数
            gps.getUsedSateCnt())--获取定位使用的卫星个数
    end
end

sys.timerLoopStart(printGps,2000)

4、实验结果

烧录底层固件和脚本后,运行电路模块,成功获取到GPS的NMEA数据,log如图所示显示GPS定位情况,及实时的NMEA数据。

 根据log所显示,当前坐标为E 110.4238686 N 19.9687228

将坐标输入到高德开发平台的坐标拾取器,立刻定位到我家位置,效果非常好。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值