Wisol LOM204A02 acessando TTN V3 - OTAA - LoRaMAC-node
O objetivo deste BLOG é demonstrar como pode-se programar o LOM204 baseado no repositório GITHUB AlexandroSantos/LoraMac-IKS01A2: Sensores do módulo IKS01A2 com LoraMac. (github.com) utilizado pelo Aluno Alexandre Santos do Curso de ENG ELÉTRICA DA UFSC (EEL7515-EEL7415_assinado.pdf (ufsc.br)) na forma de TCC.
O mesmo foi portado para se compatível com o LOM204.
IMPORTANTE: Opção NÃO OFICIAL da WISOL, indicamos uso do KEIL C
Foi alterado board-config.h para
/*!
* \file board-config.h
*
* \brief Board configuration
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
* ______ _
* / _____) _ | |
* ( (____ _____ ____ _| |_ _____ ____| |__
* \____ \| ___ | (_ _) ___ |/ ___) _ \
* _____) ) ____| | | || |_| ____( (___| | | |
* (______/|_____)_|_|_| \__)_____)\____)_| |_|
* (C)2013-2017 Semtech
*
* ___ _____ _ ___ _ _____ ___ ___ ___ ___
* / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
* \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
* |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
* embedded.connectivity.solutions===============
*
* \endcode
*
* \author Miguel Luis ( Semtech )
*
* \author Gregory Cristian ( Semtech )
*
* \author Daniel Jaeckle ( STACKFORCE )
*
* \author Johannes Bruder ( STACKFORCE )
*/
#ifndef __BOARD_CONFIG_H__
#define __BOARD_CONFIG_H__
/*!
* Defines the time required for the TCXO to wakeup [ms].
*/
#define BOARD_TCXO_WAKEUP_TIME 5
/*!
* Board MCU pins definitions
*/
#define RADIO_RESET PA_8 //LOM204
#define RADIO_MOSI PA_7 //LOM204
#define RADIO_MISO PA_6 //LOM204
#define RADIO_SCLK PA_5 //LOM204
#define RADIO_NSS PA_4 //LOM204
#define RADIO_DIO_0 PA_12 //LOM204
#define RADIO_DIO_1 PB_2 //LOM204
#define RADIO_DIO_2 PB_5 //LOM204
#define RADIO_DIO_3 PB_0 //LOM204
#define RADIO_DIO_4 PA_11 //LOM204
#define RADIO_DIO_5 PB_11 /////INPUT LIVRE NAO USADO PELO LOM204
#define RADIO_TCXO_POWER PB_1 //LOM204
#define RADIO_ANT_SWITCH_RX PA_15 //LOM204
#define RADIO_ANT_SWITCH_TX_BOOST PC_1 ///// GPIO LIVRE NAO USADO PELO LOM204
#define RADIO_ANT_SWITCH_TX_RFO PC_2 //// GPIO LIVRE NAO USADO PELO LOM204
#define LED_1 PC_0 //LOM204
#define LED_2 PA_2 //LOM204
#define LED_3 PB_15 //LOM204
#define LED_4 PB_10 ////GPIO LIVRE NAO USADO PELO LOM204
#define LED_GREEN LED_1
#define LED_RED1 LED_2
#define LED_BLUE LED_3
#define LED_RED2 LED_4
#define BTN_1 PA_0 //LOM204
#define BTN_2 PC_13 //LOM204
#define OSC_LSE_IN PC_14
#define OSC_LSE_OUT PC_15
#define OSC_HSE_IN PH_0
#define OSC_HSE_OUT PH_1
#define SWCLK PA_14
#define SWDAT PA_13
#define I2C_SCL PB_8 //LOM204
#define I2C_SDA PB_9 //LOM204
#define UART_TX PA_2 //TXD DISPONIVEL NO LOM204
#define UART_RX PA_3 //RXD DISPONIVEL NO LOM204
// Debug pins definition.
#define RADIO_DBG_PIN_TX PB_3
#define RADIO_DBG_PIN_RX PB_4
#endif // __BOARD_CONFIG_H__
Também foi modificado em board.c a função SystemClockConfig() para
void SystemClockConfig( void )
{
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInit;
/* Set Voltage scale1 as MCU will run at 32MHz */
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/**Configure LSE Drive Capability
*/
__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
/* Enable HSE Oscillator and Activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
//Error_Handler(__func__);
}
/* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */
while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
//Error_Handler(__func__);
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_RTC;
// |RCC_PERIPHCLK_LPTIM1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_HSI;
PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
// PeriphClkInit.LptimClockSelection = RCC_LPTIM1CLKSOURCE_PCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
// _Error_Handler(__FILE__, __LINE__);
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
__GPIOA_CLK_ENABLE();
__GPIOB_CLK_ENABLE();
__GPIOC_CLK_ENABLE();
}
PREPARANDO O AMBIENTE PARA O DESENVOLVIMENTO
O sistema operacional Linux (por exemplo Ubuntu 20.04) foi
escolhido para o desenvolvimento devido suas características, que reduzem os
gastos com licenças, e por possuir ambientes de desenvolvimento de qualidade
profissional e de código aberto. Os seguintes programas ou pacotes de software
também foram utilizados para realizar esta integração:
• O LoRaMAC foi desenvolvido
pela Semtech e é disponibilizado em um repositório público;
• Cmake, gerenciador de compilação;
• GCC-ARM, compilador para processadores ARM.
PREPARAÇÃO DO SISTEMA OPERACIONAL
Para que o desenvolvimento ocorra sem haver problemas com falta
de bibliotecas, aplicativos ou compiladores, todos necessários para a fase de
programação do dispositivo que monitora os sensores, alguns passos devem
ser seguidos. São eles:
Fonte: TCC_Alexandro_UFSC.pdf
1. Abrir um terminal no sistema Linux;
2. Instalar o Cmake:
sudo apt-get install cmake
3. Instalar o Cutecom:
sudo apt-get install cutecom
4. Instalar o compilador GCC-ARM:
sudo apt-get install gcc-arm-none-eabi
5. Instalar os seguintes pacotes extras:
sudo apt-get install libnewlib-dev libnewlib-arm-none-eabi
6. Instalar o gerenciador de versão GIT:
sudo apt-get install git
7. Utilizar o GIT para baixar o LoRaMAC:
git clone https://github.com/AlexandroSantos/LoraMac-IKS01A2
8. Entrar no diretório LoraMac-IKS01A2.
cd LoraMac-IKS01A2
9. Permissão de execução. Neste passo, é necessário indicar, ao sistema
operacional, que os arquivos .sh podem ser executados.
sudo chmod +x *.sh
10. Permissão de uso da porta serial. Algumas distribuições necessitam de
uma liberação para conectar com a porta serial. Para isso, o seguinte
comando é usado, lembrado que devemos substituir usuario pelo seu
nome de usuário:
sudo usermod -a -G dialout usuario
Caso o usuário não saiba o nome de usuário, basta digitar, no terminal,
o comando: users
Configure sua TTN
CONFIGURAR E COMPILAR O CÓDIGO FONTE
Uma vez obtidas as chaves e outras informações relevantes para conexão à rede IoT, é necessária a inserção dessas informações no código fonte
(LoRaMAC), de forma a serem interpretadas corretamente pelo compilador.
Dentre os arquivos, fornecidos pelo desenvolvedor original, tem-se o
main.c e o Commissioning.h. No arquivo Commissioning.h são encontradas
as constantes de configuração de rede, tais como o intervalo de envio, a faixa
de frequência utilizada pelo rádio e a sub-banda, que devem ser definidas
conforme a operadora a ser utilizada. Já em main.c estão as configurações de
hardware, identificação de sensores, protocolo de comunicação entre o kit e os
sensores, além do payload, o pacote a ser enviado.
Para que nosso rádio seja conectado ao gateway e à TTN, de
forma adequada, é necessário editar o Commissioning.h, seguindo os passos
listados a seguir:
• Passo 1: Abrir, com um editor de texto (gedit, nano, vi, geany, sublime),
o arquivo Commissioning.h localizado na seguinte pasta:
src/apps/LoRaMac/classA/B-L072Z-LRWAN1.
Neste arquivo, serão editadas as linhas contendo as seguinte definições
(#define)
– [Linha 4] OVER_THE_AIR_ACTIVATION 0
Desativa ao método de ativação OTAA, passando a ser ABP.
– [Linha 8] IEEE_OUI 0x00, 0x17, 0xAA
Utilizar os 3 primeiro bytes de Device EUI
– [Linha 9] LORAWAN_DEVICE_EUI {IEEE_OUI, 0x38, 0xF8, 0xE0, 0x78, 0x14}
Utilizar os 5 últimos bytes de Device EUI
– [Linha 10] LORAWAN_JOIN_EUI {0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x02, 0xBC, 0x8F}
Utilizar Application EUI
Quando uma nova aplicação for gerada outras chaves serão criadas pela TTN, e então os dados em vermelho deverão ser modificados de acordo.
– [Linha 11] LORAWAN_APP_KEY e [Linha 20] LORAWAN_APP_S_KEY
Ambos devem ser configurados com App Session Key 0x6E, 0x19,
0x04, 0x1B, 0x3D, 0xFF, 0x5A, 0x0B, 0xB9, 0xAE, 0x61, 0x81, 0x4A, 0x73, 0xC5, 0x89
– [Linha 13] LORAWAN_NWK_KEY, [Linha 17] LORAWAN_F_NWK_S_INT_KEY, [Linha 18] LORAWAN_S_NWK_S_INT_KEY e [Linha 19] LORAWAN_NWK_S_ENC_KEY
Todos devem ser configurados com Network Session Key 0x0F,
0x78, 0x42, 0xD4, 0x25, 0xEC, 0x0B, 0xCC, 0x49, 0xA5, 0xCA, 0x54, 0x57, 0xE7, 0x97,
0x8B
– [Linha 16] LORAWAN_DEVICE_ADDRESS ( uint32_t ) 0x260314D7
Deve ser configurado com Device Address
– [Linha 21] APP_TX_DUTYCYCLE 60000
Nesta, configura-se o intervalo de envios, dado em milisegundos.
– [Linha 25] SUBBAND 2
Se a rede usada for a da TTN, o valor é 2. Se for a rede da Kore,
então o valor deverá ser 0.
• Passo 2: Salvar o arquivo Commissioning.h.
A TTN é uma rede gratuita, o que não significa dizer que não haja
limites de uso, quer para fins de teste, ou para fins comerciais. O APP_TX_-
DUTYCYCLE está setado para 1 minuto, mas este valor deve ser utilizado
apenas para verificação do dispositivo. Em operações cotidianas, os intervalos
devem ser maiores, a cada 1 hora, por exemplo, excetuando-se em casos de
violação de regra, como o aumento repentino da temperatura de uma câmara
fria. Como a rede LoRaWAN preza pela economia no tráfego de dados, é
fundamental informar apenas o estritamente necessário.
No caso do LOM204, o Commissioning.h ficou assim
//Create by software LoraMac
#ifndef __LORA_COMMISSIONING_H__
#define __LORA_COMMISSIONING_H__
#define OVER_THE_AIR_ACTIVATION 1 //OTA
#define ABP_ACTIVATION_LRWAN_VERSION_V10x 0x01000300
#define ABP_ACTIVATION_LRWAN_VERSION ABP_ACTIVATION_LRWAN_VERSION_V10x
#define LORAWAN_PUBLIC_NETWORK true
#define IEEE_OUI 0x01, 0x10, 0x51
#define LORAWAN_DEVICE_EUI { IEEE_OUI, 0x3B, 0x7B, 0xED, 0xB6, 0x8D }
#define LORAWAN_JOIN_EUI { 0xFB, 0x3F, 0xA2, 0xBA, 0x05, 0x78, 0x2A, 0x97 }
#define LORAWAN_APP_KEY { 0xE0, 0x00, 0x07, 0xB9, 0xFA, 0x1F, 0x12, 0x89, 0x20, 0x81, 0x9C, 0xD2, 0x89, 0x0C, 0x9C, 0xCF }
#define LORAWAN_GEN_APP_KEY { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }
#define LORAWAN_NWK_KEY { 0x1F, 0xD6, 0xC7, 0x40, 0x1C, 0xD9, 0x74, 0xF7, 0x20, 0x63, 0x69, 0xA5, 0x81, 0xD0, 0x5D, 0x29 }
#define LORAWAN_NETWORK_ID ( uint32_t )1
#define STATIC_DEVICE_ADDRESS 1
#define LORAWAN_DEVICE_ADDRESS ( uint32_t )0x7908BA44
#define LORAWAN_F_NWK_S_INT_KEY { 0x1F, 0xD6, 0xC7, 0x40, 0x1C, 0xD9, 0x74, 0xF7, 0x20, 0x63, 0x69, 0xA5, 0x81, 0xD0, 0x5D, 0x29 }
#define LORAWAN_S_NWK_S_INT_KEY { 0x1F, 0xD6, 0xC7, 0x40, 0x1C, 0xD9, 0x74, 0xF7, 0x20, 0x63, 0x69, 0xA5, 0x81, 0xD0, 0x5D, 0x29 }
#define LORAWAN_NWK_S_ENC_KEY { 0x1F, 0xD6, 0xC7, 0x40, 0x1C, 0xD9, 0x74, 0xF7, 0x20, 0x63, 0x69, 0xA5, 0x81, 0xD0, 0x5D, 0x29 }
#define LORAWAN_APP_S_KEY { 0xE0, 0xA2, 0x07, 0xB9, 0xFA, 0x1F, 0x12, 0x89, 0x20, 0x81, 0x9C, 0xD2, 0x89, 0x0C, 0x9C, 0xCF }
#define APP_TX_DUTYCYCLE 60000
#define APP_TX_DUTYCYCLE_RND 1000
#define LORAWAN_DEFAULT_DATARATE DR_2
#define LORAWAN_CONFIRMED_MSG_ON false
#define SUBBAND 2 //TTN
#define LORAWAN_ADR_ON 1
#define LORAWAN_APP_PORT 2
#define LORAWAN_DUTYCYCLE_ON true
#define LORAWAN_CONFIG_MANUAL false
#endif
COMPILANDO
No diretório raiz do projeto, encontramos os scripts create.sh e program.sh. O script ./create.sh, usado para compilar, cria o diretório build.
No caminho build/src/apps/LoRaMac, encontra-se o arquivo LoRaMac-classA.bin, que deve ser copiado para o disco removível DIS_L072Z, para
rodar o programa na placa.
Para compilar e programar a placa é utilizado ./program.sh, fazendo
com que todos os passos sejam feitos automaticamente.
No caso do LOM204, foi utilizado STM32CUBE-PROGRAMMER e código foi o formato .HEX
Veja a execução!
PS: Para Debug, foram utilizados PA2 e PA3 (TXD e RXD) do LOM204.
Questões: suporte@smartcore.com.br
FONTES:
Nenhum comentário:
Postar um comentário