A9G GPS GSM GPRS

A9G GPS

Há um bom tempo que estou para escrever sobre essa placa da Ai Thinker porque tenho a intenção de fazer algo um pouco diferente, mas não dá para esperar mais, então vou escrevendo periodicamente sobre a A9G GPS, GSM e GPRS. Essa placa tem um poder de processamento interno excepcional e meu intuito é usar seu processador, mas vou dar um passo por vez.

Sobre GPS, já escrevi sobre um extremamente preciso, o GP-635T, um diminuto GPS com fácil comunicação serial. Verifique o artigo, que contém código de exemplo inclusive.

Recursos da A9G

Essa lindona tem o GPS GK9501 integrado e vem com duas antenas; uma para o GPS e a outra para o GSM. A integração é, claro, por serial – no caso, a UART2.

Em algum momento baixei a documentação da placa, porém agora não acho mais o link específico. O link da documentação oficial é esse. O GPS utiliza GLONASS, um sistema de navegação por satélite russo, um dos poucos sistemas GNSS completamente operacionais. O outro sistema conhecido é o NAVSTAR GPS, sistema americano. Um bom artigo sobre os detalhes da rede russa pode ser visto nesse link do Canaltech.

A placa tem um SDK para quem pretende mexer mais a fundo, cujo link para instalação em Linux é esse. Para quem vai de Windows, o link é esse outro.

Programando-o pelo SDK você terá acesso aos GPIO e pode fazer um sistema totalmente independente de outra MCU. E é isso que pretendo fazer, assim que estudar o SDK.

Se preferir ter menos trabalho, pode também usar um container docker.

Para gravar o firmware, o processo é descrito nesse link.

A placa é incrível, roda um RTOS e é aparentemente simples de programar. Um “hello world” usando um task:

#include "stdbool.h"
#include "stdint.h"

#include "api_os.h"
#include "api_debug.h"
#include "api_event.h"

#define MAIN_TASK_STACK_SIZE    (2048 * 2)
#define MAIN_TASK_PRIORITY      0
#define MAIN_TASK_NAME          "Main Test Task"

static HANDLE mainTaskHandle = NULL;

void first_Main(void)
{
    mainTaskHandle = OS_CreateTask(MainTask,
        NULL, NULL, MAIN_TASK_STACK_SIZE, MAIN_TASK_PRIORITY, 0, 0, MAIN_TASK_NAME);
    OS_SetUserMainHandle(&mainTaskHandle);
}

Esse e outros exemplos podem ser vistos nesse link.

O estilo do código (isso é recomendação, não obrigatoriedade) está descrito aqui.

Outros recursos como GPIO, ADC, UART, OS, IMEI, ICCID, GPS, I2C, SPI, RTC, sistema de arquivos, GPRS, DNS, socket, SSL, MQTT, gerenciamento de energia, chamada, SMS, FOTA e localização (LBS) podem ser encontrados nos submenus dos links anteriores.

Especificações da A9G GPS

Agora vejamos um pouco do hardware.

A A9G é um quad-band GSM/GPRS. Em modo de economia consome menos de 2mA de corrente.

A A9G GPS suporta áudio analógico e digital, com HR, FR, EFR e AMR. Também suporta chamadas de voz e mensagens SMS. Possui uma pilha de rede interna, economizando tempo no desenvolvimento.

Não quer programar? Ok, o firmware padrão usa AT.

Tem suporte a gravação de firmware pela serial, tornando as coisas mais fáceis, no estilo Arduino. Mas vamos ver alguns detalhes mais empolgantes ainda sobre a A9G GPS.

No processamento de áudio ela conta com cancelamento e supressão de eco, além de supressão de ruído. Nada mal, hum?

A A9G tem 3 ports UART e USB. O tempo de boot do GPS é menor que 28s, e a recaptura é menor que 1s. A precisão do posicionamento horizontal é de 2.5m e elevação de 3.5m.

Ela opera entre -20 e 75 graus “Celsius Portiolis”.

Por enquanto ficamos na apresentação, se der ânimo escrevo um tutorial desses báááásicos de operação, mas pretendo mesmo é mexer no sistema.

Usando A9G com Arduino

O firmware padrão do A9G é interativo através de comandos AT:

AT+GPS=1: ativa o GPS e o LED começa a piscar
AT+GPS=0: desativa o GPS e o LED para de piscar
AT+GPSRD=1: Iniciar leitura do GPS. Retorna um formato NMEA, como do artigo citado no primeiro parágrafo.
AT+GPSRD=0: Pára a leitura do GPS.
AT+LOCATION=1: Localização através de um servidor LBS.Retorna longitude e latitude.
AT+GPSUPGRADE: Libera a UART do GPS.
AT+CGPSPWR: Alimentação do GPS.
AT+CGPSRST: Coloca o GPS em modo de economia. 0 para economia e 1 para autonomia.
AT+CREG?: Checar se está registrado na rede. Retorna 1 quando registrado.
AT+CGATT: Como o comando de cima.
AT+CIPSTATUS: Checar o IP. Resposta INITIAL significa que está conectado.
AT+CGDCONT=1: Conectar à Internet. Precisa especificar APN e IP: AT+CGDCONT=1, "IP", "www"
AT+HTTPGET: HTTP GET. Formato: AT+HTTPGET="server link".
AT+CIPMODE: Modo TCP/IP. 0 Não transparente, 1 transparente.
T+CIPACK: Checa estado da transmissão de dados. Retorna o tamanho dos dados.

Veremos mais detalhes em alguma aplicação em outro artigo.

Onde comprar

Essa lindeza está disponível na CurtoCircuito, através desse link. Não se esqueça que a placa contempla um monte de recursos e tem um mega processador que roda RTOS, por isso custa mais que o troco do pão, mas considerando que usa a rede de satélites GLONASS e tem GSM com entrada e saída de áudio, é uma placa que vale muuuuito a pena ter.

Até a próxima!

 

Revisão: Ricardo Amaral de Andrade