Raspberry Pi 3 B+
S'abrègera "rpi" par la suite
par
Michel
Vonlanthen HB9AFO
Mis à jour le 14 janvier 2022
Description de la mise en route de la
Framboise (rapsberry en anglais) à l'occasion d'un cours que j'ai
récemment suivi au
Microclub Lausanne.
Le but initial était de me familiariser avec Linux et, sous cet
aspect, c'est plutôt réussi. Mais ce n'est pas de la tarte d'où mon
envie de relater mes heurs et malheurs afin d'enlever les ronces
sous les pieds de mes copains qui voudront aussi s'y mettre.
Ce qui suit est donc dérivé des notes que j'ai prises
et du support du cours donné par Yves Masur au Microclub Lausanne en
novembre-décembre 2018. Je le remercie très sincèrement de m'avoir
ainsi permis de faire mes premiers pas en Linux sur le Rasperry Pi.
ATTENTION: A ce stade, le texte qui suit n'est qu'un pense-bête que j'ai écrit au fur et à mesure de ma fréquentation du cours et pas un cours de Raspberry Pi ou de Linux à proprement parler. Une fois le cours "digéré", il est possible que je le re-écrive afin qu'il soit vraiment lisible par un néophyte. Après chaque séance de cours, j'ai cependant refait toutes les manips décrites par ce texte et je peux assurer qu'elles fonctionnent. |
Data sheet (PDF en
anglais)
On peut l'acheter partout, et même chez Interdiscount pour 39,95 Fr! Caractéristiques en français sur le site LDLC
Pinout GPIO en détail
1. Préparation de la mémoire
La carte mémoire (32GB de préférence) doit être chargée avec le système d'exploitation du Raspberry Pi, Linux. Pour ma part, j'ai reçu la carte déjà chargée avec le système Raspian Stretch. Pour le faire soi-même:
Attention: Ne jamais retirer la carte mémoire alors que le rpi est sous tension sous peine de la détruire irrémédiablement. Prendre la même précaution avec le PC: ne retirer la carte lue, par exemple, sur un port USB qu'après avoir invoqué la procédure d'extraction des périphériques USB en cliquant sur l'icône (en bas à droite sur le bureau de Windows) 2. Préparation du PC
Une seule chose à faire: partager la connexion Wi-fi. Ceci pour que le Raspberry Pi puisse accéder à Internet.
Attention, quelquefois le partage se désactive sans raison apparente. Si la liaison avec le rpi est interrompue, commencez par contrôler ce point!
Pour cela, il faut aller dans les "Paramètres" en
cliquant, avec le bouton droit de la souris, sur l'icône
de
la barre des tâches. Ensuite sélectionner "Paramètres", puis
"Réseau et Internet" et sur "Wi-fi". A droite il y a "Paramètres
associés". Cliquez sur "Modifier les options d'adaptateur". On
obtient ceci:
Sélectionnez "Wi-fi" et demandez les propriétés (bouton droit de la souris). Ensuite sélectionnez "Partage" et vous obtenez ceci:
Si elle n'y est pas, cochez la croix du haut et laissez vide celle du bas, comme sur la figure ci-dessus. Ensuite cliquez sur "OK" et revenez au bureau.
Attention: Il arrive assez souvent que le partage soit désactivé sans raison apparente à la mise en route du pc. Si le rpi n'est plus accessible, contrôlez ce point! D'autres chemins sont possibles pour arriver à la carte Wi-fi, notamment en cliquant sur l'icône , puis sur "Paramètres réseau et Internet".
3. Mise en route physique
4. Contrôle de la connexion Ethernet
Il faut utiliser la console Windows pour cela:
Sous Windows, recherchez le mot "CMD"
(icône "loupe" en bas à gauche du bureau). CMD.EXE s'affiche.
Cliquez dessus et la fenêtre noire de la console s'affiche à
l'écran avec, dans mon cas:
Taper ipconfig ce qui affiche l'état
des ports IP. On doit y trouver entre autres un port dont
l'adresse est 192.168.137.1, l'important étant le "137" qui
indique que le Raspberry Pi est connecté au PC par la ligne
Ethernet et que la carte Ethernet du PC a l'adresse IP
192.168..137.1.
Il faut encore trouver l'adresse IP du Raspberry
Pi avec le
logiciel Portscan. On peut le
télécharger ici.
Attention: Le rpi garde en mémoire les anciennes connexions si bien qu'on a plusieurs adresses pour le même nom de domaine "raspberrypi.mshome.net". Dans les faits, un seul répondra à un ping.
Il faut faire un ping (envoi d'une demande de connexion au rpi) sur l'adresse du rpi, ici ping 192.168.137.87. Dans les statistiques on a "perte = 0%" ce qui indique que tout est en ordre et c'est bien la bonne adresse du rpi. Notez que le DHCP (Dynamic Host Configuration Protocol) a imposé l'adresse 192.168.137.87 au rpi et le DNS (Domain Name Server) lui a attribué le nom de domaine raspberrypi.mshome.net.
La première étape est terminée: le Raspberry Pi est connecté au notebook via le réseau Ethernet et ce dernier peut accéder à Internet par Wi-fi. On sait maintenant que
5. Communication PC-rpi
Manuel de PuTTY
Au démarrage on obtient ceci:
Il faut donner l'adresse IP ou le nom de domaine du Raspberry
Pi raspberrypi.mshome.net. Ce dernier est préférable car l'adresse IP peut varier d'une
session de travail à une autre en fonction de celle que
délivre le DHCP du PC. Il faut donc inscrire
raspberrypi.mshome.net dans le champ *Host name". C'est le nom
qu'on obtient avec le logiciel Portscan. Ceci fait, cliquez sur
"Open" pour démarre le travail en Linux sur le Raspberry Pi. Le travail se fait en ligne de commandes, la souris est inopérante.
Il faut tout d'abord se logger avec:
A partir de là on travaille en Linux sur le Raspberry Pi.
C'est le logiciel PuTTY qui permet de commander le Raspberry Pi en mode ligne de commande via le lan (local area network).
Le prompt est pi@raspberrypi ~& ce qui signifie que l'utilisateur s'appelle pi et que la ligne est raspberrypi (de raspberrypi.mshome.net). Le tilde ~ signifie qu'on est dans le répertoire de base d l'utilisateur Pi. Le & redonne la main au process.
sudo est
l'opérateur système (substitude user),
l'opérateur "root" (de base), le
super utilisateur.
[Alt Gr] 7 = |
(pipe) [Alt Gr] ~ = ~
7. Configuration du Raspberry Pi
Avec PuTTY, envoyer la commande sudo raspi-config
A compléter:
Après avoir complété ces champs (les autres sont pour le moment
laissés tels-quels), il faut fermer cette fenêtre en cliquant
sur <Finish> (utiliser al touche TAB). Ensuite taper sudo
reboot La ligne est coupée ce qui est normal:
Il faut ensuite couper et remettre l'alimentation du rpi (Raspberry Pi) afin de le faire redémarrer. Redémarrer PuTTY. L'adresse IP du rpi reste en principe la même.
Il faut faire le login avec pi et raspberry et on obtient:
On remarque que le message d'erreur de zone n'existe plus puisqu'on vient de le définir dans la configuration.
8. Librairie Wiring Pi
Permet de lire/écrire sur les GPIO (General Purpose Input Output) du Raspberry Pi.
Il faut commencer par installer l'environnement GIT (gestion décentralisée de versions): Installation de GIT: sudo apt-get install git-core
Contrôle que tout est installé sudo dpkg --get selections | grep git ne fonctionne pas ! (Le "|" s'obtient avec [AltGr 7] )
Ensuite cloner Wiring Pi: sudo git clone git://git.drogon.net wiringPi
Ensuite aller dans le répertoire: cd wiringPi et compiler wiring Pi: sudo ./build A la fin on reçoit: all done
Contrôle du fonctionnement: gpio -v
Lecture de tous les port s: gpio readall On obtient:
On voit sur ce tableau que la pin GPIO 0
est la pin 11 du connecteur.
ATTENTION: la
numération des pins de Wiring Pi (wPi) est différente de cette
du rpi (BCM)!
Pilotage d'une LED:
Brancher une résistance de 330 Ohms en série avec une LED entre la pin 11 (= GPIO 0) du connecteur et la pin 9 (masse). La cathode de la LED, le fil court, côté masse).
Envoyer la command gpio mode 0 out afin de mettre D0 en mode sortie. Ensuite gpio write 0 1 ce qui met cette pin à "1" (à + 3.3 Volts). La LED s'allume. Avec gpio write 0 0 la LED s'éteint.
Faire clignoter la LED avec le batch
blink.sh Il faut être dans le répertoire pi et taper: ./wiringPi/examples/blink.sh & Linux donne alors le numéro du processus, par exemple [1] 3174 Pour arrêter le batch, il faudra faire: kill 3174
Ce
batch est une suite de commandes WiringPi
Faire clignoter la LED avec le soft en C blink.c
Code source en langage C
Il faut aller dans le répertoire avec: cd wiringPi/examples Ensuite compiler et linker blink: sudo make blink blink est compilé et linké ce qui donne: [CC] blink.c le code est compilé [link] le code est linké
Pour lancer le programme: ./blink La LED clignote. Pour arrêter, taper: [ctrl] c
9. Base se données
MySQL est la base de données (récemment acquise par Oracle) la plus populaire au monde mais elle est un peu trop conséquente pour les besoins modestes que nous pouvons avoir avec le rpi. Nous allons donc mettre en route la base MariaDB , la petite soeur gratuite de MySQL et la préférée des développeurs open-source.
Il faudra installer le langage Python que
nous utiliserons pour programmer l'application et la base de
données MariaDB.
Il faut tout d'abord mettre à jour tout ce qui se
trouve sur le rpi avec:
sudo apt-get update
Set root password? [Y/n] Y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. ... Success!
N'oubliez-pas de l'écrire à quelque part car si vous l'oubliez la base sera inaccessible. Respecter la casse (majuscules-minuscules). Ensuite répondez aux questions:
Remove anonymous users? [Y/n] n
... skipping. ... skipping. Remove test database and access to it? [Y/n] n ... skipping. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success!
Ensuite redémarrez le service:
sudo systemctl restart mariadb.service Démarrez la base:
mariadb -u root -p -h localhost
Pour la suite, nous serons en SQL (Structured
Query Language) dans l'environnement de MariaDB.
mariaDB ([none)]>
Commande SQL à donner:
CREATE USER 'logger'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON temperatures.* TO 'logger'@'localhost'; FLUSH PRIVILEGES;
Sortir par: quit; Ensuite il faut créer les tables en se loggant avec: mariadb -u logger -p -h localhost
MariaDB [(none)]> USE temperatures;
Database changed
MariaDB [(temperatures)]>
CREATE TABLE temperaturedata (dateandtime
DATETIME, sensor VARCHAR(32), temperature DOUBLE, humidity DOUBLE); La table "temperaturedata" contiendra 3 champs:
Tester ensuite ce qui vient d'être défini avec la commande:
MariaDB [temperatures]>
DESCRIBE temperaturedata; Tester ensuite la table (vide) avec SELECT *; Et terminer par Quit;
La table est maintenant créée et prête à être utilisée.
EXERCICE: Installation du soft
d'enregistrement de température
Les programmes sont sur Github. Chargement des sources en Python et du fichier config.json pour collecter les données.
S'il faut rechrarger une nouvelle version, il
vaut mieux effacer tout le répertoire au préalable avec:
cd DHT22-TemperatureLogger
Vérification des librairies Adafruit
Adafruit_Python_DHT/examples $ sudo python_adafruitDHT.py 22 4 (paramètres 22 = DHT22 ; 4 = GPIO 4)
On doit obtenir: Temp=20.5*c Humidity 53-6%
Exécution: sudo python AdafruitDHT.py 22 4
10. CRONTAB, envoi automatique de commandes
La commande Crontab tourne en permanence mais elle est sans effet
tant que les 5 paramètres qui déterminent la cadence d'envoi des
commandes n'auront pas été renseignés (par défaut on a * * * * * *).
Ces paramètre sont contenus dans une ligne du fichier Crontab. Pour
l'éditer: crontab -e Si c'est la première utilisation, choisissez l'éditeur nano en répondant par 2
Dans le fichier crontab, la ligne à éditer est
celle-ci: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ Elle débute par les 5 paramètres qui déterminent la cadence de répétition de la commande. mm hh jj MMM JJJ <tâche>
où (Wikipedia):
Si on met aucun paramètre, soit * * * * * * , la tâche est envoyée chaque minute. C'est la cadence la plus rapide.
Exemples:
28 22 * * 1 df >> /tmp/df.log Le résultat de la commande df est envoyé chaque lundi (1) à 22h28 dans le fichier /tmp/df.log * * * * * df >> /tmp/df.log Le résultat de la commande df est envoyé chaque minute dans le fichier /tmp/df.log Auparavant il faut éditer le fichier de configuration afin de démarrer crontab: sudo nano /etc/rsyslog.conf Et décommenter la ligne si ce n'est pas déjà fait: #cron.* /var/log/cron.log (enlever le #) 11. Installer un site web
Le logiciel le plus installé est Apache mais c'est NGINX, plus léger et plus adapté à un petit ordinateur comme le rpi que nous allons installer.
Commencez par mettre à jour ce qui est déjà installé sur la carte mémoire du rpi: sudo apt-get update
Ensuite installer NGINX: sudo apt-get install nginx
Puis sudo apt-get install nginx php-fpm php-mysql php-cli afin d'installer PHP, les commandes Mysql (identiques à MariaDB) et cli (ligne de commande)
Ceci fait, après quelques minutes de chargement, démarrer le serveur: sudo /etc/init.d/nginx start
Test du serveur
Lancez un navigateur avec l'adresse du rpi: raspberrypi.mshome.net dans mon cas.
Ou alors avec l'adresse IP donnée par une
recherche des ports connectés faite avec le logiciel Portscan.exe.
On doit obtenir la page qui suit:
Imposer une page d'accueil
Afin de pouvoir afficher une page HTM, HTML ou PHP, il faut l'indiquer dans le ficher de configuration de NGINX lequel sera mis en route au démarrage: sudo nano /etc/nginx/sites-available/default
Pour le moment, c'est le fichier
index.nginx-debian.html qui est exécuté. Il faut donc éditer la
ligne qui suit: afin d'y rajoujter index.php: index index.html index.htm index.php index.nginx-debian.html
Cette ligne indique l'ordre dans lequel la page de démarrage sera affichée si ces 4 fichiers se trouvent dans la racine du serveur. Un seul suffit bien-sûr.
Activer PHP (si on en a besoin)
Ensuite il faut activer PHP en dé-commentant (enlever le # du début de ligne) de ce même fichier de configuration de la ligne:
# location ~ \.php$ { Ne pas oublier la } à la fin
Ensuite il faut re-démarrer le service NGINX: sudo /etc/init.d/nginx restart A contrôler avec: systemctl status nginx.service
Et aussi le service php-fpm: sudo /etc/init.d/php7.0-fpm restart A contrôler avec: sudo /etc/init.d/php7.0-fpm status
Répertoire où mettre les fichers HTML ou PHP
C'est le répertoire /var/www/html/
Il faut encore pouvoir les y écrire ce qui nécessite de modifier les droits sur ces répertoires: sudo chown -R www-data:pi /var/www/html sudo chmod -R 770 /var/www/html
Tester index.html
Il ne reste plus ensuite qu'à tester ces différents fichiers. Pour cela il faut créer un fichier index.html dans le répertoire /var/www/html
avec "test de NGINX en html" avec le mini-éditeur
Nano: nano /var/www/html/index.html Test du fichier index.html
On doit ensuite pouvoir lire Test du fichier index.html dans le navigateur lorsqu'on le démarre. S'il le faut, faire un rafraîchissement de la page d'accueil avec la touche [F5]
Ensuite effacer ce fichier afin qu'il ne gêne pas l'affichage de index-php. rm /var/www/html/index.html
Tester index.php
Editer comme ci-dessus:
nano /var/www/html/index.php Test du fichier index.php
On doit ensuite pouvoir lire Test du fichier index.php dans le navigateur lorsqu'on le démarre. S'il le faut, faire un rafraîchissement de la page d'accueil avec la touche [F5]
Si vous avez pu obtenir ces deux pages d'accueil, NGINX et php sont bien installés et fonctionnent. Il suffira ensuite de construire le site en y mettant les fichiers nécessaires soit en HTML soit en PHP.
Par exemple, une seule page index.html composée avec le logiciel FrontPage qui affiche un titre et une une photo.
Code source de la page index.html
La photo USA_20120529_3262.JPG (moi dans les sables de la Monument Valley après avoir trouvé de l'or dans la Vallée de la Mort) doit évidemment se trouver dans le répertoire /var/www/html/ en compagnie du fichier index.html créé ci-dessus. Lorsqu'on démarre un navigateur (ici Mozilla Firefox) et qu'on lui donne soit l'adresse IP http://192.168.137.87 soit le nom de domaine http://raspberrypi.mshome.net on obtient le contenu de la page index.html.
Le logiciel gratuit WinSCP est parfait pour faire des transferts de fichiers entre le répertoire de travail de votre PC et le rpi.
12. Utilisation d'un écran HDMI et d'un clavier de pc
Connecter un clavier USB sur un des ports USB. Ensuite connecter un écran HDMI à la prise HDMI du spi. Cet écran peut être un téléviseur avec une entrée HDMI.
Lorsqu'on boot le rpi, on doit obtenir l'image du bureau Linux sur l'écran. Si ce n'est pas le cas, il faut modifier le fichier de configuration du rpi, appelé "config.txt". On utilise l'éditeur de texte Nano pour cela:
sudo nano /boot/config.txt
Nano démarre avec le fichier config.txt en lecture:
Il faut alors dé-commenter (enlever le signe #) la ligne: # hdmi_safe=1 qui devient alors hdmi_safe=1 ce qui indique au soft que la sortie HDMI doit être activé dans le mode "comptabilité HDMI". Ensuite écrire le fichier ainsi modifié au moyen de la commande [Ctrl] O (touche Ctrl + touche O) puis sortir de Nano avec [Ctrl] X (eXit).
Stopper Linux au moyen de la commande sudo halt.
Après avoir rebooté le rpi, on doit avoir la page suivante affichée sur l'écran HDMI:
Divers
Voici la liste de commandes pour l'installation : Cette version fonctionne très bien jusqu’à 1700 MHz, pour le 13cm
Évariste a fait d'autres modifications que je n'ai pas (encore). https://downloads.raspberrypi.org/raspbian_lite_latest Puis entrer la liste des commandes ci-dessous :
------------------ Christophe / F4CQA Locator: JN18eq
|