Raspberry Pi

Articles dédiés au Raspberry Pi B (voir aussi mon dernier livre sur le sujet, janvier 2019) 

Mes débuts avec les systèmes embarqués ont commencé avec l'Arduino. Cela m'a permis, en autres, à me familiariser plus facilement avec les senseurs ou autres composants électroniques.
Le Raspberry, dans un sens, est plus un mini-ordinateur, tout comme d'ailleurs le Beagle Bone Black (BBB).
Lorsque j'ai pu installer début 2013 sur le Raspberry une machine virtuelle Java (c'est devenu commun aujourd'hui), cela a été un plaisir incroyable, des heures de travail et de jolis résultats.

Fin 2017, je me suis remis au travail avec un Raspberry Pi 3.

Voir aussi mon dernier livre sur le sujet (janvier 2019) 

Ancienne location et en anglais: http://jbbraspberrypi.blogspot.ch/2013/03/ssh-and-scp-on-raspberry-pi-from-windows.html

L'émulateur de terminal Putty peut être utilisé pour obtenir une console ssh sur un système extérieur similaire à une console CMD sous Windows. 
La connexion peut être faite au travers d'Internet, d'un accès Wifi, voir avec une câble USB avec attribution d'une adresse IP. 

Le système extérieur pourra donc être un Raspberry Pi, un Beaglebone, voir un robot LEGO EV3.

Nous pourrons télécharger cet émulateur depuis http://www.putty.org/.

Dès que l'installation de Putty nous aura permis de nous connecter sur un système Linux, on se rendra compte qu'un outil un peu plus évolué est nécessaire pour transférer des fichiers avec notre PC, dans un sens ou dans l'autre.
L'application WinSCP est la solution et nous pourrons la télécharger depuis https://winscp.net/eng/download.php.

 

Voir aussi mon dernier livre sur le sujet (janvier 2019) 

Je donne ici un certain nombre de références pour les personnes qui n'ont aucune idée. Je passerai ensuite à mes travaux et expérience sur ce système embarqué. J'ai déjà écrit un certain nombre d'articles sur le sujet, articles qui seront rapidement référencés ou adaptés. 

Les références et les informations sont plus particulièrement indiquées pour des fans de programmation en Java.

J'aime particulièrement le message de James Gosling , le concepteur du langage de programmation Java en 1994au début de cet article. 

J'ai écrit un certain nombre d'articles sur http://jbbraspberrypi.blogspot.ch/ que je reprendrai ici rapidement.

J'ai développé une grosse application en Java qui est testée et déboguée entièrement sur un PC sous Eclipse.

Voir aussi mon dernier livre sur le sujet (janvier 2019) 

Cet article va sans doute disparaître rapidement car j'ai passé fin 2017 au modèle Pi 3.

L'installation du logiciel de base sur un un Raspberry B+ est similaire à l'installation sur un ancien modèle de Raspberry comme décrit ici, dans un de mes articles: Starting with the Raspberry Pi - SD card

Le système d'exploitation se trouve sur le site http://www.raspberrypi.org/downloads/ et nous choisirons la version Raspian Wheezy  la plus utilisée pour le développement de petites applications avec des interfaces électroniques comme des capteurs ou relais. 

Après téléchargement nous unziperons le fichier .zip et copierons l'image, par exemple 2014-12-24-wheezy-raspbian.img, dans un répertoire bien identifiable, chez moi D:\Raspberry\_B+
Le nom pourrait changer si une nouvelle version était disponible.

Sur un PC Windows nous utiliserons Win32DiskImager.exe pour copier le système d'exploitation sur la micro carte SD que nous aurons placer préalablement dans un support SD  (micro SD adapter) et fait glisser dans le lecteur SD du PC ou d'un adaptateur USB.

On cliquera alors sur le bouton "Write" et attendrons patiemment la fin de la copie:

Il faudra alors retirer correctement la carte de son support (commande "Éjecter" dans "Retirer le périphérique"  

Lorsque le système d'exploitation a été copié, il faudra:
- insérer la micro SD dans son support enfin métallique du B+ situé dessous
- connecter un écran avec un câble HDMI 
- connecter un clavier USB (plug and play: donc peut se faire après le démarrage)
- inclure un module USB pour le WiFi
- démarrer le Raspberry en y connectant l'alimentation via le câble mini USB 

Une longue liste de message va apparaître et l'outil de configuration raspi-config sera présenté à l'écran.

La première chose à faire sera d'étendre le système (menu 1 de raspi-config) afin d'utiliser tout l'espace de la carte. Nous attendrons le prochain reboot pour que le redimensionnement soit effectif.

Nous changerons évidemment le mot de passe avec le menu 2.

Avec le menu 3, nous activerons la première option pour le mode console.   

Le menu 4 nous permettra de mettre correctement le langage, les options régionales, la zone de l'heure (option I2, par exemple Europe et Paris) et le clavier (option I3, par exemple 105 keys et German Switzerland French pour les suisses romands).
Nous laisserons pour l'instant les autres aspects de configuration comme le touches de contrôles.

Le menu 8 (Advanced Options) sera utilisé pour activé (enabled) le SSH que nous utiliserons pour l'accès depuis un PC. 

Lorsque ces options de configuration sont terminée, nous utiliserons <Finish> pour terminer. 
Le système redémarra et nous pourrons alors entrer pour l'utilisateur pi, le mot de passe précédemment choisi.  

Si nous avons oublié de mettre correctement une option, nous pourrons toujours revenir à la configuration avec la commande sudo raspi-config.

 

Installation du WiFi: plusieurs méthodes sont possible, mais le mode graphique reste le plus simple.

Mode graphique, reprendre raspi-config et mettre le démarrage grapphique avec le menu 3.
Il nous faudra une souris que nous pourrons connecter sans reboot (plug-and-play).

A l'écran nous aurons un icône WiFi Config que nous utiliserons.

Nous cliquerons sur scan pour sélectionner notre accès WiFi actuellement disponible.
Il faudra entrer la clé PSK pour obtenir la connexion.

 

Une première vérification avec un senseur de mouvement.

Il nous faudra tout d'abord identifier le numéro du Pin où notre senseur sera connecté.
Une bonne référence http://pi4j.com/pins/model-b-plus.html où nous trouverons les numéros des pins à utiliser.
Pour notre senseur nous utiliserons les pins 2 (5V), 6 (Gnd) et 12 (le GPIO BCM 18 (RPi.GPIO) tous situés sur le connecteur côté extérieur.

Notre script python senseur_mvt_2.py:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
PIR_PIN = 7
GPIO.setup(PIR_PIN, GPIO.IN)
nbmvt = 1
try:
    print "PIR Module Test (CTRL+C to exit)"
    time.sleep(1)
    print "Ready"
    while True:
       if GPIO.input(PIR_PIN):
         print "Mouvement %d!" % nbmvt
         nbmvt = nbmvt + 1
         time.sleep(.3)
except KeyboardInterrupt:
    print " Quit"
    GPIO.cleanup() 

et un script shell pour le faire exécuter, senseur_mvt_2.sh:

sudo /home/pi/jbb_python/senseur_mvt_2.py

Le time.sleep(.3) est relativement petit (0.3 sec) et le senseur réagira rapidement.

 

Senseur de lumière: https://www.circuitlab.com/circuit/hpwha3/screenshot/540x405/

 

Installation de la librairie Pi4J sur le Raspberry.

Elle est décrite en détail sur le site http://pi4j.com/install.html#Java_Runtime_JREJDK.
Nous exécuterons donc le script curl -s get.pi4j.com | sudo bash

 

Démarrage automatique de l'application: par exemple /home/pi/jbb_java/SystemControl.sh & dans le fichier /etc/rc.local

Exemple de SystemControl.sh:

cd /home/pi/jbb_java
while true
do
        sudo java -classpath .:classes:/opt/pi4j/lib/'*' SystemControl
        sleep 100
done

Ceci va assurer que si SystemControl stoppe, aussi si un crash, il sera redémarrer automatiquement

 

Tous ces aspects ont été revisités dans mon livre Java avec le Raspberry Pi 3B (Janvier 2019).

Cet ouvrage nous montre comment déposer nos composants sur des planches à pain (breadboards) avec des schémas Fritzing, les tester avec des scripts Python, avant de développer de jolies classes et petites applications Java.


Lors du design d'un petit projet, même avec seulement quelques composants, on est vite arrivé à se mélanger les pinceaux.
On a par exemple la nécessité d'utiliser deux fois le 5V et plus pour la masse, le Gnd.

Nous allons commencer par un petit exemple, avec un relais et un senseur de mouvement:

Ces deux composants auront besoin les deux du 5V et du Gnd.  

Le troisième fil de chacun de ces modules viendra sur un pin GPIO, et différent évidemment.

Il est important de consulter le schéma et le numéro des pins GPIO pour définir ce qu'on va utiliser pour ces troisième fil. Par exemple: Gordons Projects.

Dans une première phase, il est plus facile de se connecter directement sur le Raspberry Pi, pour chaque module et de les tester séparément. Dans le cas du PIR, on aura directement les 3 trois fils qui partiront du senseur pour aller sur le Raspberry.

Nous avons choisi le header 26 qui correspond au pin 11 et au GPIO BCM 7.

La démarche la plus simple est de commencer par un script python, pour vérifier que le senseur fonctionne:

Fichier senseur_mvt_2.py


 #!/usr/bin/python

import RPi.GPIO as GPIO
import time 

GPIO.setmode(GPIO.BCM)

PIR_PIN = 7

GPIO.setup(PIR_PIN, GPIO.IN)

nbmvt = 1

try:
    print "PIR Module Test (CTRL+C to exit)"
    time.sleep(1)
    print "Ready"

    while True:
       if GPIO.input(PIR_PIN):
            print "Mouvement %d!" % nbmvt
            nbmvt = nbmvt + 1

       time.sleep(.2)

except KeyboardInterrupt:
               print " Quit"
               GPIO.cleanup()


En exécutant le programme:


pi@raspberrypi ~$ sudo python senseur_mvt_2.py

PIR Module Test (CTRL+C to exit)
Ready
Mouvement 1!
Mouvement 2!
Mouvement 3!
^C Quit


C'est important de vérifier qu'il réagit correctement aux mouvements.

Si un des fils est en l'air, le script retournera une détection en continu, donc à corriger. 

Lorsque cette première phase est terminée, nous savons que notre senseur fonctionne et que nous pouvons passer à la phase de la programmation Java. 

 

Pour la partie du relais, on fait la même chose, le 5 Volt et le Gnd. 
Nous utiliserons 

#!/usr/bin/python
import RPi.GPIO as GPIO, time
print "Start"
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
PiPin = 18
GPIO.setup(PiPin, GPIO.OUT)
GPIO.output(PiPin, True)
time.sleep(2.0)
GPIO.output(PiPin, False)
print "End"

 

Le support du lecteur de la carte SD sur les Raspberry Pi de premières générations est en plastique.

Il peut donc facilement s'user ou même se casser, puisque la carte SD dépasse le circuit et bouge constamment.

Malheureusement, cela m'est arrivé.

Un joli article en anglais explique comment réparer le support en collant dessus une vieille carte de crédit découpée: How to fix a broken SD card slot on your raspberry pi

Mais cela ne marche pas toujours bien, car il faut une certaine pression. Ceci fonctionne, mais c'est dé..li..cat: 

 

Il est aussi possible de remplacer complètement le support: https://www.youtube.com/watch?v=AEmy0tapTsg

Le support de la carte SD sur la version B+ du Raspberry est en métal! Ouf!