El objetivo de este proyecto es proporcionar una plataforma de hardware/software de código abierto para el desarrollo rápido y de bajo costo de los nodos de sensores de Lorawan. Consiste en un módulo Arduino Pro Mini, un módulo de comunicaciones Lora RMF95W, un convertidor Buck DC-DC y algunos componentes para simplificar la conexión a diferentes sensores.

Descargar submódulos de repositorio y actualización:
$ 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)
Si desea modificar el código fuente o programar sus dispositivos, se recomienda usar el código Visual Studio y el complemento Platformio. Simplemente abra el directorio "Firmware" con el código Visual Studio y todo el proyecto estará listo para su uso.
Debe crear un nuevo archivo .cpp en el que implementa las rutinas de comunicación con el sensor. Si usa el siguiente esquema, solo tendrá que agregar la comunicación con el sensor. La función Sensors_Update () se ejecuta periódicamente y una vez que la adquisición del sensor está terminado, la capa de comunicación Lorawan envía los datos.
#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 el código para este nuevo sensor, deberá agregar al archivo de configuración de Platformio.ini un nuevo entorno de compilación.
[env:pro8MHzatmega328_SENSORNAME]
platform = atmelavr
board = pro8MHzatmega328
framework = arduino
build_flags = -DSENS_SENSORNAME
Ahora podrá seleccionar el entorno de compilación del código de Visual Studio.
La configuración del dispositivo se realiza a través de la interfaz de línea de comandos (CLI) implementada en el dispositivo.
Primero, conecte su dispositivo al Monitor de serie Arduino sobre USB. Dado que el Arduino Pro Mini no tiene un chip FTDI a bordo, deberá usar un adaptador USB-TTL. Establezca la tasa de baudios en 9600 y abra el puerto serie para establecer la conexión. Importante: para reducir el consumo de energía del dispositivo, la interfaz en serie solo está disponible durante 10 minutos después de la encendido del dispositivo.
| ID de comando | Tipo | Descripción |
|---|---|---|
| D | Riñonal | Deveui - Identificador de dispositivo único. |
| mi | R/W | Appeui - Identificador único de la aplicación. |
| K | R/W | AppKey: utilizado en OTAA para generar claves de sesión. |
Para usar el valor predeterminado sobre la activación del aire (OTAA), deberá registrar su dispositivo con su dispositivo EUI
El dispositivo EUI es una dirección única proporcionada por el microcontrolador ATMEGA328P. Para recuperar esto, escriba la consola serie:
D
Vaya a la red Things y abra la aplicación a la que desea agregar un dispositivo y haga clic en Registro del dispositivo.

Ahora que hemos registrado el dispositivo, podemos activar la conexión desde nuestro dispositivo en sí. La activación significa que el dispositivo utilizará la clave de aplicación generada para negociar claves de sesión para una mayor comunicación.
Vaya a la descripción general del dispositivo y copie la aplicación de 8 bytes EUI. Ahora, debe enviar el comando "E" con el valor obtenido a través del puerto serie del dispositivo:
E: 70B3D57ED0038147
Repita el mismo proceso para enviar la clave de aplicación de 16 bytes:
K: 7B4F7BC85D064898DB39214D7607440E
Ahora, reinicie el dispositivo y se registrará automáticamente en la red.

Las claves de sesión no se almacenan en memoria no volátil, por lo que se renegocian cada vez que el dispositivo se enciende. Este comportamiento no es el más apropiado y se revisará en futuras versiones.
Obtener los Gerbers para la fabricación de PCB aquí.
| Nombre | Reposo | Descripción |
|---|---|---|
| Arduino Pro Mini | 1 | PRO MINI ARMEGA328P 3,3V 8MHz |
| RFM95W | 1 | RFM95W 868-915MHz Lora SX1276 Transceptor |
| DC-DC Buck | 1 | Salida fija de 3.3V, entrada 5V-24V |
| Resistencia 2.2k | 1 | 2.2k resistencia SMD 0805 |
| Resistencia 4.7k | 3 | 4.7k resistencia SMD 0805 |
| Condensador 4.7 UF/6.3 V | 1 | 4.7 condensador SMD UF 0805 |
| LED SMD | 1 | LED SMD 0850 |
| Caminata | 1 | Cambiar 4 pin SMD de metal |
| Terminal de tornillo 01x03 | 2 | 3P - Pitch 3.5/3.96 mm de tornillo Conector de bloque de terminal PCB |
| Tornillo de tornillo 01x02 | 1 | 2P - Pitch 3.5/3.96 mm de tornillo Conector de bloque de terminal PCB |
| Conector U.FL-R-SMT | 1 | Conector U.FL-R-SMT |
| Antena 3DBI RP-SMA | 1 | Antena 3DBI RP-SMA Conector + 21 cm SMA Masculino/U.FL Cable de coleta |

