Réaliser un multimètre avec un Raspberry Pi Zero

Réaliser un multimètre avec un Raspberry Pi Zero

Il y a quelques mois, la fondation Raspberry Pi annonçait un nouveau modèle de Raspberry : le Pi Zero. Ce nouveau modèle est une évolution du modèle A, en plus petit et surtout en moins cher. Cette semaine, nous avons reçu ce nouveau Raspberry Pi Zero. Pour le tester, nous avons décidé de réaliser un multimètre HDMI en branchant nos capteurs USB au Raspberry Pi Zero.


Le Raspberry Pi Zero


Ce nouveau modèle a surtout fait parler de lui pour son prix très agressif de 5$. Mais pour pouvoir proposer un tel tarif, il a fallu rogner sur la connectique. Voilà ce qui est disponible:

  • un port d'alimentation (micro B)
  • un port USB Host (micro B)
  • un port micro HDMI
  • un port microSD


D'autres ports (GPIO, audio, etc) sont disponibles mais les connecteurs ne sont pas inclus, et pour les utiliser il faut sortir le fer à souder. Par ailleurs, le Raspberry Pi Zero ne possède ni carte réseau ni connectique bluetooth.

Le port USB


La toute première version du Raspberry souffrait d'une implémentation USB très perfectible. D'une part, le port USB ne pouvait fournir que 100mA et, d'autre part, des paquets USB étaient perdus par le chip. Qu'en est-il pour cette nouvelle version?

La première bonne nouvelle est que le port USB est capable d’alimenter correctement les périphériques branchés. Nous avons branché un hub USB (non alimenté), un clavier, une souris, une clef USB et un Yocto-Meteo sur l'unique port USB du Raspberry et tout fonctionnait parfaitement. Attention, cela ne veut pas dire qu'il est possible de brancher n'importe quoi sur le port USB. Dans notre test, chaque périphérique consommait moins de 100mA. Si vous branchez 4 Yocto-PowerColor, il faut impérativement alimenter le hub USB.

Le Raspberry Pi Zero est capable d'alimenter un hub USB et 4 autres modules USB
Le Raspberry Pi Zero est capable d'alimenter un hub USB et 4 autres modules USB



Autre bonne nouvelle, tout comme avec le Raspberry Pi 2 et Pi B+, le trafic USB est fiable et aucun paquet USB est perdu.

Exemple d'utilisation


Pour tester le Raspberry Pi Zero, nous allons réaliser un "multimètre HDMI". Le but est simplement d'afficher sur la sortie HDMI la valeur courante de n'importe quel senseur Yoctopuce branché sur le port USB.

Pour le hardware, nous avons besoin de

  • Un Raspberry Pi Zero (ou n'importe quel autre Raspberry Pi)
  • Un Yocto-Watt (ou n'importe quel autre senseur Yoctopuce)
  • Un câble USB OTG pour brancher le Yocto-Watt au Raspberry Pi
  • Une alimentation micro USB (ex: chargeur de téléphone)

Avec un câble USB OTG, on peut brancher n'importe quel module Yoctopuce au Pi Zero
Avec un câble USB OTG, on peut brancher n'importe quel module Yoctopuce au Pi Zero



L'application est en fait une simple page HTML avec quelques lignes de JavaScript. Cependant, pour que la page web puisse accéder au port USB, il faut aussi lancer le VirtualHub. Le code JavaScript ne présente pas de difficulté majeure et est disponible ici.

Lancer le VirtualHub dans un terminal et ouvrir la page HTML avec un browser est très simple et permet de vérifier que tout est branché correctement. La difficulté consiste à installer cette application sur le Raspberry et surtout à configurer le Raspberry Pi pour qu'il affiche automatiquement cette page HTML une fois qu'il a démarré. Ce problème est loin d'être trivial, surtout avec un Raspberry Pi qui n'a qu'un seul port USB et aucune carte réseau. Il est possible de copier l’application et les fichiers nécessaires à l'aide d'une clef USB, ou d'utiliser une carte réseau USB, mais il existe une solution plus simple.

Le Raspberry Pi 2 et le Raspberry Pi Zero sont suffisamment semblable pour qu'une image Linux fonctionne sur le deux machines. En effet une image standard de la dernière version de Raspbian fonctionne à la fois sur le Raspberry Pi 2 et Pi Zero. Il suffit donc d'utiliser un Raspberry Pi 2 durant l'installation. De cette manière pour l'installation, vous avez non seulement une carte réseau mais aussi 4 ports USB où vous pouvez brancher directement le clavier et la souris. Une fois que le système fonctionne, il suffit de déplacer la carte microSD sur le Pi Zero et le tour est joué.

L’installation se découpe en plusieurs étapes:

  1. Téléchargement et installation du VirtualHub
  2. Téléchargement et installation de l'application
  3. Installation du browser Midori
  4. Configuration des scripts de démarrage


Téléchargement et installation du VirtualHub


Le VirtualHub se télécharge sur notre site. Le fichier zip contient un fichier LISEZMOI.txt qui explique comment lancer automatiquement le VirtualHub au démarrage pour chaque platforme.

Pour le Raspberry Pi, vous pouvez tout effectuer (téléchargement et installation) depuis un terminal avec les commandes suivantes:

mkdir /home/pi/vhub
cd /home/pi/vhub
wget http://www.yoctopuce.com/FR/downloads/VirtualHub.linux.22835.zip
unzip VirtualHub.linux.22835.zip
sudo chmod +x armhf/VirtualHub
sudo cp armhf/VirtualHub /usr/sbin
sudo cp startup_script/yVirtualHub /etc/init.d/
sudo chmod +x /etc/init.d/yVirtualHub
sudo update-rc.d yVirtualHub defaults
sudo reboot



Téléchargement et installation de l'application


Pour l'application, il suffit de télécharger le fichier zip qui contient la page HTML et la librairie Yoctopuce pour JavaScript.

Cette opération peut être automatisée avec les commandes suivantes:

cd /home/pi/
wget http://www.yoctopuce.com/FR/interactive/hdmi_multimeter/hdmi_multimeter.zip
unzip hdmi_multimeter.zip



Installation du browser Midori


Nous avons décidé d'utiliser le browser web Midori, car il possède un mode plein écran qui affiche uniquement le contenu de la page web. Il possible d'utiliser d'autres browsers web comme l'indique la page https://github.com/elalemanyo/raspberry-pi-kiosk-screen.

Pour pouvoir lancer Midori lors du démarrage, il faut aussi installer matchbox (un gestionnaire de fenêtres) et unclutter (un package qui permet de masquer le curseur de la souris quand il est immobile).

Les commandes suivantes installent Midori et les packages nécessaires.

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install midori x11-xserver-utils matchbox unclutter



Configuration des scripts de démarrage


Pour que Midori se lance correctement au démarrage, il faut créer un petit script shell qui démarre unclutter et matchbox avant d'afficher la page HTML dans Midori. C'est ce shell script qui sera lancé automatiquement par le serveur X à la fin du boot.

Le contenu du shell script /home/pi/fullscreen.sh

unclutter &
matchbox-window-manager &
midori -e Fullscreen -a file:///home/pi/hdmi_multimeter/index.html



Il ne faut pas oublier d'ajouter les droits d’exécution à ce shell script. Ceci peut être fait avec la commande chmod:

sudo chmod 755 /home/pi/fullscreen.sh



Pour finir, il faut modifier le fichier /home/pi/.config/lxsession/LXDE-pi/autostart pour qu'il ressemble à ceci:

@xset s off
@xset -dpms
@xset s noblank
@/home/pi/fullscreen.sh



Une fois toutes ces étapes réalisées, l'application devrait se lancer automatiquement à la fin du démarrage du Raspberry Pi. Ensuite, il suffit de replacer la carte microSD dans le Raspberry Pi Zero pour avoir un système ultra compact.

  
Demo time



Conclusion


Le Raspberry Pi Zero est une machine très limitée (pas de carte réseau et peu de ports) mais si l'on a besoin uniquement d'ajouter un peu de logique à un système, cette machine est très bien. Qui plus est, elle fonctionne très bien avec nos modules USB :-)

Commenter 2 commentaires Retour au blog



1 - seb (Yocto-Team)Mardi 16 mai 2017 13H35

Malheureusement, les images Raspbian depuis mars 2016 ont un bug et nos modules ne sont plus correctement détectés sur un Raspberry Pi Zero. Nous avons fait des tests avec un analyseur USB et avons constaté que de temps en temps le Raspberry Pi Zero envoie des paquets USB corrompus. Ce problème n'affecte que les Raspberry Pi Zero avec les dernières images Raspbian. La même image avec le même module fonctionnent parfaitement sur un Raspberry Pi 2 ou 3.

Nous sommes entrain de rapporter ce bug l'équipe de Raspbian et essayerons de les aider à résoudre ce problème.

2 - seb (Yocto-Team)Vendredi 23 juin 2017 12H38

UPDATE: Le bug a été fixé et sera inclus dans la prochaine image Raspbian. D'ici là, il est possible de mettre à jour manuellement le firmware du Raspberry Pi pour obtenir le fix.

Voici les commandes pour mettre à jour le firmware du Raspberry Pi:

sudo apt-get install rpi-update
sudo rpi-update
sudo reboot

Pour plus de détails vous pouvez consulter le thread du bug: https://github.com/raspberrypi/linux/issues/2024

Yoctopuce, get your stuff connected.