A9G使用官方C_SDK例程实现MQTT和GPS
在上文A9G使用MicroPython进行开发中,写到了使用MicroPython来实现功能,本文使用C_SDK来实现,在实际应用中,这样的方式更多。
#include "buffer.h"
#include "gps_parse.h"
#include "math.h"
#include "gps.h"
#include <api_gps.h>
#include <api_hal_uart.h>
还需要文件系统的话:
#include "api_fs.h"
#include "api_charset.h"
例程中已经有了mainTaskHandle和secondTaskHandle,我们从前面的demo中拿出来gps的。
gpsTaskHandle = OS_CreateTask(gps_testTask,
NULL, NULL, THIRD_TASK_STACK_SIZE, THIRD_TASK_PRIORITY, 0, 0, THIRD_TASK_NAME);
如此一来还需要加入gps_testTask
。你可以直接复制上一个Demo的这个函数。额外注意输出得到的经纬度信息应该存放到一个变量中,可以这样,我就举个例子:
sprintf(buffer_gps, "{\"Lat\":%lf,\"Lon\":%lf}", latitude, longitude);
UART_Write(UART1,buffer_gps,strlen(buffer_gps));
你还可以抛到Trace中。有了这个保存在内存卡中的GPS log就可以把内存卡取出来,用软件解析里面的内容,用于导入谷歌地球等操作了。
也可以调用cJSON库,现在就把数据转为JSON格式方便发送到服务器。
#include "cJSON.h"
那当然就得在Makefile
中引用了。
LOCAL_ADD_INCLUDE := include\
include/std_inc \
include/api_inc \
libs/gps/minmea/src \
libs/cjson/src \
并且这个例程中没有在MainTask
中初始化串口(UART1),从串口中输出数据方便我们查看工作状态,就不需要coolwatcher了。
//open UART1 to print NMEA infomation
UART_Config_t config = {
.baudRate = UART_BAUD_RATE_115200,
.dataBits = UART_DATA_BITS_8,
.stopBits = UART_STOP_BITS_1,
.parity = UART_PARITY_NONE,
.rxCallback = NULL,
.useEvent = true
};
UART_Init(UART1,config);
还需要在EventDispatch
函数中,增加:
API_EVENT_ID_NETWORK_REGISTERED_ROAMINGNetwork_StartAttach();
API_EVENT_ID_UART_RECEIVED
if(pEvent->param1 == UART1)
{
uint8_t data[pEvent->param2+1];
data[pEvent->param2] = 0;
memcpy(data,pEvent->pParam1,pEvent->param2);
Trace(1,">>>uart received data,length:%d,data:%s",pEvent->param2,data);
if(strcmp(data,"close") == 0)
{
Trace(1,">>>close gps");
GPS_Close();
isGpsOn = false;
}
else if(strcmp(data,"open") == 0)
{
Trace(1,">>>open gps");
GPS_Open(NULL);
isGpsOn = true;
}
}
具体代码就看上一个demo中的了,这里就只是贴上来。
然后按照上面的编译,烧写步骤,就进去了。不出意外在EMQ X Broker中就可以看到设备了。
可以通过工具-Websocket
中来连接查看信息。都是常规操作了。
还可以往设备推送消息,我的主题是:cyqsd/app
。
从Trace中就可以看到了。
>>>MQTT recieved publish data, length:26,data:{ "msg": "Hello, World!" }
订阅也会按照预定的时间从A9G上发送到服务器。
本文是2020-03-04写的,但是因为今年来的事情比较多,博客这边疏于打理。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
这个源码有吗大佬
文章中已经提供了