✨ NeoBerry est un projet open-source ambitieux, pensé pour transformer votre Raspberry Pi en véritable station de contrôle numérique. Ce tableau de bord moderne et modulaire permet une gestion complète des fonctionnalités matérielles et systèmes : GPIO, Bluetooth, performances du processeur, température, accès réseau, tout y est centralisé.
Conçu en Python avec Flask pour le backend et JavaScript pour le frontend, NeoBerry offre une expérience utilisateur fluide, avec une interface pastel douce et responsive, adaptée à une utilisation tactile comme desktop.
🗂️ Architecture du projet
Le projet suit une organisation propre et modulaire, permettant une maintenance aisée, ainsi qu’un développement collaboratif :
NeoBerry/
├── LICENSE
├── NeoBerryTree.txt
├── README.txt
├── run_neoBerry.sh
├── install_neoBerry.sh
└── app/
├── app.py
├── core/
│ ├── __init__.py
│ ├── auth.py
│ ├── battery.py
│ ├── bluetooth.py
│ ├── gpio.py
│ ├── graph.py
│ ├── infosys.py
│ ├── network.py
│ ├── system.py
│ └── voltage.py
├── static/
│ ├── css/
│ │ ├── animations.css
│ │ ├── battery.css
│ │ ├── bluetooth.css
│ │ ├── gpio.css
│ │ ├── infosys.css
│ │ ├── index.css
│ │ ├── layout.css
│ │ ├── metrics.css
│ │ ├── reset.css
│ │ ├── terminal.css
│ │ ├── time.css
│ │ └── voltage.css
│ ├── img/
│ └── js/
│ ├── battery.js
│ ├── bluetooth.js
│ ├── gauges.js
│ ├── gpio.js
│ ├── graph.js
│ ├── infosys.js
│ ├── list.js
│ ├── main.js
│ ├── network.js
│ ├── status.js
│ ├── time.js
│ ├── utils.js
│ ├── voltage.js
│ └── watchdog.js
├── templates/
│ ├── index.html
│ └── login.html
└── utils/
├── __init__.py
└── gpio_helpers.py
Chaque fichier a une fonction précise, aucun répertoire n’est laissé vide ou inutile. Les fichiers core/
encapsulent les fonctionnalités métier (Bluetooth, GPIO, réseau, etc.), tandis que le JS est découpé intelligemment pour ne charger que ce qui est nécessaire.
*Vue de l’interface depuis le mode DEV – Via VMWare « Linux Ubuntu 25.04″*
🌐 Fonctionnalités détaillées
🔹 Gestion GPIO
NeoBerry vous permet de contrôler toutes les broches GPIO via une interface visuelle :
- Lecture des entrées numériques
- Activation/désactivation des sorties
- Support des interruptions futures
- Mode simulation automatique si lancé hors Raspberry Pi
🔹 Interface terminal simulé
Une zone inspirée d’un terminal UNIX, mais entièrement dynamique :
- Résultats du scan Bluetooth affichés en temps réel
- Curseur clignotant (▮) et scroll automatique
- Surlignage des périphériques sélectionnés (fond rose, texte blanc)
- Barre de scroll pastel personnalisée (teinte turquoise/rose)
Extrait JS côté client pour afficher les résultats :
function injectBluetoothDevices(devices) { const list = document.getElementById("paired-devices-list"); list.innerHTML = ""; devices.forEach(device => { const li = document.createElement("li"); li.textContent = `[ ${device.name} - ${device.mac} ]`; li.classList.add("device-line"); li.onclick = () => li.classList.toggle("selected"); list.appendChild(li); }); }
🔹 Bluetooth complet
Le module Bluetooth de NeoBerry est un des plus complets jamais proposés dans une interface Raspberry Pi :
- Activation/désactivation via
rfkill
- Scan avec
bluetoothctl
ouhcitool
- Affichage live dans la zone terminal
- Appairage via
agent on
et gestion PIN personnalisée - Suppression des appareils appairés
- Affichage de la puissance RSSI sous forme de jauge
🔹 Système et performances
- CPU, RAM, température, swap
- Module Batterie + Surveillance tension électrique
- Graphiques sur les dernières 24H : connexion internet + stabilité tension
- Interface canvas personnalisée (Cadran avec jauges aux couleurs dégradées)
- Réactualisation automatique côté client
🔹 Sécurité et login PAM
- Connexion avec identifiants Linux du système (via PAM)
- Aucune donnée personnelle stockée côté serveur
python-dotenv
pour la Flask Secret Key
🧪 Exemple de code : Activation GPIO et retour terminal
@app.route("/gpio/toggle", methods=["POST"]) def toggle_gpio(): data = request.get_json() pin = data.get("pin") state = data.get("state") GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, GPIO.HIGH if state else GPIO.LOW) return jsonify({"status": "ok", "pin": pin, "new_state": state})
fetch("/gpio/toggle", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ pin: 17, state: true }) });
⚙️ 1 – Installation
🔧 1.1 Installation manuelle (Environnement hors Raspberry Pi – mode DEV)
« `bash
git clone https://github.com/D-Goth/NeoBerry.git
cd NeoBerry
sudo apt install python3-flask python3-gpiozero python3-psutil python3-requests python3-werkzeug python3-gunicorn
python3.13 app/app.py« «
—
> Accédez ensuite à l’interface via :
> http://localhost:5000
🔧 1.2 Installation manuelle (Environnement Raspberry Pi – mode PROD)
« `bash
git clone https://github.com/D-Goth/NeoBerry.git
cd NeoBerry
chmod +x install_neoBerry.sh
sudo ./install_neoBerry.sh
chmod +x run_neoBerry.sh
sudo ./run_neoBerry.sh [–start, –stop, –restart, –status]« «
* ✅ Test lancement avec Gunicorn [Optionnel]
« `bash
cd app
gunicorn –bind 0.0.0.0:5000 app:app« «
⚙️ Utilisation du script run_neoBerry.sh
Démarrer NeoBerry
« `bash
./run_neoBerry.sh –start
« «
Arrêter NeoBerry
« `bash
./run_neoBerry.sh –stop
« «
Redémarrer NeoBerry
« `bash
./run_neoBerry.sh –restart
« «
Vérifier l’état de l’application
« `bash
./run_neoBerry.sh –status
« «
⚙️ Créer un service systemd → auto au démarrage
« `bash
sudo cp neoBerry.service /etc/systemd/system/flask-dashboard.service
sudo systemctl enable flask-dashboard
sudo systemctl start flask-dashboard« «
> Accédez ensuite à l’interface via :
> http://localhost:5000
—
🧪 2. Mode Test (hors Raspberry Pi)
NeoBerry peut être exécuté sur un environnement de test sans Raspberry Pi en activant le mode simulation des GPIO.
* : Créer et activer un environnement virtuel
« `bash
sudo apt install python3.13-venv
python3.13 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app/app.py« `
> L’application détectera automatiquement qu’elle ne tourne pas sur un Raspberry Pi et activera le mode simulation sur les broches GPIO.
🔭 Ce qui rend NeoBerry unique
- Aucun framework JS externe (Vue/React) — que du vanilla JS optimisé
- CSS pastel custom pour une interface accessible et douce
- Code structuré en modules clairs (auth, gpio, bluetooth, etc.)
- Adapté au tactile (responsive testé sur tablette et téléphone)
- Mode simulation automatique pour développement sans Raspberry Pi
📅 Liens utiles
🔧 NeoBerry est open-source, toute contribution est bienvenue.
⭐ Si ce projet vous plaît, laissez une étoile sur GitHub !