L'objectif de ce projet est de fournir une plate-forme matérielle / logicielle open source pour le développement rapide et à faible coût des nœuds de capteurs Lorawan. Il se compose d'un module Arduino Pro Mini, d'un module de communication LORA RMF95W, d'un convertisseur Buck DC-DC et de quelques composants pour simplifier la connexion à différents capteurs.

Téléchargez le référentiel et les sous-modules de mise à jour:
$ 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 vous souhaitez modifier le code source ou programmer vos appareils, il est fortement recommandé d'utiliser le code Visual Studio et le plugin Platformoo. Ouvrez simplement le répertoire "firmware" avec Visual Studio Code et l'ensemble du projet sera prêt à l'emploi.
Vous devez créer un nouveau fichier .cpp dans lequel vous implémentez les routines de communication avec le capteur. Si vous utilisez le schéma suivant, vous n'aurez qu'à ajouter la communication avec le capteur. La fonction Sensors_update () est exécutée périodiquement et une fois l'acquisition du capteur terminée, les données sont envoyées par la couche de communication 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
Pour compiler le code de ce nouveau capteur, vous devrez ajouter au fichier de configuration PlatformoIo.ini un nouvel environnement de build.
[env:pro8MHzatmega328_SENSORNAME]
platform = atmelavr
board = pro8MHzatmega328
framework = arduino
build_flags = -DSENS_SENSORNAME
Vous pourrez maintenant sélectionner l'environnement de construction dans le code Visual Studio.
La configuration de l'appareil est effectuée via l'interface de ligne de commande (CLI) implémentée dans l'appareil.
Tout d'abord, connectez votre appareil au moniteur série Arduino via USB. Étant donné que l'Arduino Pro Mini n'a pas de puce FTDI embarquée, vous devrez utiliser un adaptateur USB-TTL. Réglez le taux de bauds sur 9600 et ouvrez le port série pour établir la connexion. Important: Pour réduire la consommation d'énergie de l'appareil, l'interface série n'est disponible que pendant 10 minutes après la mise sous tension de l'appareil.
| ID de commande | Taper | Description |
|---|---|---|
| D | R | Deveui - identifiant de périphérique unique. |
| E | R / w | APPEUI - Identificateur unique de l'application. |
| K | R / w | Appkey - Utilisé dans OTAA pour générer des clés de session. |
Pour utiliser la valeur par défaut sur l'activation de l'air (OTAA), vous devrez enregistrer votre appareil avec son appareil EUI
L'EUI de l'appareil est une adresse unique fournie par le microcontrôleur ATMEGA328P. Pour récupérer cela, saisissez la console série:
D
Accédez au réseau de choses et ouvrez l'application à laquelle vous souhaitez ajouter un appareil et cliquez sur l'appareil d'enregistrement.

Maintenant que nous avons enregistré l'appareil, nous pouvons activer la connexion à partir de notre appareil lui-même. L'activation signifie que l'appareil utilisera la clé d'application générée pour négocier des clés de session pour une communication plus approfondie.
Accédez à un aperçu de l'appareil et copiez l'application de 8 octets EUI. Maintenant, vous devez envoyer la commande "e" avec la valeur obtenue via le port série de l'appareil:
E: 70B3D57ED0038147
Répétez le même processus pour envoyer la clé d'application de 16 octets:
K: 7B4F7BC85D064898DB39214D7607440E
Maintenant, redémarrez l'appareil et il s'inscrira automatiquement sur le réseau.

Les clés de session ne sont pas stockées dans la mémoire non volatile afin qu'elles soient renégociées chaque fois que l'appareil est allumé. Ce comportement n'est pas le plus approprié et sera examiné dans les versions futures.
Obtenir les gerbers pour la fabrication de PCB ici.
| Nom | Anmouner | Description |
|---|---|---|
| Arduino Pro Mini | 1 | Pro Mini Armgega328p 3,3V 8MHz |
| RFM95W | 1 | RFM95W 868-915MHz Lora SX1276 |
| Buck DC-DC | 1 | Sortie fixe 3,3 V, entrée 5v-24V |
| Résistance 2.2k | 1 | Résistance SMD 2.2k 0805 |
| Résistance 4.7k | 3 | RESISTRE SMD 4.7K 0805 |
| Condensateur 4.7 UF / 6,3 V | 1 | 4.7 Condensateur SMD UF 0805 |
| SMD LED | 1 | LED SMD 0850 |
| Commutateur DIP | 1 | Interrupteur 4 broches en métal SMD |
| Borne à vis 01x03 | 2 | 3P - Pitch 3.5 / 3,96 mm Vis PCB Terminal Block Connecteur |
| Borne à vis 01x02 | 1 | 2p - Pitch 3.5 / 3,96 mm Vis PCB Terminal Block Connecteur |
| Connecteur u.fl-r-smt | 1 | Connecteur u.fl-r-smt |
| Antenne 3DBI RP-SMA | 1 | Antenne 3DBI RP-SMA Connecteur + 21cm SMA Male / U.FL Câble en queue de cochon |

