O objetivo deste projeto é fornecer uma plataforma de hardware/software de código aberto para o desenvolvimento rápido e de baixo custo dos nós de sensores de Lorawan. Consiste em um módulo Arduino Pro Mini, um módulo de comunicação Lora RMF95W, um conversor Buck DC-DC e alguns componentes para simplificar a conexão com diferentes sensores.

Faça o download do repositório e atualize submódulos:
$ git clone https://github.com/AngelJMC/agriot-sensor-node.git
$ cd agriot-sensor-node
$ git submodule update --init --recursive
.
├── docs # Documentation files
├── firmware # FW source code (Visual Studio Code)
├── hardware # HW design files (Kicad)
Se você deseja modificar o código -fonte ou programar seus dispositivos, é altamente recomendável usar o código do Visual Studio e o plug -in da plataforma. Basta abrir o diretório "firmware" com o código do Visual Studio e todo o projeto estará pronto para uso.
Você deve criar um novo arquivo .cpp no qual implementa as rotinas de comunicação com o sensor. Se você usar o seguinte esquema, precisará adicionar apenas a comunicação ao sensor. A função Sensors_update () é executada periodicamente e, uma vez que a aquisição do sensor seja concluída, os dados são enviados pela camada de comunicação de Lorawan.
#ifdef SENS_SENSORNAME
#include "protocol.h"
#include "sensors.h"
#include <CayenneLPP.h>
/* Schedule sensore measurement every this senconds */
#define SENSOR_INTERVAL (5*60) //seconds
static osjob_t sensjob;
CayenneLPP lpp(51);
static void sensors_update( osjob_t* j ) {
os_avoidSleep();
/*TO-BE Implemented -- Read sensor*/
float t = readYourSensor();
/* Update Data Frame using Cayennne Library */
lpp.reset();
lpp.addTemperature(1, t); /*Change according your sensor*/
protocol_updateDataFrame( lpp.getBuffer(), lpp.getSize() );
/* Schedule next sensor reading*/
os_setTimedCallback( &sensjob, os_getTime() + sec2osticks(SENSOR_INTERVAL), sensors_update );
Serial.flush();
os_acceptSleep();
}
void sensors_init( ) {
/*TO-BE Implemented -- Init sensor*/
initYourSensor();
/*Schedule the first sensor reading*/
os_setTimedCallback(&sensjob, os_getTime() + sec2osticks(10), sensors_update);
}
#endif
Para compilar o código para este novo sensor, você precisará adicionar ao arquivo de configuração Platformio.ini um novo ambiente de construção.
[env:pro8MHzatmega328_SENSORNAME]
platform = atmelavr
board = pro8MHzatmega328
framework = arduino
build_flags = -DSENS_SENSORNAME
Agora você poderá selecionar o ambiente de construção no código do Visual Studio.
A configuração do dispositivo é feita através da interface da linha de comando (CLI) implementada no dispositivo.
Primeiro, conecte seu dispositivo ao monitor serial do Arduino sobre o USB. Como o Arduino Pro Mini não possui um chip FTDI a bordo, você precisará usar um adaptador USB-TTL. Defina a taxa de transmissão para 9600 e abra a porta serial para estabelecer a conexão. IMPORTANTE: Para reduzir o consumo de energia do dispositivo, a interface serial está disponível apenas por 10 minutos após a energia do dispositivo.
| ID de comando | Tipo | Descrição |
|---|---|---|
| D | R | Deveui - Identificador de dispositivo exclusivo. |
| E | R/w | Appeui - Identificador exclusivo do aplicativo. |
| K | R/w | AppKey - usado no OTAA para gerar chaves de sessão. |
Para usar o padrão sobre a ativação do ar (OTAA), você precisará registrar seu dispositivo com o dispositivo EUI
O dispositivo EUI é um endereço exclusivo fornecido pelo microcontrolador ATMEGA328P. Para recuperar isso, digite o console serial:
D
Vá para a rede de coisas e abra o aplicativo ao qual deseja adicionar um dispositivo e clique em Registrar dispositivo.

Agora que registramos o dispositivo, podemos ativar a conexão do nosso próprio dispositivo. A ativação significa que o dispositivo usará a chave do aplicativo gerada para negociar as chaves da sessão para uma comunicação adicional.
Vá para a visão geral do dispositivo e copie o aplicativo de 8 bytes EUI. Agora, você deve enviar o comando "E" com o valor obtido através da porta serial do dispositivo:
E: 70B3D57ED0038147
Repita o mesmo processo para enviar a chave do aplicativo de 16 bytes:
K: 7B4F7BC85D064898DB39214D7607440E
Agora, reinicie o dispositivo e ele se registrará automaticamente na rede.

As chaves da sessão não são armazenadas na memória não volátil, portanto são renegociadas cada vez que o dispositivo é ligado. Esse comportamento não é o mais apropriado e será revisado em versões futuras.
Obtendo os Gerbers para fabricação de PCB aqui.
| Nome | Anmount | Descrição |
|---|---|---|
| Arduino Pro mini | 1 | Pro mini armega328p 3,3v 8mHz |
| RFM95W | 1 | RFM95W 868-915MHZ LORA SX1276 Transceptor |
| DC-DC BUCK | 1 | 3.3V Saída fixa, entrada 5V-24V |
| Resistor 2.2k | 1 | 2.2K SMD Resistor 0805 |
| Resistor 4.7k | 3 | 4.7K SMD Resistor 0805 |
| Capacitor 4.7 UF/6.3 V | 1 | 4.7 Capacitor SMD UF 0805 |
| SMD LED | 1 | SMD LED 0850 |
| DIP | 1 | Switch 4 pin metal smd |
| Terminal de parafuso 01x03 | 2 | 3p - pitch 3,5/3,96mm para parafuso PCB Terminal Block Connector |
| Terminal de parafuso 01x02 | 1 | 2p - pitch 3,5/3,96mm para parafuso PCB Terminal Block Connector |
| Conector U.FL-R-SMT | 1 | Conector U.FL-R-SMT |
| Antena 3dbi rp-sma | 1 | Antena 3DBI RP-SMA Conector + 21cm SMA Male/U.FL Pigtail Cable |

