La programmation du Raspberry Pi en Python

Le langage Python

Le Raspberry Pi a aussi été conçu pour permettre d’apprendre la programmation.

Le langage principal pour programmer sur Raspberry Pi est Python.

J’ai dû voir comment mettre en place mon environnement de programmation en Python sur mon Raspberry Pi pour réaliser mon projet.

Python est un langage de programmation qui est utilisé dans différents domaines (application, web, …) Il est souvent comparé à Perl, Ruby ou encore Java. D’après le site Raspberry Pi, les principaux points forts de Python sont :

  • Langage adapté aux débutants (comme moi 😉 )
  • Les grandes possibilités du langage. Il va aussi bien être adapté aux petits projets qu’aux gros projets
  • Peut-être utilisée sur différents types d’ordinateurs
  • Stable, langage qui est assez vieux et qui a fait ses preuves
  • Simple à comprendre

L’environnement de travail Python sur le Raspberry Pi

Pour programmer en Python sur Raspberry Pi, on peut lancer le programme Thonny Python IDE.

Voici à quoi ressemble l’IDE avec mon premier programme d’exemple (décrit dans la partie suivante).

Mes premiers essais en python

Pour découvrir Python j’ai essayé de réécrire en python les programmes d’exemples que j’ai codé quand j’ai découvert java lors de mon travail personnel sur les langages de programmation : ces exemples étaient l’écriture en java des exemple de programmes Cobol, Fortran que j’avais lus quand j’avais regardé « histoire des langages de programmation ».

Multiplication de deux nombres

Le premier programme faisait la multiplication de deux nombres ;

Voici le résultat en python.

# lit les nombres
input1 = input("Enter first number:" );
num1 = int(input1)
input2 = input("Enter Second number:");
num2 = int(input2)

# ça fait le calcul
result = num1 * num2;

# affiche le resultat
print("result is = " , result);

Comme différence avec Java, on voit que :

  • le programme est plus petit à écrire.
  • On n’a pas besoin de dire le type des variables
  • Il est plus facile d’afficher les résultats ou de demander des saisies de l’utilisateur
  • Pour les commentaires on utilise « # » à la place de « // »
  • On a dû faire attention à convertir la saisie (input1) en nombre (num1)

PGCD de deux nombres

Le second programme définissait une fonction qui pouvait être réutilisée. La fonction calculait le PGCD de deux nombres. Voici ce que cela donne en python :

def calculePGCD(na,nb):
   ia = na
   ib = nb

   while ib !=0 :
      itemp = ia
      ia = ib
      ib = itemp % ib
   return ia

a = 55
b = 33
resultat =calculePGCD(a,b)
print("le pgcd de",a,"et",b,"est", resultat)

Comme différence avec Java :

  • Pour utiliser une fonction on utilise « def»
  • Il faut faire attention aux indentations ; Python se sert des indentations pour structurer le programme (intérieur de la fonction, intérieur de la boucle while). En Java on utilisait les « { } »
  • Ici aussi, le code est très compact à écrire.

Reduction de fractions

Le troisième programme utilisait la fonction PGCD pour réduire une fraction. Voici ce que cela donne en Python :

#lit les nombres.
inputNumerateur = input ("Entre le numérateur:")
numerateur = int(inputNumerateur)
inputDenominateur = input ("Entre le dénominateur:")
denominateur = int(inputDenominateur)
print ("la saisie est :",numerateur,"/",denominateur)

# calcul du pgcd en utilisant le programme d'exemple
pgcd = calculePGCD (numerateur , denominateur)

#calcul du nouveu numérateur et du nouveau dénominateur
numerateur = (int) (numerateur / pgcd)
denominateur = (int) (denominateur / pgcd)

# affiche le resultat
print ("le resultat est :",numerateur,"/",denominateur)

Comme point particulier, on a dû faire attention à ce que le résultat des nouveaux numérateurs et dénominateurs soit bien un entier (par défaut, on obtenait un nombre décimal).

Conclusion

Python a l’air plus facile à manipuler pour apprendre que ce que j’avais dû faire en java (par exemple pour le jeu Pong du Tutorial que j’avais repris).

Je vais maintenant devoir voir comment utiliser Python pour les différentes tâches que je dois faire pour le projet (lire les capteurs, envoyer les données à Salesforce, etc…).

La conception du Raspberry Car – L’ordinateur

1.         Raspberry Pi

Comme système au cœur de la collecte et de l’envoi des données, j’avais besoin d’un ordinateur simple auquel on puisse ajouter des composants additionnels et les programmer facilement.

J’ai trouvé sur Internet que beaucoup de projets semblables ont été fait sur Raspberry Pi.

Le Raspberry pi est un ordinateur de la taille d’une carte de crédit que l’on peut brancher à un écran et utiliser comme un ordinateur standard. Sa petite taille, et son prix intéressant (50 euros !) font du Raspberry pi un produit idéal pour tester différentes choses. Pour sa taille il ne faut pas s’attendre à des performances incroyables comme sur mon ordinateur de jeu, mais pour l’objectif de ce travail personnel c’est largement suffisant.

Le Raspberry pi ne dispose pas d’un disque dur interne (cela augmenterait grandement sa taille), mais stocke ses données sur une carte SD.

Par défaut, le Raspberry pi, est nu : il est vendu sans accessoires.

Pour pouvoir le programmer (avant de l’installer dans la voiture), j’ai donc dû le compléter :

  • Avec une carte micro SD
  • Un câble d’alimentation micro USB standard relié à un chargeur
  • Un câble HDMI afin de connecter le Raspberry pi un écran.
  • Un clavier et une souris standard (sur le port USB)

Ensuite il a fallu installer le système d’exploitation :

  • La première étape est de préparer la carte micro SD en y installant un système d’exploitation. Pour faire simple, j’ai choisi le Linux Raspbian (Debian) que l’on peut télécharger directement depuis le site Internet de Raspberry pi. Une fois l’image téléchargée, on peut l’installer sur votre carte micro SD en utilisant le logiciel Win32DiskImager.  La procédure est décrite ici : https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/3 .
  • Une fois la carte micro SD préparée, il suffit de l’insérer dans le Raspberry pi pour faire fonctionner automatiquement le système.

C’est dans cette configuration que je travaille à la maison pour programmer le Raspberry Pi (la petite carte entre le clavier et l’écran).

2.         Le Raspberry Pi en mode mobile

Mais pour l’utiliser dans la voiture :

  • On ne pourra pas utiliser un grand écran et le brancher sur une prise de courant,
  • On ne va pas utiliser un clavier et une souris avec des câbles car ce n’est pas pratique dans la voiture
  • On n’aura pas de prise de courant 220V pour alimenter le transformateur USB de l’ordinateur Raspberry PI. On pourrait le brancher sur l’adaptateur USB sur la prise allume-cigare, mais dès qu’on couperait le contact de la voiture, le Raspberry Pi s’étendrait aussi

La solution est de compléter le Raspberry PI par d’autres éléments :

  • Un petit écran tactile
  • Un clavier avec trackpad buetooth pour les manipulations qu’on ne peut pas faire avec l’écran tactile
  • Pour l’alimentation, une power bank de forte capacité.

Pour le petit écran tactile j’ai pris un écran de 5 pouces qui se branche directement sur le Raspberry Pi de la société Waveshare (800*480 pixels) pour 37 €. L’écran se branche par-dessus le Raspberry Pi par le connecteur GPIO 40 broches pour l’alimentation et par un adaptateur HDMI (la petite pièce bleue de la première photo).

Pour le clavier j’ai trouvé le clavier Logitech Touchpad K400 Plus, qui est léger et ne prend pas trop de place (35€).

Pour la powerbank, j’ai pris une powerbank 5V, 2.4A et une capacité de20100mAh (elle peut recharger un ordinateur portable en une heure ! (Environ 70€, c’est le composant le plus cher de la configuration 😉 )

B.        Les interfaces additionnelles

Pour être capable de réaliser le programme qui va interroger la voiture et connaître la position GPS, il faut étendre le Raspberry Pi avec deux composants :

1.         Composant GPS

La technologie GPS utilise des satellites en orbite autour de la Terre qui permettent de déterminer la localisation géographique d’un capteur avec les coordonnées en longitude, latitude et altitude.

Je vais brancher un tel capteur sur mon Raspberry Pi.

J’ai choisi le composant “GSM/GPRS/GNSS/Bluetooth HAT GPS Module Expansion Board Based on SIM868 for Raspberry Pi” de la société Waveshare (pour 40€). Il inclut aussi une carte GPRS pour se connecter au réseau mobile (voir la partie suivante « accès Internet »).

2.         La connexion OBD à la voiture

Les voitures modernes disposent d’une prise OBD. Ces trois lettres  » OBD  » veulent dire :  » On Board Diagnostics  » (Diagnostic embarqué à bord). Cette fameuse prise OBD permet d’accéder à toutes sortes d’informations en interrogeant les calculateurs électroniques de la voiture.

J’ai besoin d’un connecteur pour relier le Raspberry PI à la prise OBD de la voiture.

Il y en a de différents types :

  • Des cables OBD-USB que l’on connectera sur les ports USB du Raspberry Pi
  • Des modules OBD Bluetooth que l’on peut coupler au Raspberry Pi

Pour faire simple et ne pas avoir de soucis avec le Bluetooth, j’ai pris la première option.

Le câble que j’ai acheté est le ScanTool OBDLink SX USB (30€)

C.        L’accès Internet

Le Raspberry Pi doit se connecter à internet pour envoyer les données à Salesforce.  Par défaut le Raspberry Pi peut se connecter à un réseau Wifi.

Dans un premier temps nous avons fait les teste en utilisant le mode Tethering de mon téléphone portable, ou pour ne pas être dépendant de celui-ci, une borne wifi/4G de TP-Link avec un abonnement data spécifique.

Dans un second temps, j’essayerai d’utiliser le mode GSM Data de la carte GPS que j’ai acheté pour la géolocalisation, en lui insérant la carte SIM).

D.        Le tout assemblé

Et voici ce que donne le tout assemblé, une fois connecté à la voiture :

  • Le Raspberry Pi est connecté sous l’écran, comme expliqué dans la présentation de l’écran
  • Le câble rouge est relié sous le volant au bord OBD de la voiture.
  • Devant le Raspberry, on voit la carte GPS (à gauche, avec la LED allumée) relié au Raspberry Pi et au capteur de signal GPS (à droite)

Raspberry Cars : RC 2.0 !

Pour mon travail personnel de l’année 2019-2020 au Lycée Ermesinde, je vais étendre mon travail personnel de l’année dernière, avec de nouvelles technologies pour le rendre plus performant et avancé.

Le travail personnel de l’année dernière consistait à connecter le site Salesforce avec une voiture Mercedes pour recevoir des donnés sur la voiture en fonctionnement. Par exemple la position de la voiture, sa vitesse, le niveau de carburant. Avec ces informations, on a eu l’idée de faire une course virtuelle où des personnes peuvent aller d’un point de départ à un point d’arrivée, à des dates différentes, et par la suite on peut comparer les trajets entre eux.

Le projet de l’année dernière avait comme limitations que les données passaient par les serveurs de Mercedes : Les données de la voiture étaient lues par une application Mercedes sur le téléphone mobile puis envoyée sur le serveur Mercedes ; Ensuite, un programme exécuté chez Salesforce allait se connecter automatiquement au serveur Mercedes pour demander les données de la voiture et les enregistrer dans la base de données de Salesforce.

En résumé, les limitations étaient les suivantes :

  • On avait besoin d’avoir le téléphone dans la voiture
  • Ceci fonctionnait juste sur les voitures Mercedes
  • Pour que Salesforce se connecte aux API du serveur cloud de Mercedes il fallait un contrat avec Mercedes et une fois la phase de développement terminée il faut payer un abonnement
  • On ne pouvait pas facilement se connecter très souvent du serveur Salesforce au serveur Mercedes (on a fait toutes les 10min.)
  • L’application Mercedes n’enregistrait pas les donnés à une haute fréquence, on voudrait enregistrer toute les 2-10 secondes par exemple pour avoir une course plus dynamique

Ce que je veux réaliser cette année c’est :

  • Un petit ordinateur autonome dans la voiture,
  • Fonctionnant avec toutes les marques de voiture,
  • Ne nécessitant pas d’abonnement particulier,
  • Enregistrant de la même manière la position de la voiture, la vitesse, le niveau de carburant, l’état des pneus et d’autres paramètres,
  • Les envoyant à Salesforce le plus souvent possible.

Ce travail personnel va donc nécessiter différents groupes de tâches :

Voici la suite d’articles décrivant les différentes étapes du projet  :

 

Cars and Clouds : pour conclure !

Pendant ce travail personnel d’interfaçage entre les serveurs Cloud de Salesforce et Mercedes pour simuler une course de voiture,  j’ai beaucoup appris de nouvelles choses :

  • J’ai appris comment aller chercher et manipuler des données dans des différents serveurs : Salesforce et Mercedes et les faire travailler ensemble.
  • J’ai travaillé avec plusieurs langages de programmation (Apex, Javascript, SOQL, HTML) et des techniques comme JSON pour les fichiers
  • J’ai découvert comment stocker des données dans une base de données (avec salesforce)
  • J’ai découvert un mécanisme pour rendre sûrs les échanges entre les serveurs (token, etc.)

Ce travail personnel était aussi très divers :

  • Il y avait souvent des phases compliquées où il y avait des problèmes dans les programmes ou dans le serveur avec les données. Même en s’inspirant des exemples trouvés, cela n’allait pas toujours.
  • Pour moi la partie la plus compliquée était des programmer toute la partie avec les voitures et les connections, et aussi celle pour sauvegarder les données automatiquement (toutes les cinq minutes).
  • La partie la plus amusante était celle de faire la carte. C’est aussi celle où j’ai eu le plaisir de voir que c’était enfin réussi !
  • J’ai dû découvrir chaque partie, technique ou outil, mais aussi comment les faire aller ensemble. C’est deux choses différentes à faire.
  • La partie plus difficile est de trouver l’idée de début, l’objectif, et de trouver un chemin pour y arriver. En plus avec les idées qu’on a et qui ne marche pas toujours du premier coup… cela n’aide pas.
  • Je dis ici merci à mon père qui m’a accompagné au long de ce travail personnel pour regarder ces sujets les uns après les autres.

Pendant ce travail personnel, j’ai aussi fait un stage chez un grand garage à Luxembourg (Konz, qui vend des Land Rover et des Jaguar). Dans ce garage j’ai appris un peu plus en détails les serveurs du garage. Il y avait deux serveurs que j’ai vu : sur le premier il y avait les programmes et les documents. Et un autre avec les informations des employés pour gérer les accès. C’est encore un autre aspect de l’informatique que j’avais un peu déjà vu au lycée. C’était un stage très intéressant car il allait très bien avec mon projet personnel, devenir informaticien, et avec l’autre sujet que j’aime bien, les voitures (pendant le stage j’ai aussi fait des travaux à propos des voitures). Je dis merci aux personnes du stage pour m’avoir accueilli et donné plus d’idées sur ce deuxième sujet.

Dans ce travail personnel, cela a aussi été intéressant de mélanger ces deux sujets : informatique et automobile.

Plus tard j’aimerais vraiment faire quelque chose qui mélange les deux thèmes. Surtout qu’il y a de plus en plus d’informatique dans les voitures, et pleins de nouveaux sujets : les voitures qui se conduisent seules, les voitures électriques qui ont besoin de plus d’ordinateurs, les systèmes entre le conducteur et la voiture, les écrans et les commandes, … Tout un univers à découvrir et à apprendre !