Comment Construire un Journal de Bord avec Node-RED et SQLite : Une Aventure Technique

Comment Construire un Journal de Bord avec Node-RED et SQLite : Une Aventure Technique

Avez-vous déjà voulu tenir un registre détaillé de vos voyages nautiques ? Nous aussi ! Et le mieux, c’est que nous l’avons fait en combinant des outils modernes comme Node-RED, SQLite et un Raspberry Pi 4. Dans cet article, nous vous expliquons étape par étape comment nous avons créé un système complet pour gérer les entrées de navigation, du matériel au logiciel. Préparez-vous à embarquer dans le monde du développement !

1. Le Matériel : La Boussole Numérique

Le cœur de notre projet est un Raspberry Pi 4, un petit mais puissant appareil qui agit comme le cerveau du système. Avec sa faible consommation d'énergie et sa capacité à exécuter des applications web, il est parfait pour des projets embarqués comme celui-ci.

Caractéristiques Clés :

Système d'exploitation : Raspberry Pi OS (basé sur Debian), léger et optimisé pour la RPi.
Connectivité : Wi-Fi et Bluetooth intégrés pour communiquer avec d'autres appareils.
Base de Données : Nous avons utilisé SQLite3, une base de données embarquée idéale pour les petits ou moyens projets.

2. Le Logiciel : Node-RED à la Rescousse

Node-RED est un outil de programmation visuelle basé sur des flux. Il est parfait pour connecter des API, des bases de données et des capteurs sans avoir besoin d'écrire beaucoup de code. Voici comment nous l'avons utilisé :

Flux Principaux :

Réception de Données NMEA :

  • Nous avons connecté un récepteur GPS via TCP pour recevoir des messages NMEA.
  • Nous avons traité ces données pour extraire des informations clés telles que la position, la vitesse et le cap.

API RESTful :

Nous avons créé des points de terminaison pour gérer les entrées du journal :

  • /api/add-entry : Ajouter de nouvelles entrées.
  • /api/edit-entry : Modifier des entrées existantes.
  • /api/delete-entries : Supprimer une ou plusieurs entrées.
  • /api/entries : Lister les entrées avec des filtres et une pagination.

Interface Web :

Nous avons utilisé HTML, CSS et JavaScript pour créer une interface conviviale où :

  • Voir toutes les entrées.
  • Filtrer par type (manuel/automatique) et plage de dates.
  • Ajouter, modifier ou supprimer des entrées.

3. Base de Données : SQLite3, Légère et Puissante

La base de données est l'ancre de notre système. Nous avons utilisé SQLite3 pour stocker toutes les entrées du journal. Voici un aperçu de la table principale :

CREATE TABLE entradas (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    estado_navegacion TEXT,
    categoria TEXT,
    ocurrio_hace TEXT,
    estado_mar TEXT,
    visibilidad TEXT,
    nubosidad INTEGER,
    mensaje TEXT,
    posicion TEXT,
    velocidad REAL,
    rumbo REAL,
    tipo_entrada TEXT,
    fecha DATETIME DEFAULT CURRENT_TIMESTAMP
);

Avantages de SQLite :

  • Pas de serveur séparé requis.
  • Idéal pour les petits ou moyens projets.
  • Compatible avec Node-RED grâce au nœud node-red-node-sqlite.

4. Structure des Fichiers : Tout à sa Place

Voici un arbre de la structure de fichiers que nous avons utilisée. Elle est simple mais efficace pour garder le projet organisé.

/Diario/
├── frontend/
│   ├── index.html          # Page principale : liste des entrées
│   ├── add-entry.html      # Formulaire pour ajouter/modifier des entrées
│   ├── edit-entry.html     # Formulaire pour modifier des entrées
│   └── css/
│       └── styles.css      # Styles personnalisés
├── static/
│   ├── assets/
│   │   └── bootstrap.min.css # Bootstrap pour un design responsive
│   └── js/
│       ├── main.js         # Scripts généraux
│       ├── list-entries.js # Logique pour lister les entrées
│       └── add-entry.js    # Logique pour ajouter/modifier des entrées
└── diario.db               # Base de données SQLite 

5. Fonctionnalités Clés

Filtres et Pagination

  • Filtrez les entrées par type (manuel/automatique) et plage de dates.
  • Utilisez la pagination pour gérer de grands volumes de données.

Entrées Automatiques Grâce au récepteur GPS, nous pouvons enregistrer automatiquement des données telles que la position, la vitesse et le cap.

Interface Intuitive

  • Design propre et réactif avec Bootstrap.
  • Champs désactivés ou en lecture seule clairement différenciés.

6. Réflexions Finales

Ce projet est un exemple parfait de la façon de combiner matériel et logiciel pour résoudre des problèmes réels. Avec un Raspberry Pi 4, Node-RED et SQLite, nous avons créé un système robuste et évolutif qui peut s’adapter à différents besoins.

Que faire ensuite ?

  • Migrer vers une base de données plus robuste comme PostgreSQL si le projet grandit.
  • Ajouter des graphiques pour visualiser les données historiques.
  • Intégrer des capteurs supplémentaires pour mesurer la température, l’humidité, etc.

Article précédent