在上文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_ROAMING
Network_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中就可以看到设备了。

20200315105749106_8853.webp

可以通过工具-Websocket中来连接查看信息。都是常规操作了。

20200310180448779_27947.webp

还可以往设备推送消息,我的主题是:cyqsd/app

20200310181548232_10198.webp

从Trace中就可以看到了。

20200310181459401_7974.webp

>>>MQTT recieved publish data,  length:26,data:{ "msg": "Hello, World!" }

订阅也会按照预定的时间从A9G上发送到服务器。

20200311085716262_29969.webp

20200315121816359_4248.webp

20200315150837422_16444.webp

本文是2020-03-04写的,但是因为今年来的事情比较多,博客这边疏于打理。