O objetivo deste BLOG é demonstrar como é possível utilizar o módulo LOM204A02 junto com um "GPS", como um rastreador veicular. Foi utilizado o starter kit LoRa da WISOL e GPS foi simulado via UART. O exemplo em C dá uma idéia geral, não esta livre de BUGs.
Sobre a SMARTCORE
O primeiro passo então foi no KEIL C, com a ajuda do STM32 CUBE, a programação a UART para recepção de dados a velocidade de 4800,N,8,1 conforme função abaixo.
//UART1 é a mesma do BOOTLOADER
UART_HandleTypeDef huart1;
static void MX_USART1_UART_Init(void);
static void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 4800;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
//Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
/* USER CODE END USART1_Init 2 */
}
Então no programa principal é realizada a chamada desta função no programa main()
MX_USART1_UART_Init();
Será necessário também a criação de buffer de recepção de dados pela serial, no caso, 128 bytes.
char buff[ 128 ];
o qual é preenchido com NULL
memset( buff, 0, 128 ); //preenche com NULL
o qual é preenchido com NULL
memset( buff, 0, 128 ); //preenche com NULL
No programa principal é aguardado por 5 segundos de chegou algo pelo GPS
HAL_UART_Receive( &huart1, buff, 128, 5000 );
Se algo foi recebido neste período, ou seja, o buff esta com tamanho diferente de ZERO, então o dado recebido é mandado pela serial para DEBUG e também é enviado para a rede LoRaWAN.
if(!(strlen(buff)==0))
{
HAL_UART_Transmit(&huart1, buff,strlen(buff), 10);
// ASCII , Confirmed up, Fport : 1 , datalength : size(buff), data: GPS data_Tx(1,1,1,strlen(buff),buff); memset( buff, 0, 128 ); }
// ASCII , Confirmed up, Fport : 1 , datalength : size(buff), data: GPS data_Tx(1,1,1,strlen(buff),buff); memset( buff, 0, 128 ); }
Abaixo um exemplo de pacote de GPS de teste (enviado via REALTERM) via UART1
$GPGGA,LATITUTE,LONGITUDE
Não foi implementado um filtro para demais pacotes do NMEA, para testes foi enviado apenas o pacote de latitude e longitude ($GPGGA)
Abaixo código da função main()
int main(void)
{
Start_Init();
MX_USART1_UART_Init();
HAL_UART_Transmit(&huart1, "Start...",8, 10);
setClass( 0 ); // Set CLASS A mode.
setChannelMask(opt1,opt2,opt3,opt4,opt5, opt6);
JOIN_START(); // Join srart
// This function calls not only OTAA but also ABP
HAL_UART_Transmit(&huart1, "Connected...",12, 10);
memset( buff, 0, 128 );
while(1)
{
CLI_Command_Process(); // To receive CLI command through serial port(UART)
HAL_UART_Receive( &huart1, buff, 128, 5000 );
if(!(strlen(buff)==0))
{
HAL_UART_Transmit(&huart1, buff,strlen(buff), 10);
data_Tx(1,1,1,strlen(buff),buff);
memset( buff, 0, 128 );
}
API_MODE(); // Run LoRa protocol.
}
}
Configurando CLASS A, OTAA, Application EUI, ApplicationKey para JOIN na EVERYNET
//UART5 é a do CLI
O join foi realizado com successo e este momento o programa está em loop aguardando pela SERIAL UART1 os dados enviados pelo GPS, quando receber ira publicar na EVERYNET.
Pacote chegou na EVERYNET
[2019-11-07 14:16:59 305]:
CON_[2019-11-07 14:16:59 325]:UP
FCnt 2 P 1
SEND
Freq: 915200000 DR: 2
[2019-11-07 14:17:04 733]:RX1CH_OPEN
[2019-11-07 14:17:04 893]:
[2019-11-07 14:17:04 914]:DUTY_CYCLE_ANS
ProcessMacCommands: SRV_MAC_DUTY_CYCLE_REQ: D 0 AD 1
status=7
[2019-11-07 14:17:04 930]:RX_PARAM_SETUP_ANS
R[2019-11-07 14:17:04 952]:X_PARAM_SETUP_REQ: O 0 DR 8 F 923300000
UNCON_DOWN
FCnt 1 P 57
DONE
Base64
Fonte:
gps_keil.rar
Dúvidas
suporte@smartcore.com.br
Referências: