Vélo porte containers

Il reste encore quelques Raspberry Pi Zero W.  Et si l'on s'en servait comme d'un porte container pour le vélo ? L'objectif est de faire un éclairage à base de neopixel, géré par un container Docker... Pour un vélo. Si, si !

Sur Aliexpress on peut trouver des "UPS" (Uninterruptible Power Supply), des "onduleurs" pour quelques euros, dans lequel on peut installer deux batteries 18650. Certains modèles proposent un seul emplacement, ou quatre...

Dans les mêmes magasins virtuels, on peut aussi trouver des batteries 18650, 8€ pour quatre batteries de 3Ah.

On rappelle que ce sont des cellules qui sont chargées à 4.2V et qui se déchargent jusqu'à 3.2V (plus bas on "tue" la cellule.

C'est aussi chez Aliexpress que l'on trouve des neopixels rings, des anneaux de LEDs adressables (chaque LED est composée de 3 LED RVB). Bien sûr on trouve toutes les tailles, de la simple LED, à des anneaux de 45 LEDs, en passant par 6, 12, 24, 35...

Ces anneaux disposent de quatre connexions : deux pins pour l'alimentation, une pour DI (Digital In) et une pour DO (Digital Out) dans le cas ou l'on souhaite les chainer...

Ce genre de babioles s'anime via des Arduinos ou des SBCs. Arduino, c'est du pur code en C, ça consomme moins, mais c'est moins rigolo qu'une Single Board Computer qui dispose d'un vrai système d'exploitation avec lequel on peut jouer !

La Orange Pi Zero 2W n'est pas un foudre de guerre, mais ce n'est pas cher, il y a du Wifi (pour du headless c'est obligatoire) et on peut installer un système d'exploitation fiable. Pour utiliser les GPIOs il faut souder un connecteur, de quoi s'amuser un peu avec le fer à souder.

Le package (carte + OS)  propose quelques avantages : on peut installer une version 64 bits de l'OS (bien meilleure pour ce que l'on souhaite faire), désactiver des cœurs et réduire la vitesse pour consommer moins.

Installer l'OS

Mmm... Avec la dernière version de l'OS il faut définir avec RPI-Imager les paramètres réseaux et SSH à l'avance, ce que j'ai effectué, mais je n'ai jamais réussi à parvenir à mes fins. Au bout de deux heures de tergiversations insupportables au cube, j'abandonne.

Du coup j'installe la version précédente de l'OS. Le réseau fonctionne mais ssh non... J'ai soudé un câble USB sur les pastilles pour pouvoir accéder à la pi avec un clavier, trouvé un adaptateur pour le connecteur hdmi, lancé raspi-config et activé SSH...

Tout ça, c'est vraiment pénible. Ca donne l'idée que tout est fait pour un système "avec le bureau", le clickodrome ou l'on configure tout à la souris. Moi je veux un système headless qui ne m'emmerde pas, et là ce n'est pas gagné.

Enfin bon, au bout d'un moment j'arrive à me connecter à la machine. On va installer Docker sur la machine :

> sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

> curl -fsSL https://get.docker.com -o get-docker.sh

> sudo sh get-docker.sh

> sudo systemctl enable docker

Il faut être un peu patient... La petite Raspberry n'est pas une formule 1, mais après 15 minutes on est récompensé.

Docker est présent.

Pour avoir :

L'installation se passe avec la ligne suivante :

wget -qO- https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/install_portainer.sh | bash

Éventuellement  curl -fsSL https://tailscale.com/install.sh | sh

L'installation de portainer est très rapide, le script a défini que le port sera sur 9000.

Ci dessous, je me connecte à la Pi sur le port 9051 et portainer va m'aider à gérer les containers.

En bas de l'écran je vois bien que j'ai 4 CPU et 439 MB RAM, héhé !

A noter que malgré les ressources limitées, tout cela fonctionne confortablement.

L'avantage de Portainer configuré par pi-hosted c'est que l'on dispose de toute une liste d'application déjà configurées.

Copier le lien dans Settings / Settings / App Template : https://raw.githubusercontent.com/novaspirit/pi-hosted/master/template/portainer-v2-arm64.json

Ensuite dans la liste des Templates on va installer Pixel-server...

Avant d'installer le container :

créer le dossier /portainer/Files/AppData/Config/pixel-server

Passer la ligne de commande suivante :

wget -qO- https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/tools/install_pixel-server.sh | bash

Dans le dossier /portainer/Files/AppData/Congi/pixel-server le script d'installation génère trois fichiers :

Dans le fichier auth.cfg j'ai ajouté la ligne suivante :

network_allow_auth = 0.0.0.0

Et dans le fichier pixelserver.cfg j'ai ajouté les lignes suivantes :

ledcount=16

gpiopin=18

ledfreq=800000

leddma=5

ledmaxbrightness=50

ledinvert=False

ledchannel=0

striptype=RGB

## GRB

algorithm=Argon2

Et aussi une modification des droits du fichier qui semble requise :

sudo chmod 775 pixelserver.cfg

Crée un user pour Pixel-Server

Quand le container est lancé, il faut créer un utilisateur. Pour cela, avec Portainer, on ouvre une session dans la console : Containers>pixel-server>Console en sh plutôt qu'en bash.

Par exemple, si mon user password c'est brigitte / brigitte, alors ça donnera ça (pardon pour les lignes en trop, mais je cherche comme tout le monde) :


Retour dans le navigateur dans Portainer : je lance l'installation du container.

Après quelques secondes, dans la liste des containers on voit que pixel-server fonctionner.

Il est disponible sur le port 85... Mais avant d'aller sur le port il faut créer un utilisateur. Cela se passe sur la ligne de commande :

sudo docker exec -it pixel-server sh -c 'python3 createadmin.py <user> <password> >> users.cfg'

Ensuite, dans le navigateur, on peut se rendre sur le port 85, ouvrir une session et configurer l'animation :

Et on clique en haut à droite sur le bouton Apply.

Voilà, on a fabriqué un feu arrière de vélo (à condition d'avoir choisi du rouge) en toute simplicité. Ca change d'une pile avec une résistance et une mauvaise LED. Là, nous sommes dans le futur, il ne nous manque plus qu'un peu d'IA pour parfaire le tout. Peut-être une autre fois.

Access point

On transforme la Raspberry en Access Point. Cela va faire que l'on peut se connecter "de partout" sur le réseau proposé par la Raspberry, par exemple avec le smartphone, pour configurer ou stopper le néopixel ring.

Il y a une recette de cuisine ici : https://thepi.io/how-to-use-your-raspberry-pi-as-a-wireless-access-point/ et ça peut marcher...

J'ai eu un peu de mal de mon côté et ci-dessous ce que j'ai effectué pour que cela fonctionne :

# install des paquets

sudo apt install hostapd

sudo apt install dnsmasq

# stop des services (a prirori inutile)

sudo systemctl stop hostapd

sudo systemctl stop dnsmasq

# edition

sudo nano /etc/dhcpcd.conf

# ajout des lignes à la fin

interface wlan0

static ip_address=192.168.4.1/24

nohook wpa_supplicant


# edition dnsmasq - peut être que le fichier n'existe pas

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

sudo nano /etc/dnsmasq.conf

# ajouter

interface=wlan0

dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h


# editer hostpad

sudo nano /etc/hostapd/hostapd.conf

# copier


interface=wlan0

ssid=bike_server

hw_mode=g

channel=7

wmm_enabled=0

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=MotDePasseComplexe007

wpa_key_mgmt=WPA-PSK

wpa_pairwise=TKIP

rsn_pairwise=CCMP


# Editer

sudo nano /etc/default/hostapd

# Indiquer où se trouve le fichier de conf

DAEMON_CONF="/etc/hostapd/hostapd.conf"



# démasaquer le service

sudo systemctl unmask hostapd


sudo chown root:hostapd /etc/hostapd/hostapd.conf


# créer le groupe

sudo addgroup hostapd

# m'ajouter

sudo adduser renaud hostapd

# permissions

sudo chmod 640 /etc/hostapd/hostapd.conf


# activer au démarrage

sudo systemctl enable hostapd

sudo systemctl enable dnsmasq


# démarrer les services

sudo systemctl start hostapd

sudo systemctl start dnsmasq




Quelques mesures

UPS sans charge (auto-décharge) :

Les deux batteries sont des 2600mAh.

L'alimentation du circuit ne coûte pratiquement rien en énergie. Je n'ai pas continué le test plus longtemps, on doit pouvoir tenir facilement 10 jours, peut être 30, à condition de ne rien tirer de la batterie.

Raspberry Pi 2W Access point avec le néopixel ring en mode flash, rouge

Si la batterie fait 20Wh de capacité, alors en va pouvoir fonctionner 16 heures sur la batterie. Ce qui n'est pas recommandé néanmoins, car la technologie Lithium-Ion déteste les décharge profonde : cela réduit le nombre de cycles (charges / décharges). Il vaut mieux recharger le plus souvent possible les cellules et ne pas descendre en descond de 20% de capacité.

La capacité totale de la batterie (ou du couple des batteries) est indiquée par le vendeur, mais il ne faut accorder aucune confiance aux chiffres annoncés. Un appareil tel que le Litokala fit le job pour une vingtaine d'euros, en indiquant par exemple combien d'énergie est injectée dans chaque 18650 chargée. 

Certains modèles permettent de réaliser la décharge en mesurant la quantité consommée.