Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Comme je me demandais souvent quelle bande passante est actuellement fournie par mon FAI (j'utilise un modem LTE pour la connexion Internet), j'ai pensé à un système de surveillance de la bande passante. Étant donné que le système doit être compact et économiser de l'énergie, j'ai choisi un Raspberry Pi Zero comme composant central. Le Raspberry est connecté au modem via WLAN, donc les problèmes WLAN peuvent également être détectés.
Fournitures
- Raspberry Pi Zéro WH
- Écran e-ink Waveshare (module e-paper de 2,9 pouces)
- Convertisseur DC-DC (par exemple DEBO DCDC 20W)
- LED RVB (retirée d'un ancien appareil)
- Bouton
- Changer
- Module relais (ex. module relais 2 voiesmodule relais 2 voies)
- Connecteur mâle + connecteur femelle (tous deux adaptés à la taille de la prise d'alimentation de votre modem)
- Boîtier imprimé en 3D
Étape 1: Fonctionnalités
- Le Raspberry Pi Zero est connecté via WLAN, teste la vitesse de téléchargement et effectue une mesure de ping toutes les demi-heures. Une version en ligne de commande de speedtest.net est utilisée comme base pour les mesures.
- Le résultat de la mesure de la bande passante et du ping est affiché sur un écran e-ink. L'heure de la mesure est également indiquée.
- Si la vitesse de téléchargement tombe en dessous d'une valeur seuil définie, un relais éteint et rallume le modem pendant une courte période. Le modem est ainsi réinitialisé sans aucune modification de l'appareil (seule l'alimentation est interrompue).
- Un bouton en façade de l'appareil est disponible pour déclencher manuellement la mesure de la bande passante.
- Les valeurs mesurées sont affichées sur un tableau de bord Ubidots (Portail IOT). Dans la vue d'ensemble, vous pouvez également voir l'historique des valeurs mesurées et les raisons des dernières réinitialisations.
- Dans le portail IOT, vous pouvez également trouver un bouton pour réinitialiser à distance le modem.
- Le moniteur de bande passante utilise l'alimentation du modem. Aucun approvisionnement supplémentaire nécessaire. Le relais interrompt la transmission de l'alimentation au modem - la framboise reste allumée.
Étape 2: Câblage
Dans la première image, vous pouvez voir la conception interne du moniteur de bande passante:
Les principaux composants sont:
- Bouton poussoir
- Affichage à encre électronique
- Raspberry Pi Zéro
- Module de relais
- LED RGB + Résistances (selon la LED RGB que vous utilisez)
- Changer
- Convertisseur DC-DC
- Connecteur Femelle
La deuxième photo montre un schéma du câblage. Le pôle positif de la tension d'alimentation est alimenté via le commutateur vers le convertisseur de tension DC-DC (qui convertit la tension d'alimentation 12V du routeur en 5V pour le Raspberry) et via le relais (via la broche normalement connectée) vers le connecteur de sortie. Ainsi, le modem est également alimenté lorsque le moniteur de bande passante est éteint.
La mesure de la bande passante peut être démarrée manuellement via un bouton. Une LED RVB permet de visualiser les différents états de fonctionnement.
La connexion entre le Raspberry Pi et l'écran e-ink n'est pas illustrée dans le schéma de circuit. Connectez l'écran selon le tableau et le brochage ci-dessus.
Étape 3: Impression 3D et construction de la poursuite
Les pièces suivantes sont nécessaires pour le boîtier (voir l'image ci-dessus):
- partie inférieure
- partie supérieure
- de face
- arrière
- 4x monture
Toutes les pièces peuvent être imprimées sans supports. Vous pouvez également trouver les fichiers et certaines de mes autres conceptions sur Thingiverse:
L'écran peut être fixé au panneau avant avec les supports et un ruban adhésif double face. L'interrupteur à bouton et le connecteur femelle sont vissés sur le panneau arrière et arrière. J'ai utilisé des vis 3x20mm pour relier les deux moitiés du boîtier. Les tolérances sur les rainures des panneaux avant et arrière sont relativement serrées. Si nécessaire, les panneaux avant et arrière doivent être poncés sur la tranche (à l'intérieur pour éviter de détruire la surface).
Étape 4: Configuration du Raspberry PI
Ce guide d'installation est basé sur la compilation de plusieurs instructions d'installation provenant de différentes sources (fabricants d'écrans e-Ink, …). Pour moi, les instructions ont conduit au résultat souhaité. Comme je ne suis pas un expert Linux, aucune optimisation ou similaire n'a été effectuée. Je suis conscient qu'il existe sûrement des solutions meilleures et plus efficaces.
Supposons que vous avez déjà installé Raspbian sur votre Pi (il existe de nombreux tutoriels sur la façon d'installer le système d'exploitation de base) et que vous avez un écran (via miniHDMI), une souris et un clavier connectés. Une connexion WLAN correctement configurée au routeur ou à Internet est également supposée. Sauf indication contraire, toutes les procédures d'installation sont effectuées dans le terminal.
Installez le bureau à distance (pour accéder au PI depuis votre ordinateur):
sudo apt-get mise à jour
sudo apt-get
installer xrdp
ou vous pouvez également travailler sans tête via ssh (voir par exemple
Changer le mot de passe:
www.raspberrypi.org/forums/viewtopic.php?t=193620
Installer speedtest:
sudo
apt-get installer python-pip
sudo pip installer speedtest-cli
pour tester si l'installation a réussi, exécutez Speedtest dans le terminal:
speedtest-cli
si tout est correct, vous devriez obtenir quelque chose comme dans la première image ci-dessus.
Installer le câblagePI
sudo apt-get installer git-core
git clone git://git.drogon.net/wiringPi
câblage cdPi
./construire
(voir aussi
Alternative:
sudo apt-get install câblagepi
(voir
Installer BCM2835
(voir
Téléchargez bcm2835-1.60.tar.gz (ou une version plus récente si disponible)
goudron zxvf bcm2835-1.60.tar.gz
cd bcm2835-1.60
./configurer
Fabriquer
sudo faire vérifier
sudo faire installer
Installer la bibliothèque d'imagerie Python
sudo apt-get install python-imaging
Alternative:
sudo apt-get installer python-pil
Activez la fonction I2C.
Exécutez la commande suivante pour configurer votre carte Raspberry Pi:
sudo raspi-config
Sélectionnez Options d'interface -> I2C -> oui, pour démarrer le pilote principal I2C. Ensuite, vous devez également modifier le fichier de configuration. Exécutez la commande suivante pour ouvrir le fichier de configuration:
sudo nano /etc/modules
Ajoutez les deux lignes suivantes au fichier de configuration
i2c-bcm2708
i2c-dev
Voir aussi
Activer la fonction SPI
Exécutez la commande suivante pour configurer votre carte Raspberry Pi:
sudo raspi-config
Sélectionnez Options d'interface -> SPI -> oui, pour démarrer le pilote principal SPI.
Installez des polices supplémentaires:
sudo apt-get install ttf-mscorefonts-installer
Téléchargez et installez les polices (Roboto + Droid)
gksudo
pcmanfm
Pour démarrer le gestionnaire de fichiers avec les privilèges root et copier les polices truetype dans le dossier /usr/share/fonts/truetype
Alternative:
Copiez les polices dans le dossier Téléchargements avec WinSCP (ssh doit être activé pour utiliser WinSCP)
sudo cp -r /home/pi/Downloads/droid /usr/share/fonts/truetype
sudo cp -r /home/pi/Downloads/roboto /usr/share/fonts/truetype
Vous avez besoin de privilèges root pour accéder au dossier des polices. Peut-être qu'il existe de meilleures façons de le faire (comme mentionné précédemment, je ne suis pas un expert Linux), mais les deux méthodes ont fonctionné pour moi.
Fichiers Python:
Utilisez le gestionnaire de fichiers pour créer un nouveau dossier "bandwidth_monitor"
Copiez tous les fichiers dans le répertoire bande passante_monitor
Rendre les fichiers python et le script exécutables
chmod +x *.py
chmod +x speedtest-cron.sh
Configurer crontab
crontab -e
Crontab est utilisé pour planifier l'exécution du programme, par ex. test de vitesse toutes les 30 min. Ajoutez les lignes suivantes à votre crontab (voir également la deuxième figure):
@reboot /usr/bin/python /home/pi/bandwidth_monitor/post_restart_message.py &
@reboot sleep 30 && /usr/bin/python /home/pi/bandwidth_monitor/poll_test_now_button.py */30 * * * * /home/pi/bandwidth_monitor/speedtest-cron.sh */3 * * * * /usr/ bin/python /home/pi/bandwidth_monitor/poll_killswitch.py 13 03 * * * /usr/bin/python /home/pi/bandwidth_monitor/refresh_display.py
Description des tâches planifiées:
- au redémarrage, le message de redémarrage est écrit sur le tableau de bord IOT
- au redémarrage le sondage test_now_button est lancé
- toutes les 30 minutes une mesure de bande passante est effectuée
- toutes les 3 minutes, l'état du bouton de réinitialisation à distance (sur le tableau de bord IOT) est vérifié
- une fois par jour, un cycle de rafraîchissement de l'affichage est lancé.
Voir la section des logiciels pour une brève description des programmes.
Étape 5: Logiciel
Le logiciel est découpé en plusieurs fichiers/programmes:
bande passante_monitor_0_4.py est le programme principal qui est invoqué par Crontab toutes les demi-heures. Il effectue un test de bande passante (via la version en ligne de commande de speedtest.net). Pendant le test, la LED RVB est bleue. Si la bande passante est supérieure au seuil sélectionné, la valeur est affichée sur l'écran e-ink (avec un horodatage) et exportée vers le tableau de bord Ubidots. Si la bande passante est inférieure au seuil, la LED devient rouge et la mesure est répétée après un court délai. Après 3 tentatives négatives, le relais est activé et ainsi l'alimentation du modem est interrompue. Le code de réinitialisation (valeur=2) est écrit dans la section du journal.
poll_killswitch.py lit l'état d'une variable booléenne sur le tableau de bord. Si killswitch_state est vrai le relais est activé et l'alimentation du modem est interrompue. La LED RVB devient verte pendant l'interrogation du killswitch. Après la réinitialisation, le killswitch_state est défini sur false et une entrée dans la section journal du tableau de bord est générée (valeur=1).
poll_test_now_button.py attend que le bouton poussoir sur le panneau avant du boîtier soit enfoncé. En activant le bouton, une mesure de bande passante est déclenchée manuellement. Au démarrage du programme (au redémarrage du Raspberry Pi) la LED RVB clignote en rouge.
post_restart_message.py écrit le code de réinitialisation (valeur = 3) dans la section journal du tableau de bord. Cela indique que le moniteur de bande passante a été redémarré. Pendant le démarrage du programme, la LED RVB clignote en bleu.
test_LED.py et test_relay.py sont des scripts simples qui peuvent être utilisés pour tester la fonction matérielle de la LED RVB et du relais.
epdconfig.py et epd2in9.py sont des pilotes de périphérique pour l'affichage e-ink fourni par Waveshare.
Afin de permettre aux programmes d'accéder au tableau de bord Ubidots, vous devez ajouter vos jetons individuels et les noms d'appareils ou de variables (si vous utilisez des notations différentes). Recherchez une section comme celle montrée dans l'image ci-dessus (remplacez XXXXXXXX par votre jeton).
Des tutoriels complets sur la façon de créer le tableau de bord et d'intégrer le tableau de bord dans un programme Python sont disponibles directement sur la page Ubidots (https://help.ubidots.com/en/) ou via Google.
Étape 6: Tableau de bord IOT
Le tableau de bord hébergé par Ubidots (voir https://ubidots.com) contient plusieurs zones qui sont brièvement décrites ci-dessous.
- Séquence temporelle de la vitesse de montée et de téléchargement. Toutes les demi-heures, une nouvelle valeur est insérée dans le diagramme.
- Déroulement temporel du temps de ping mesuré. Toutes les demi-heures, une nouvelle valeur est insérée dans le diagramme.
- Séquence temporelle de la vitesse de téléchargement moyenne. La valeur moyenne sur 24 heures est calculée et écrite sur le diagramme.
- Représentation sous forme de feuille de calcul des valeurs de mesure actuelles, y compris l'horodatage.
- Bouton de la télécommande pour réinitialiser le modem via Internet. La requête se produit toutes les 3 minutes, c'est-à-dire que l'exécution de l'action peut prendre un certain temps.
- Enregistrement des dernières réinitialisations incluant la raison de la réinitialisation (déclenchement à distance, coupure ou perte de tension, passage en dessous de la bande passante minimale)
Des tutoriels complets sur la façon de créer le tableau de bord et d'intégrer le tableau de bord dans un programme Python sont disponibles directement sur la page Ubidots (https://help.ubidots.com/en/) ou via Google.