35
Jean-Bernard Boichat PROGRAMMER EN JAVA POUR LE RASPBERRY PI 3

Programmer en Java pour le Raspberry Pi 3 · 2019-02-07 · Jean-Bernard Boichat PROGRAMMER ENschémas produits par JAVA POUR LE RASPBERRY PI 3 Maîtrisez Java et votre Raspberry

  • Upload
    others

  • View
    24

  • Download
    1

Embed Size (px)

Citation preview

Jean-Bernard Boichat

PROGRAMMEREN JAVA

POUR LE

RASPBERRYPI 3

En couverture : © Fritzing

29,90 €

Cod

e éd

iteur

: G

6774

6C

ode

ISB

N :

978-

2-21

2-67

746-

1

Maîtrisez Java et votre Raspberry Pi

Le langage Java et le nano-ordinateur Raspberry Pi sont deux outils incroyablement populaires et pédagogiques dans le monde des technologies actuelles. Cet ouvrage les réunit, dans le but de vous apprendre à programmer en Java en réalisant différents projets simples d’électronique avec un Raspberry Pi 3 (modèles B, B+, A+ et Zero WH).

Le livre débute par l’installation et l’utilisation de l’envi-ronnement de développement Eclipse pour Java, puis présente le port GPIO du Raspberry Pi, en s’aidant des schémas produits par Fritzing. Il utilise ensuite des scripts Python pour tester des composants montés sur uneplatine de test. L’apprentissage de Java s’effectue en douceur à l’aide de la librairie Pi4J qui gère le port GPIO : d’abord avec des LED, puis en utilisant un relais et diffé-rents capteurs (de mouvement, lumière, température…). Vous apprendrez aussi à programmer un serveur web en Java grâce à l’accès Wi-Fi du Raspberry Pi. Enfin, vous ma-nipulerez une base de données SQLite avant de réaliser le projet final : l’envoi d’un e-mail depuis le Raspberry Pi avec la photo de l’intrus entré dans votre logement !

Ce livre d’une grande richesse de contenu est complétépar 120 exercices corrigés, dont les solutions sont disponibles en ligne.

Au sommaireJava et Eclipse • Installation du Rasp-berry Pi 3 B • Putty et WinSCP • Le port GPIO du Raspberry Pi • Python pour vérifier les fonctions GPIO • La librairie Pi4J • Clignotement d’une LED • Débuts en Java • Une classe Java pour lire et écrire des fichiers • Exceptions en Java • Tâches en parallèle avec les Thread •Exécution de scripts Python depuis Java • Création de deux classes • Relais 5 V – 220 V • Capteur de lumière • Capteur de mouvement et buzzer • Capteur de température • Capteur à ultrasons et bouton-poussoir • Java et les fichiers .jar • Caméra Pi • Serveur web sur le Rasp-berry Pi • Base de données SQLite • Envoid’e-mails depuis le Raspberry Pi.

Jean-Bernard Boichat est physicien,ingénieur de développement en Java et architecte des systèmes d’information pour les usagers des transports publics, ce qui l’a amené à maîtriser de nom-breux langages (Java, C++, Ruby…) et différentes bases de données (MySQL, SQLite).

À qui s’adresse ce livre ?

• Aux débutants en programmation Java• Aux amateurs d’électronique souhaitant programmer en Java• Aux étudiants et aux makers

Jean

-Ber

nard

Boi

chat

PR

OG

RA

MM

ER

EN

JAV

AP

OU

R L

E R

ASP

BER

RY P

I 3

Jean-Bernard Boichat

PROGRAMMEREN JAVA

POUR LE

RASPBERRYPI 3

Maîtrisez Java et votre Raspberry Pi

Le langage Java et le nano-ordinateur Raspberry Pi sont deux outils incroyablement populaires et pédagogiques dans le monde des technologies actuelles. Cet ouvrage les réunit, dans le but de vous apprendre à programmer en Java en réalisant différents projets simples d’électronique avec un Raspberry Pi 3 (modèles B, B+, A+ et Zero WH).

Le livre débute par l’installation et l’utilisation de l’envi-ronnement de développement Eclipse pour Java, puis présente le port GPIO du Raspberry Pi, en s’aidant des schémas produits par Fritzing. Il utilise ensuite des scripts Python pour tester des composants montés sur uneplatine de test. L’apprentissage de Java s’effectue en douceur à l’aide de la librairie Pi4J qui gère le port GPIO : d’abord avec des LED, puis en utilisant un relais et diffé-rents capteurs (de mouvement, lumière, température…). Vous apprendrez aussi à programmer un serveur web en Java grâce à l’accès Wi-Fi du Raspberry Pi. Enfin, vous ma-nipulerez une base de données SQLite avant de réaliser le projet final : l’envoi d’un e-mail depuis le Raspberry Pi avec la photo de l’intrus entré dans votre logement !

Ce livre d’une grande richesse de contenu est complétépar 120 exercices corrigés, dont les solutions sont disponibles en ligne.

Au sommaireJava et Eclipse • Installation du Rasp-berry Pi 3 B • Putty et WinSCP • Le port GPIO du Raspberry Pi • Python pour vérifier les fonctions GPIO • La librairie Pi4J • Clignotement d’une LED • Débuts en Java • Une classe Java pour lire et écrire des fichiers • Exceptions en Java • Tâches en parallèle avec les Thread •Exécution de scripts Python depuis Java • Création de deux classes • Relais 5 V – 220 V • Capteur de lumière • Capteur de mouvement et buzzer • Capteur de température • Capteur à ultrasons et bouton-poussoir • Java et les fichiers .jar • Caméra Pi • Serveur web sur le Rasp-berry Pi • Base de données SQLite • Envoid’e-mails depuis le Raspberry Pi.

Jean-Bernard Boichat est physicien,ingénieur de développement en Java et architecte des systèmes d’information pour les usagers des transports publics, ce qui l’a amené à maîtriser de nom-breux langages (Java, C++, Ruby…) et différentes bases de données (MySQL, SQLite).

À qui s’adresse ce livre ?

• Aux débutants en programmation Java• Aux amateurs d’électronique souhaitant programmer en Java• Aux étudiants et aux makers

Jean

-Ber

nard

Boi

chat

PR

OG

RA

MM

ER

EN

JAV

AP

OU

R L

E R

ASP

BER

RY P

I 3

Programmer en Java pour le Raspberry Pi 3

Java pour le Raspberry Pi 3.book Page I Thursday, December 13, 2018 8:31 PM

Java pour le Raspberry Pi 3.book Page II Thursday, December 13, 2018 8:31 PM

CHEZ LE MÊME ÉDITEUR

Ouvrages sur Java

A. TASSO. – Le livre de Java premier langage (12e édition).N°67486, 2017, 616 pages.

C. DELANNOY. – Programmer en Java (10e édition).N°67536, 2017, 984 pages.

C. DELANNOY. – Exercices en Java (4e édition).N°67385, 2017, 346 pages.

Dans la collection « Serial Makers »

J. BOYER. – Réparez vous-même vos appareils électroniques (2e édition).N°67621, 2018, 408 pages.

D. NIBART. – 36 activités avec le robot mBot.N°67664, 2018, 64 pages.

D. KNOX. – Petits robots à fabriquer.N°67575, 2018, 160 pages.

J.-M. MOLENAAR ET M. SABOURDY. – Les machines à commande numérique.N°14172, 2018, 176 pages.

E. BARTMANN. – Le grand livre d’Arduino (3e édition).N°67488, 2018, 528 pages.

S. MONK. – Mouvement, lumière et son avec Arduino et Raspberry Pi.N°11807, 2016, 352 pages.

C. PLATT. – L’électronique en pratique (2e édition).N°14425, 2016, 328 pages.

C. PLATT. – L’électronique en pratique 2.N°14179, 2015, 336 pages.

C. BOSQUÉ, O. NOOR ET L. RICARD. – FabLabs, etc.Les nouveaux lieux de fabrication numérique.N°13938, 2015, 216 pages.

Programmer en Java pour le Raspberry Pi 3

Jean-Bernard Boichat

Java pour le Raspberry Pi 3.book Page III Thursday, December 13, 2018 8:31 PM

En rage,su opie,20

©

©

Java pour le Raspberry Pi 3.book Page IV Thursday, December 13, 2018 8:31 PM

application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le présent ouvr quelque support que ce soit, sans l’autorisation de l’Éditeur ou du Centre Français d’exploitation du droit de c, rue des Grands Augustins, 75006 Paris.

Fritzing pour les images 5-2, 13-2, 15-2, 16-2, 17-2, 17-5, 18-3 et 19-2

Éditions Eyrolles, 2019, ISBN : 978-2-212-67746-1

ÉDITIONS EYROLLES61, bd Saint-Germain75240 Paris Cedex 05

www.editions-eyrolles.com

Java pour le Raspberry Pi 3.book Page V Thursday, December 13, 2018 8:31 PM

À Ornella, ma chère épouse,

à nos enfants, Nathalie,Stéphanie etNicolas

à nos adorables petits-enfants,Mathilde,Colin,Théodore,Noé etÉmile

Java pour le Raspberry Pi 3.book Page VI Thursday, December 13, 2018 8:31 PM

Java pour le Raspberry Pi 3.book Page VII Thursday, December 13, 2018 8:31 PM

Cet ouvrage est l’aboutissement de nombreux mois de travail continu à partir de matériel et de logi-ciels que je connais depuis longtemps, comme le Raspberry Pi, le Arduino ou encore le BeagleBone.Lorsque ce livre fut presque terminé à l’été 2018, je me suis décidé à reprendre contact avec leséditions Eyrolles, qui avaient publié mon premier ouvrage, Apprendre Java et C++ en parallèle.Quelle surprise alors de retrouver Antoine Derouin et toute son équipe, et de savoir qu’ils accep-taient ce nouveau challenge !Ce livre, en raison des schémas électroniques qu’il contient, a nécessité une édition en couleurs, sibien qu’il a fallu se limiter en nombre de pages pour des questions de coût : pas forcément évident,alors qu’il y avait tant de sujets, de technologies et d’outils à présenter… Ce ne sont donc pas vrai-ment des remerciements qui seraient légitimes ici, mais plutôt des excuses adressées aux futurs lec-teurs d’un ouvrage relativement compact, mais riche je crois. En complément, les solutions desexercices et les articles disponibles sur mon site web devraient aussi me faire pardonner.Je salue le travail de relecture réalisé par l’équipe d’Eyrolles et je citerai évidemment, en plusd’Antoine Derouin, Sophie Hincelin, Armelle Mancini, Anne Bougnoux parmi d’autres collabo-rateurs. Lorsque je relisais leurs corrections, j’avais plaisir à me relire… autrement. Ce fut parfait,aussi bien le résultat que la présentation.Et puis il y a tous les autres qu’il faut remercier. Toutes ces personnes, souvent anonymes, qui jouraprès jour sur Internet, écrivent des articles, partagent des schémas électroniques, posent des ques-tions suite à une difficulté rencontrée. D’autres y répondent, s’y essaient, même si parfois ce n’estpas toujours juste et précis, mais ils sont là aussi. Que de sources d’inspiration ! Et comment ne pasremercier Google Search qui m’a fourni des centaines de résultats judicieux et fait découvrir denouveaux domaines méritant d’être étudiés.Et puis il y a les spécialistes, qui continuent à livrer du matériel incroyable. Il faut citer bien sûrRobert Savage et le projet Pi4J, mais également la fondation Raspberry Pi ou encore des sitescomme Random Nerd Tutorials, des sources formidables d’information sur des technologies sou-vent naissantes.

Remerciements

Programmer en Java pour le Raspberry Pi 3VIII

Java pour le Raspberry Pi 3.book Page VIII Thursday, December 13, 2018 8:31 PM

N’oublions pas non plus de remercier tous ceux qui ont collaboré à l’écriture et à la stabilité desnombreux logiciels open source, comme Eclipse ou les librairies des langages Java et Python, aux-quels ce livre fait référence.Enfin, un grand merci à ma femme, Ornella qui, après avoir accepté que je me relance dans cenouveau défi d’écriture, a dû parfois patienter aux heures des repas ou au départ de nos baladesquotidiennes ! Nos deux filles Nathalie et Stéphanie, leurs cinq enfants, Mathilde, Théodore,Colin, Noé et Émile, ainsi que notre fils Googler Nicolas, ont été également des soutiens précieuxqui m’ont motivé dans mon travail.Merci à tous.

Jean-Bernard Boichat

Java pour le Raspberry Pi 3.book Page IX Thursday, December 13, 2018 8:31 PM

L’idée de ce livre m’est venue lorsque je testais un capteur de distance sur le mini-ordinateurmonocarte Raspberry Pi 3 B. Pourquoi ne pas faire partager mon expérience en Java sur leRaspberry Pi, dans un environnement Linux et avec des outils comme Eclipse sous Windows ? Lelangage Java et le Raspberry Pi sont en effet deux outils incroyablement pédagogiques et popu-laires dans le monde des technologies actuelles.

Que contient cet ouvrage ?Le but de ce livre n’est pas de couvrir toutes les constructions et les astuces du langage Java, maisde donner suffisamment d’informations pour les débutants, afin de développer de petites applica-tions pour et sur le Raspberry Pi 3 B ou équivalent. C’est un Raspberry Pi nu qui sera considéré,sans écran ni clavier, un vrai objet connecté. L’installation pour une utilisation comme un ordina-teur Linux traditionnel sera aussi examinée.L’outil de développement choisi est Eclipse et je vais considérer que le lecteur a peu ou pas deconnaissances avec cet environnement plutôt complexe. Dès que nous le maîtriserons suffisam-ment, nous ne pourrons plus nous en passer. C’est la raison pour laquelle j’ai présenté un grandnombre d’exemples et d’astuces. Eclipse, c’est tout de même un petit monstre !La présentation de Java est illustrée par différents exemples et exercices, avec en toile de fondl’apprentissage progressif des outils, de la plate-forme Raspberry Pi 3 B et de son Linux Raspbian.Le langage Python est également présenté car il est indispensable pour vérifier les circuitsconnectés au port GPIO et avant toute programmation en Java.Dans cet ouvrage, je commencerai par détailler les installations d’Eclipse et du JDK de Java. Puisnous démarrerons la programmation Java dans un environnement Windows avec un traditionnelHello World sous Eclipse. Ensuite, je passerai sur le Raspberry Pi 3 avec des composants attachésaux broches du port GPIO et leurs schémas Fritzing. Des sujets comme la lecture de fichiers, lacréation d’un serveur web, la prise de photos, l’envoi d’e-mails ou encore l’utilisation d’une base de

Avant-propos

Programmer en Java pour le Raspberry Pi 3X

Java pour le Raspberry Pi 3.book Page X Thursday, December 13, 2018 8:31 PM

données SQLite nous feront rapidement progresser dans l’apprentissage du langage Java et de laplate-forme Raspberry Pi 3 B.

À qui s’adresse ce livre ?Cet ouvrage s’adresse tout d’abord aux makers, aux bricoleurs et aux passionnés de programmationet de découvertes.Il y aura ceux qui connaissent déjà le langage Java, mais peut-être pas tous ses aspects ; ils aurontsans doute acheté le livre en consultant la table des matières et les nombreux exemples.Certains auront déjà travaillé avec un Raspberry Pi, voire avec un Arduino. D’autres auront déjàjoué avec des composants électroniques et des scripts Python. Ce dernier langage est incontour-nable et il constituera une partie importante de cet ouvrage.Enfin, ce livre intéressera aussi tout débutant sans connaissances en Java et Python, ou de l’envi-ronnement Linux, mais ayant une bonne base de programmation dans un autre langage.

De quoi a-t-on besoin ?Pour le développement, je n’ai considéré ici que l’environnement Windows 10. Mais certains outilscomme Eclipse existent aussi sous Linux (Ubuntu, par exemple) et sous Mac. Des programmescomme PuTTY ou WinSCP ont également leurs équivalents dans ces systèmes d’exploitation. Lelecteur pourra consulter le site web de l’auteur pour un environnement Ubuntu.Un bon PC équipé d’un processeur i5 récent bien cadencé et de 4 Go de mémoire vive est suffisantpour assurer une compilation rapide des programmes et garantir un environnement agréable pourle développement.Plusieurs outils traditionnels Windows sont utilisés sans être décrits en détail, comme l’extracteurde fichiers ZIP.

Le port GPIO du Raspberry Pi

Le port GPIO, ou l’interface GPIO, est une extension contenant des broches permettant de se connecter à des compo-sants électroniques. Nous y trouverons évidemment des broches de tensions (3,3 V et 5 V), mais aussi des entrées/sortiesdigitales et de communication. Ces broches digitales accueilleront aussi bien des LED à allumer ou éteindre, des relais220 V pour enclencher et déclencher des appareils, que des capteurs de lumière, de mouvement ou de température.Cette « électronique » associée à la puissance d’un Raspberry Pi connecté à Internet et à des outils comme Linux,Java ou Python, donne à la fois un environnement enthousiasmant pour les passionnés de nouvelles découvertes etla raison d’un tel ouvrage.J’ajouterai que, même si le Raspberry Pi 3 B n’a pas les fonctionnalités analogiques et temps réel d’un Arduino, ilpossède néanmoins toutes les capacités pour écrire du logiciel conséquent. L’Arduino et le Raspberry Pi sont doncen fait complémentaires.

Avant-propos XI

Java pour le Raspberry Pi 3.book Page XI Thursday, December 13, 2018 8:31 PM

Un accès à Internet avec Wi-Fi est nécessaire. Le routeur, par exemple, nous permettra d’attribuerune adresse IP au Raspberry Pi 3 B. J’utilise Chrome et Firefox comme navigateurs pour lesexemples dédiés au Web.Il faut se procurer un Raspberry Pi de dernière génération, c’est-à-dire un Pi 3 B ou équivalent.Une alimentation classique avec un câble USB est nécessaire, ainsi qu’une microcarte (microSD).Nous verrons tout au long de l’ouvrage un certain nombre de composants électroniques dédiés auRaspberry Pi : LED, relais, capteurs de présence ou de lumière, etc.Enfin, plusieurs appareils sont pratiques, mais pas obligatoires, comme un multimètre, tellementfacile pour vérifier une tension ou une résistance sans utiliser le codage figurant sur le composant.

Pourquoi autant d’exemples et d’exercices ?À mon sens, il n’y en a jamais assez et ce livre pourrait très bien être utilisé comme base d’ensei-gnement dans une école et comme outil d’apprentissage.Lorsque nous débutons en programmation, nous commençons par écrire de petits morceaux deprogrammes. Ensuite, nous passons à des exercices plus complexes en intégrant d’autres fonctionsou composants. L’essentiel est d’écrire du code, beaucoup de code. Un bon programmeur sera tou-jours un collectionneur d’exemples, d’essais et de programmes, qu’il pourra rapidement retrouveret adapter lorsqu’il en aura besoin.Les exercices m’ont aussi donné l’occasion de vérifier la consistance et la structure de cet ouvrage.Ils aideront en outre les lecteurs à suivre leurs progrès.Tous les exercices sont en principe faisables, mais je ne les ai pas toujours codés entièrement, car ilsviennent souvent d’idées qu’il faudra expérimenter et qui pourraient devenir des projets informa-tiques vraiment conséquents.

Stockage du travail sur ordinateurIl nous arrivera de créer de petits scripts Linux ou Python directement sur le Raspberry Pi, mais cedernier n’est pas forcément l’endroit le plus sûr pour garder nos fichiers. Il est donc conseillé debien stocker son travail sur son PC.Les éléments à sauvegarder seront :• l’espace de travail d’Eclipse avec tout le code Java ;• les scripts Linux et Python du Raspberry Pi ;• d’éventuels scripts Python pour apprendre le langage sur son ordinateur ;• les images de sauvegarde du Raspbian du Raspberry Pi 3 (voir chapitre 3).

Programmer en Java pour le Raspberry Pi 3XII

Java pour le Raspberry Pi 3.book Page XII Thursday, December 13, 2018 8:31 PM

Commentaires et suivi de l’ouvrageJ’apprécierai très volontiers de recevoir des commentaires et critiques de cet ouvrage à l’adresseélectronique suivante :À : [email protected] Objet : Java et le Raspberry Pi 3Sur le site web http://www.boichat.ch/javaraspberry/, vous trouverez en fichiers .zip les codes sources desexemples, les solutions ou des pistes pour les exercices, d’éventuelles corrections, ainsi que desremarques pertinentes ou des difficultés rencontrées par certains lecteurs. Après extraction, ilfaudra absolument utiliser Notepad++ pour s’assurer de lire correctement les fichiers texte. Vousaurez également à votre disposition des informations sur les nouvelles versions des outils et desmodèles de Raspberry Pi, ainsi qu’une liste de sites et d’ouvrages intéressants et recommandés. Jemettrai toutes ces informations régulièrement à jour avec d’éventuelles adaptations et améliora-tions.

Table des matières

Java pour le Raspberry Pi 3.book Page XIII Thursday, December 13, 2018 8:31 PM

CHAPITRE 1Java et l’environnement de développement Eclipse ................. 1

Pourquoi Eclipse ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1Simulation du matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1Installation d’Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2Installation du JDK de Java sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3Premier démarrage d’Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6Fichiers .java et .class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8Notepad++ et les fichiers texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9Notre première classe Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Compilation et exécution sans Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Compilation et exécution sous Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Une première astuce d’Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Le répertoire projet HelloWorld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Eclipse en UTF-8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

CHAPITRE 2Aller plus loin avec Eclipse ......................................................... 21

Principe de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Pas à pas sous Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Nous déboguons enfin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Bien maîtriser les raccourcis F5, F6, F7 et F8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

CHAPITRE 3Installation du Raspberry Pi 3 B ................................................. 35

Autres modèles de Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Référence du matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Matériel requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36Installation de Raspbian avec écran et NOOBS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Installation de Raspbian sans écran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Fixer l’adresse IP dans le routeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Adapter ou corriger les réseaux Wi-Fi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

Programmer en Java pour le Raspberry Pi 3XIV

Java pour le Raspberry Pi 3.book Page XIV Thursday, December 13, 2018 8:31 PM

Sauvegarde régulière de l’image disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46Restauration d’une image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48Stopper correctement le Raspberry Pi 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49

CHAPITRE 4PuTTY et WinSCP pour accéder au Raspberry Pi........................ 51

Installation de PuTTY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51Configuration du Raspberry Pi 3 B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53Une première initiation à Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55Installation de WinSCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61Première exécution de HelloWorld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65Encore un peu de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67

CHAPITRE 5Le Raspberry Pi 3 et son port GPIO ............................................ 69

Matériel requis pour le montage des circuits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69La numérotation Pi4J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70Fritzing et ses schémas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71Quelques informations sur l’utilisation de Fritzing . . . . . . . . . . . . . . . . . . . . . . . . . . .73Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73

CHAPITRE 6Python pour vérifier les fonctions GPIO.................................... 75

Débuter en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75Les fichiers .py de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77Une LED sur une broche GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78Deux LED actives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82

CHAPITRE 7Les bibliothèques Pi4J pour Java ............................................... 83

Vérification préalable à l’installation de Pi4J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83Mise à jour de Raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84Installation de Pi4J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86Compilation des exemples de Pi4J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87Exécution des exemples de Pi4J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89

Table des matières XV

Java pour le Raspberry Pi 3.book Page XV Thursday, December 13, 2018 8:31 PM

CHAPITRE 8Clignotement d’une LED avec Pi4J sous Eclipse........................ 91

Mise en place de Pi4J sous Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91La classe ClignoteLed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92ClignoteLed sur le Raspberry Pi 3 B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Amélioration de ClignoteLed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

CHAPITRE 9Nos débuts en Java...................................................................... 99

Variables et objets en Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100De nombreux opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105Tableaux de variables et leurs initialisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Variables de type String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Variables byte, int, long ou double et leurs opérateurs . . . . . . . . . . . . . . . . . . . . . . . . 116Variables final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Transtypage (casting) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Opérations booléennes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Instructions if() et else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120Instruction switch() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Méthodes equals(), == et compareTo() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125Division par zéro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Apprendre avec de petits jeux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

CHAPITRE 10Une classe Java pour lire et écrire des fichiers ....................... 129

Lire un fichier de paramètres de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129Fichier texte sous Windows ou Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Notre fichier de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Une classe Java pour une première lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131La classe ConfigParam complète . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Lecture et écriture de fichiers binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

CHAPITRE 11Les exceptions en Java.............................................................. 141

Un projet Eclipse pour vérifier les exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141La fameuse division par zéro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Un index en dehors des limites (finally) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Pointeur null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Résoudre les imports et exceptions dans Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147Pourquoi pas throws ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

Programmer en Java pour le Raspberry Pi 3XVI

Java pour le Raspberry Pi 3.book Page XVI Thursday, December 13, 2018 8:31 PM

Traitement de plusieurs exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151

CHAPITRE 12Des tâches en parallèle avec les Thread de Java..................... 153

Un exemple simple de Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156

CHAPITRE 13Exécution de scripts Python depuis Java................................. 157

Une classe de test ProcessBuilderPythonT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157Traitement des erreurs de ProcessBuilderPythonT . . . . . . . . . . . . . . . . . . . . . . . . . .161ProcessBuilder avec un script Python sur le Raspberry Pi 3 . . . . . . . . . . . . . . . . . . . .162Deux scripts Python en parallèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171

CHAPITRE 14Deux classes pour calculer les heures du leveret du coucher de soleil .............................................................. 173

Spécifications de l’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173Une classe pour les périodes actives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184

CHAPITRE 15Utilisation d’un relais 5 V - 220 V............................................. 185

Caractéristique du relais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185La classe Java Relay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188Déboguer sur le Raspberry Pi depuis Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194La classe PresenceSimulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200

CHAPITRE 16Utilisation d’un capteur de lumière......................................... 201

Mesure de la lumière ambiante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201LightRead dans un thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209Javadoc pour LightRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210Génération de Javadoc du projet RelaisEclairage . . . . . . . . . . . . . . . . . . . . . . . . . . .211Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214

Table des matières XVII

Java pour le Raspberry Pi 3.book Page XVII Thursday, December 13, 2018 8:31 PM

CHAPITRE 17Utilisation d’un capteur de mouvement et d’un buzzer ........ 215

Capteur de mouvement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215Sirène buzzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228

CHAPITRE 18Utilisation d’un capteur de température ................................ 231

Capteur de température DS18B20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231Quelle embrouille avec tous ces fils ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

CHAPITRE 19Utilisation d’un capteur à ultrasonset d’un bouton-poussoir ........................................................... 239

Schéma Fritzing global . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Capteur à ultrasons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Bouton-poussoir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

CHAPITRE 20Java et les fichiers .jar............................................................... 253

Eclipse default package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253L’instruction package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Générer un .jar de manière simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258Exercice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

CHAPITRE 21Utilisation d’une caméra Pi....................................................... 259

Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259Premiers tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261La classe ProcessBuilderCamera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Accès à une clé USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Des applications ludiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

Programmer en Java pour le Raspberry Pi 3XVIII

Java pour le Raspberry Pi 3.book Page XVIII Thursday, December 13, 2018 8:31 PM

CHAPITRE 22Installation d’un serveur web sur le Raspberry Pi.................. 269

Pourquoi un serveur web sur un Raspberry Pi ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270La classe RaspWebServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270La classe RaspWebSetServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287

CHAPITRE 23La base de données relationnelle SQLite ................................ 289

DB Browser for SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290Création d’une première base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290Installation et vérification de SQLite3 sur le Raspberry Pi 3 . . . . . . . . . . . . . . . . . . .293Création d’une base de données directement sur le Raspberry Pi 3 . . . . . . . . . . . . . . .293Insertion de données dans SQLite avec SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294L’instruction SELECT de SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296Le JDBC de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296TestJDBCsqlitePi sur le Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299Extraction de données avec JDBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300La classe RaspbEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .302La classe TestRaspbEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .304Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .305

CHAPITRE 24Envoi d’e-mails depuis le Raspberry Pi .................................... 307

La classe EmailEnvoi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .307Envoi d’un e-mail depuis le Raspberry Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311Envoi d’un e-mail avec des données tirées de SQLite . . . . . . . . . . . . . . . . . . . . . . . .311Envoi d’un e-mail avec une image de la caméra . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314PIR, prise d’image et envoi d’e-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .318Répertoire sendmails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .320Résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321

ANNEXENumérotation GPIO ................................................................... 323

Index........................................................................................... 325

Java pour le Raspberry Pi 3.book Page 1 Thursday, December 13, 2018 8:31 PM

Pourquoi Eclipse ?Eclipse est avant tout un éditeur de code source et un environnement de développement opensource gratuit. Il est utilisable pour différents langages de programmation, comme Java ou C++.Le site de référence de la fondation se trouve à l’adresse http://www.eclipse.org. Il y a évidemmentd’autres outils possibles, parmi lesquels nous citerons évidemment NetBeans (https://netbeans.org/),gratuit aussi et tout à fait comparable. Le premier est plus un choix professionnel, surtout pour letravail en entreprise et en groupe.Eclipse n’est pas facile, mais la démarche choisie ici, avec des exemples simples au début, devraitaider le lecteur, même débutant.La différence essentielle entre un éditeur traditionnel et Eclipse est que ce dernier va déjà nousmontrer les erreurs de syntaxe et de code durant la frappe.

Simulation du matérielEn développant sous Windows et avec Eclipse pour Java, nous importerons toutes les biblio-thèques Java dont nous aurons besoin pour notre travail. Même les bibliothèques spécifiques liéesau Raspberry Pi et à son port GPIO seront considérées.

1Java et l’environnement de

développement Eclipse

Programmer en Java pour le Raspberry Pi 32

Java pour le Raspberry Pi 3.book Page 2 Thursday, December 13, 2018 8:31 PM

Lorsque nous ajouterons le logiciel pour un composant, comme un capteur de lumière, de mouve-ment ou de température, nous aurons évidemment un problème.Le principe défini ici est le suivant, avec l’exemple d’un capteur de mouvement :• Nous utiliserons un script Python sur le Raspberry Pi, beaucoup plus simple que le Java,

pour vérifier que le circuit fonctionne.• Nous compilerons le code Java de ce capteur dans Eclipse, avant de le transférer et de le

tester sur le Raspberry Pi.• Nous définirons du code de simulation de mouvement sous Windows pour vérifier notre

code Java.Le code Java des applications va vite correspondre à plus de 80 % du total. Le reste sera constituéde fonctions spécifiques aux composants GPIO du Raspberry Pi.En simulant un mouvement détecté par le capteur, soit de manière aléatoire, soit toutes lesn secondes, nous pourrons plus facilement vérifier notre code et aussi passer en mode débogage.Une application qui s’attend à une température de -10 ou +40 degrés, ou à une intensité de lumièreparticulière, sera beaucoup plus facile à vérifier dans Eclipse, avec une simulation, que sur unRaspberry Pi avec de la glace ou un chalumeau !

Installation d’EclipsePour le lecteur qui a déjà installé et utilisé Eclipse, un nouvel espace de travail suffira.Nous trouverons les différentes versions sur le site https://www.eclipse.org/downloads/. L’outil est enanglais et nous nous y habituerons rapidement. Nous avons choisi la version Oxygen, la dernièreen date au moment de l’écriture de ce livre.

Pour Windows, nous avons sélectionné la version 64 bits (PC récents), mais des versions Linux oumacOS existent aussi. Téléchargez le fichier zippé contenant Eclipse IDE for Java Developers :eclipse-java-oxygen-3-win32-x86_64.zip.Nous sélectionnerons sur notre ordinateur un disque suffisamment grand, voire rapide (SSD), pour yinstaller deux répertoires : un qui contiendra Eclipse et un autre de travail (le Workspace en anglais).L’auteur a choisi le disque D: (pour ne pas encombrer le disque C: dédié à Windows 10) et lesrépertoires D:\EclipseJavaOxygen et D:\EclipseWorkspace.

Si nous installions plus tard une version plus récente, nous choisirions alors d’autres répertoires. L’expor-tation de l’espace de travail et des projets pour cette nouvelle version est assez simple à effectuer.

TÉLÉCHARGEMENT Oxygen

B http://www.eclipse.org/downloads/packages/release/Oxygen/3

Java et l’environnement de développement EclipseCHAPITRE 1

3

Java pour le Raspberry Pi 3.book Page 3 Thursday, December 13, 2018 8:31 PM

Le plus commode est de dézipper eclipse-java-oxygen-3-win32-x86_64.zip dans D\: et derenommer le répertoire eclipse sur la racine en D:\EclipseJavaOxygen.Dans ce répertoire, nous trouverons le fichier eclipse.exe, l’application Eclipse, dont nous crée-rons un lien sur le Bureau :

Avant de démarrer Eclipse pour la première fois, il nous faut installer Java.

Installation du JDK de Java sous WindowsLe kit de développement pour Java, c’est le communément nommé JDK. Le Java SE DevelopmentKit 8 est la version simplifiée et se trouve sur le site d’Oracle.

Des versions plus récentes peuvent exister et ne devraient pas poser de difficultés. Il faut cependantqu’elles restent compatibles avec la version du Java que nous installerons sur le Raspberry Pi 3 B.Nous resterons donc avec la version 8 des deux côtés.Nous avons téléchargé la version Windows 64 bits jdk-8u161-windows-x64.exe après avoiraccepté l’accord de licence. Nous exécutons ce fichier à partir du répertoire de téléchargement :

Figure 1–1Raccourci Eclipsedu Bureau Windows

Eclipse Photon June 2018, version 4.8.0

Lorsque le livre était pratiquement terminé, l’auteur a aussi installé cette dernière version. Il n’a pas rencontré dedifficultés. L’installeur est différent et il faut choisir la version Eclipse IDE for Java Developers.Si nous avons déjà un espace de travail (Workspace), il faut le sauvegarder, avant de l’utiliser pour cette nouvelle version.L’auteur fait régulièrement ces mises à jour, mais garde les anciennes versions et ses workspaces. Le nom de cesderniers contient la date et le nom de la version Eclipse comme Neon ou Oxygen3.

TÉLÉCHARGEMENT Java SE Development Kit 8

B http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Programmer en Java pour le Raspberry Pi 34

Java pour le Raspberry Pi 3.book Page 4 Thursday, December 13, 2018 8:31 PM

En cliquant sur Next, nous lançons l’installation :

Nous laissons toutes les options. Le code source est important pour retrouver la documentationdes classes de la plate-forme Java.

Figure 1–2Installation du JDK– Démarrage

Figure 1–3Installation du JDK– Option

Java et l’environnement de développement EclipseCHAPITRE 1

5

Java pour le Raspberry Pi 3.book Page 5 Thursday, December 13, 2018 8:31 PM

Si nous n’avons pas de restriction d’espace, il est préférable de laisser le JDK sur le disque C: principal.

L’installation est à présent terminée. Les outils de développement et le Runtime de Java sont ins-tallés et prêts pour être utilisés avec Eclipse.

Figure 1–4Installation du JDK– Répertoire

Figure 1–5Installation du JDK– Fin de l’installation

Programmer en Java pour le Raspberry Pi 36

Java pour le Raspberry Pi 3.book Page 6 Thursday, December 13, 2018 8:31 PM

Premier démarrage d’EclipseNous lançons Eclipse avec le raccourci (figure 1-1).

Nous cochons l’utilisation par défaut, car nous ne travaillerons pour l’instant qu’avec un seul espacede travail. Si nos projets deviennent conséquents, il sera préférable d’utiliser des espaces différents ;nous passerons alors de l’un à l’autre avec le menu File>Switch Workspace.Le bouton Launch démarre Eclipse :

Décochons en bas à gauche le Always show Welcome at start up si nous ne désirons plus revoircette fenêtre au démarrage. Il sera cependant toujours possible de la réactiver ou de la fermer avecle menu Help>Welcome.« Hello World en Java » sera notre premier projet Eclipse. Nous allons donc sélectionner File>New>Java Project dans le menu :

Figure 1–6Eclipse – Premier démarrage

Figure 1–7Eclipse – Premier démarrage

Java et l’environnement de développement EclipseCHAPITRE 1

7

Java pour le Raspberry Pi 3.book Page 7 Thursday, December 13, 2018 8:31 PM

Indiquons HelloWorld comme nom de projet.

Nous laissons les autres options et continuons avec le bouton Finish.

Figure 1–8Nouveau projet

Figure 1–9Le projet Eclipse HelloWorld

Programmer en Java pour le Raspberry Pi 38

Java pour le Raspberry Pi 3.book Page 8 Thursday, December 13, 2018 8:31 PM

Voici donc notre projet HelloWorld sous Eclipse, mais sans aucun code ou ressource.

Fichiers .java et .classLes fichiers .java sont les sources des programmes Java.Ils doivent suivre une syntaxe précise afin qu’ils puissent être compilés pour devenir des fichiers.class exécutables par une machine virtuelle Java.Le JDK installé vient avec deux fichiers exécutables sous Windows, java.exe et javac.exe, quisont respectivement la machine virtuelle pour exécuter les classes Java et le compilateur.

En général, un PC Windows possède déjà un fichier binaire java.exe préinstallé quelque part.Plusieurs versions peuvent aussi cohabiter.Comme Eclipse compile les sources de code Java et exécute ses classes à l’intérieur de l’outil, c’estdonc totalement transparent. Nous ferons tout de même l’exercice pour compiler et exécuter horsd’Eclipse notre premier HelloWorld.Dans cet ouvrage, nous ne compilerons jamais directement sur le Raspberry Pi 3 B. La version etles bibliothèques de l’environnement Java seront choisies et définies sous Eclipse pour permettrel’exécution plus tard sans soucis sur le Raspberry Pi 3 qui possède sa propre version de Java(la même que sur le PC).Au contraire d’un code compilé avec des langages comme C++, nous n’avons pas besoin de recom-piler le code ou d’utiliser un cross-compiler (compilateur croisé). La machine virtuelle Java préins-tallée sur le Raspberry Pi exécute donc le code, appelé bytecode, des fichiers .class ou desbibliothèques .jar.

Figure 1–10Un projet Eclipse sans source

DÉFINITION Machine virtuelle

« La machine virtuelle Java (en anglais Java virtual machine, abréviation JVM) est un appareil informatique fictif quiexécute des programmes compilés sous forme de bytecode Java. » (Wikipedia)

Java et l’environnement de développement EclipseCHAPITRE 1

9

Java pour le Raspberry Pi 3.book Page 9 Thursday, December 13, 2018 8:31 PM

Lorsque nous aurons installé et eu accès au Raspberry Pi 3 B, nous pourrons vérifier les versionsinstallées de la manière suivante :

Eh oui :• Il n’y a pas de .exe sous Linux.• Un compilateur javac existe, mais il ne sera pas directement utilisé ici.

Notepad++ et les fichiers texteL’utilisation de Notepad++ sous Windows est impératif pour cet ouvrage. Il y a peut-être des alter-natives que l’auteur n’a pas recherchées. Des outils comme le Bloc-notes ou WordPad sont inutili-sables dans la plupart des cas.Notepad++ va nous garantir que nos fichiers texte préparés et/ou modifiés sous Windows et/ou leRaspberry Pi fonctionneront dans tous les cas. Les fichiers des codes sources et des exercices de cetouvrage sont disponibles dans des archives compressés .zip. Vous serez assuré que ces derniersfonctionnent correctement en utilisant Notepad++ pour la lecture ou la modification, avant utilisa-tion dans Eclipse ou pour un transfert sur le Raspberry Pi.

Installons-le par exemple dans le répertoire D:\Program Files (x86)\Notepad++, voire sur unautre disque ou le C: traditionnel.Associez à Notepad++ les fichiers du type .java, .py (les fichiers Python), .txt (texte tradi-tionnel), .sh (script shell Linux), .sql (fichiers de bas de données) ou encore .html.Notepad++ propose une coloration syntaxique pour chaque langage défini par l’extension. C’esttrès pratique pour des fichiers .py, .sql ou .html et un plaisir de voir les instructions coloréescorrectement. Il est clair que, pour les fichiers .java, cela ne sera pas utile en principe, puisquenous travaillerons sous Eclipse. Néanmoins, visionner un fichier Java dans Notepad++ est vrai-ment propre et cela n’a rien à voir avec le Bloc-notes de Windows.Les fichiers édités avec Notepad++ nous garantiront un contenu correct pour les caractères accen-tués, voire des langues étrangères. Les procédures de copier-coller seront aussi décrites plus loindans cet ouvrage.

pi@raspberrypi:~ $ java -versionjava version "1.8.0_65"Java(TM) SE Runtime Environment (build 1.8.0_65-b17)Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)

pi@raspberrypi:~ $ javac -versionjavac 1.8.0_65

TÉLÉCHARGEMENT Notepad++

B https://notepad-plus-plus.org/fr/

Programmer en Java pour le Raspberry Pi 310

Java pour le Raspberry Pi 3.book Page 10 Thursday, December 13, 2018 8:31 PM

Notre première classe JavaLe code source Java doit suivre une syntaxe définie, sans quoi il ne sera pas compilable.Voici donc notre classe Java HelloWorld dans un fichier HelloWorld.java préparé avecNotepad++, déposé par exemple dans D:\EclipseWorkspace et que nous intégrerons rapidementsous Eclipse :

Le nom du fichier doit commencer par une majuscule. Nous n’utiliserons que des majuscules etdes minuscules, voire des chiffres, dans cet ouvrage. Ici, le W majuscule donne plus de lisibilité aunom du fichier et de la classe générée après compilation. Cette alternance de minuscules et majus-cules sera utilisée pour les noms des variables et des méthodes.Cette classe est plus que primitive : elle ne contient que l’entrée main() static. Nous ne créonspas d’objet, c’est-à-dire d’instance de cette classe. C’est un peu obscur pour l’instant, mais celadeviendra rapidement évident.Pour avancer un peu, nous avons déjà ajouté une extension à notre HelloWorld : l’affichage de ladate. Date et System sont des classes Java standards. La première nécessite qu’on l’importe avecl’instruction import. Le * indique qu’on va pouvoir considérer toutes les classes qui se trouventdans la collection java.util du JDK (Java Development Kit), même si nous n’avons besoin que dela classe Date.Le point d’entrée qu’utilisera la machine virtuelle de Java pour l’exécution de HelloWorld :

s’explique comme suit :• public signifie visible et accessible pour tous.• static veut dire « qui appartient à la classe » et non « à un objet de cette classe ».• main() est le point d’entrée principal.• String est une classe Java contenant une chaîne de caractères.• String[] args est un tableau de paramètres passé par la machine virtuelle.

// Projet Eclipse HelloWorld//import java.util.*;

public class HelloWorld {public static void main(String[] args) {

Date aujourdhui = new Date();

System.out.println("Hello world en Java: " + aujourdhui);}

}

public static void main(String[] args) {

Java et l’environnement de développement EclipseCHAPITRE 1

11

Java pour le Raspberry Pi 3.book Page 11 Thursday, December 13, 2018 8:31 PM

L’instruction :

se traduit quant à elle ainsi : création d’une variable objet, de type Date, avec l’instruction newappliquée sur le constructeur Date() de la classe Date.Nous verrons bientôt comment, avec Eclipse, obtenir de la documentation sur les classes commeDate et System et leurs méthodes (fonctions) associées, ici out.println(). Cette dernière nous« imprime » le résultat à l’écran (sortie out). Ce que nous nommons « écran » sera la consoled’Eclipse. Nous verrons aussi plus loin comment l’opérateur + va concaténer la chaîne de carac-tères Hello entre les guillemets "" avec une autre chaîne de caractères retournée par aujourdhuique le compilateur va convertir avec aujourdhui.toString().Les chapitres suivants fourniront plus de détails sur la syntaxe et les instructions du langage Java.

Compilation et exécution sans EclipseNous allons fixer les variables d’environnement PATH et JAVA_HOME de Windows, afin de nousassurer de travailler avec la bonne version de Java pour notre exemple.Pour ajouter ou adapter ces deux variables d’environnement, nous utilisons la loupe de recherchede Windows et entrons Modifier les variables d’environnement système et cliquons finalement surVariable d’environnement. Dans la partie Variables système, nous ajoutons et adaptons JAVA_HOMEet PATH comme suit :

Avec Modifier, nous nous assurons que C:\Program Files\Java\jdk1.8.0_161\bin est bien enpremière position pour Path. Les deux variables doivent être positionnées à l’emplacement desfichiers binaires du JDK précédemment installé.Pour vérifier ces variables, ainsi que le compilateur et la machine virtuelle, nous allons utiliser uneconsole Windows CMD :

Date aujourdhui = new Date();

Figure 1–11Windows PATH et JAVA_HOME

Programmer en Java pour le Raspberry Pi 312

Java pour le Raspberry Pi 3.book Page 12 Thursday, December 13, 2018 8:31 PM

Le paramètre -version nous permet de vérifier les versions. Aucune erreur n’est émise pour lacompilation de HelloWorld.java. La commande java (.exe pas nécessaire) qui exécuteHelloWorld n’a pas besoin de l’extension .class. Notre programme fonctionne correctement.

Compilation et exécution sous EclipsePrécédemment, nous avons créé le projet HelloWorld sans classe Java. Nous allons maintenant yintégrer notre classe HelloWorld avant de le compiler et de l’exécuter.

Figure 1–12Vérification du JDKavec une console CMD

Figure 1–13Eclipse – Ajouterune classe Java

Java et l’environnement de développement EclipseCHAPITRE 1

13

Java pour le Raspberry Pi 3.book Page 13 Thursday, December 13, 2018 8:31 PM

Le menu File>New>Class nous permet de définir et d’ajouter une nouvelle classe à notre projet :

Il suffit d’entrer HelloWorld comme Name, le nom de la classe. Nous cochons l’option publicstatic void main() pour indiquer que cette classe aura un point d’entrée. Une classe Java doitcontenir une entrée main() si nous voulons pouvoir l’exécuter avec une machine virtuelle ; si unfichier .java ne possède pas d’entrée main(), cela indique qu’il contient des classes (objets) utili-sées par d’autres classes. C’est une bonne habitude de définir une entrée main() à des fins de test,même si cette classe ne sera jamais l’application principale.Ici, nous n’utiliserons pas de package pour ces exercices simples (voir le chapitre consacré auxfichiers .jar).Après Finish, le code suivant de cette nouvelle classe sera présenté dans la fenêtre d’éditiond’Eclipse :

Figure 1–14Eclipse – Définitiond’une nouvelle classe

Programmer en Java pour le Raspberry Pi 314

Java pour le Raspberry Pi 3.book Page 14 Thursday, December 13, 2018 8:31 PM

Nous allons à présent copier le code du fichier HelloWorld.java créé précédemment avecNotepad++ et le coller dans la fenêtre d’édition :

Avec la commande Run dans le menu, ou en pressant le bouton équivalent (rond vert – Play) dansla barre supérieure, le résultat Hello world en Java avec la date apparaîtra dans la fenêtreconsole inférieure.Lors du tout premier Run, la fenêtre suivante devrait apparaître :

Figure 1–15Eclipse – Création d’une classe

Figure 1–16Notre classe HelloWorld

Figure 1–17Sauvegarde automatiquesous Eclipse

Java et l’environnement de développement EclipseCHAPITRE 1

15

Java pour le Raspberry Pi 3.book Page 15 Thursday, December 13, 2018 8:31 PM

Ici, nous avons coché le Always save et cette fenêtre n’apparaîtra plus. Le fichierHelloWorld.java sera automatiquement enregistré avant chaque Run.Le même type de fenêtre apparaîtra aussi pour demander une confirmation pour d’autres sortes defichiers, comme des fichiers de configuration. La décision est laissée au programmeur, qui peuttoujours utiliser l’icône disquette pour une sauvegarde manuelle.À la première utilisation, il est possible que la machine virtuelle soit bloquée par le Pare-feu deWindows. Il faut donc la débloquer :

Nous noterons ici la version javaw.exe (et non java.exe) qui n’a pas de console associée.

Une première astuce d’EclipseRemarquez les marques à gauche du code indiqué par Eclipse :

statica n’est pas une instruction Java, mais une faute de frappe. Elle sera soulignée et marquée àgauche. Ce code-ci, avant correction, ne pourra évidemment pas être exécuté.

Figure 1–18Pare-feu de Windows

Figure 1–19Erreur dans le code Java