13
Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place une plateforme de réseau de capteurs à l’aide de l’Arduino et du Raspberry PI. Ainsi une carte Arduino, à laquelle on connectera toute sorte de capteurs, constituera un nœud faible puissance dont le rôle sera de transmettre les données du capteur au serveur représenté par le Raspberry PI. Notre objectif final sera de parvenir à un serveur Web affichant en temps réel la température stockée dans une base de données et qui sera obtenue à partir d’un Arduino connecté par une liaison sans fil. Pour parvenir à cet objectif, je vous propose de suivre quelques étapes qui doivent vous permettre de comprendre les interactions entre les différentes technologies mises en œuvre. 2. Présentation du matériel : 2.1. Nœud de collecte des données : Carte Arduino UNO Le projet de logiciel et de matériel libre Arduino est aujourd’hui une référence : https://www.arduino.cc/ Il met à disposition de l’utilisateur tout un écosystème matériel (shields) et logiciel (IDE Arduino) permettant de réaliser rapidement et pour un coût modique (environ 20€) une application à microcontrôleur. L’Arduino UNO se

Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Embed Size (px)

Citation preview

Page 1: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 1

Raspberry Pi et réseau de capteurs sans fil

1. Introduction :

Nous souhaitons mettre en place une plateforme de réseau de capteurs à

l’aide de l’Arduino et du Raspberry PI. Ainsi une carte Arduino, à laquelle on

connectera toute sorte de capteurs, constituera un nœud faible puissance

dont le rôle sera de transmettre les données du capteur au serveur

représenté par le Raspberry PI.

Notre objectif final sera de parvenir à un serveur Web affichant en temps réel

la température stockée dans une base de données et qui sera obtenue à partir

d’un Arduino connecté par une liaison sans fil. Pour parvenir à cet objectif, je

vous propose de suivre quelques étapes qui doivent vous permettre de

comprendre les interactions entre les différentes technologies mises en

œuvre.

2. Présentation du matériel :

2.1. Nœud de collecte des données :

Carte Arduino UNO

Le projet de logiciel et de matériel libre Arduino est aujourd’hui une référence :

https://www.arduino.cc/

Il met à disposition de l’utilisateur tout un écosystème matériel (shields) et

logiciel (IDE Arduino) permettant de réaliser rapidement et pour un coût

modique (environ 20€) une application à microcontrôleur. L’Arduino UNO se

Page 2: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 2

connecte à l’ordinateur via un port série et permet de commander facilement

toute une série d’actionneurs ou d’acquérir des données de différents capteurs

analogiques ou numériques et évidemment d’effectuer des traitements sur ces

données.

Capteur de température DS18B20 de MAXIM Integrated

Le DS18B20 a une gamme de mesure qui s'étend de -55 °C à +125 °C. Il

transmet sa mesure directement en degrés Celsius, codée sur 16 bits sur

un bus un fil (protocole OneWire).

https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

2.2. Nœud de centralisation, de traitement et d’affichage des données :

Carte Raspberry PI 2

Page 3: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 3

Cette carte est bien plus performante qu’un Arduino puisqu’elle

comporte notamment un processeur 4 cœurs de type ARM A7. La

puissance est suffisante pour faire tourner un système d’exploitation

Linux offrant tous les éléments logiciels nécessaires à notre application.

Cette carte présente également l’avantage de disposer d’un

connecteur d’E/S à 40 broches permettant de s’interfacer avec de

nombreux dispositifs extérieurs. Vous constaterez qu'il y a deux modes

de numération des broches : le mode BCM et le mode BOARD. Il faudra

en tenir compte dans les programmes que vous réaliserez

2.3. Liaison sans fil :

Liaison radio à base de NRF24L01

Il s’agit d’une puce du fabricant Nordic Semiconductor qui permet des

liaisons sur la bande ISM (2.4GHz dans ce cas précis) à un débit maximal

de 2Mbits/s ce qui est amplement suffisant pour notre application.

Page 4: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 4

http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01

Ce module est de très faible coût (on le trouve à moins de 1€ sur le web).

Il communique avec n’importe quel système en utilisant le protocole SPI.

Dernier avantage et non des moindres : il existe une bibliothèque logicielle

facilitant sa mise en œuvre sur l’Arduino et le Raspberry PI. Il s’agit de la

bibliothèque RF24 :

https://tmrh20.github.io/RF24/index.html

3. Présentation de l’application

Il s’agit de réaliser une liaison sans fil entre un Arduino équipé d’un

capteur DS18B20 et un Raspberry PI. Plus précisément :

Le Raspberry PI équipé du module NRF24L01 envoie une requête

conformément à un intervalle de temps déterminé à l’Arduino équipé,

du même module qui renvoie alors l’information de température.

Cette température est stockée dans une base de données présente sur

le Raspberry PI.

L’évolution de la température issue de la base de données est

consultable via une page web dynamique (affichage des données en

temps réel). Cela nécessite évidemment un serveur web.

Les images suivantes présentent des éléments du système (câblage,

affichage des données côté Raspberry PI et affichage des requêtes côté

Arduino).

Page 5: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 5

Page 6: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 6

Page 7: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 7

Dans ce qui suit, je vous propose de passer par quelques étapes qui sont à

mon sens les briques élémentaires qu’il faut posséder pour parvenir au

résultat final.

3.1. Communication USB série entre Arduino et Raspberry PI

Réaliser une liaison série entre un Arduino équipé d’un capteur de

température DS18B20 et un Raspberry Pi qui affichera cette température

dans une console série (logiciel minicom par exemple). On utilisera l’un

des ports USB du Raspberry PI.

Nous aurons besoin de la bibliothèque OneWire (partie 3.2) qu’il

faudra installer dans l’IDE (menu Croquis/Inclure une

bibliothèque/Gérer les bibliothèques) :

La bibliothèque se trouve sur un serveur git à l’adresse suivante :

https://github.com/PaulStoffregen/OneWire/archive/master.zip

Attention au câblage du capteur sur l’Arduino !

Evidemment il faut d’abord savoir comment envoyer une donnée sur

le port série de l’Arduino ! Voici une page traitant de ce sujet :

http://www.ladyada.net/learn/arduino/lesson4.html

FAIRE VALIDER PAR UN ENSEIGNANT

Page 8: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 8

3.2. Brancher le DS18B20 directement sur le Raspberry PI

Il est également possible de brancher un DS18B20 sur le Raspberry PI et

d’afficher la température depuis le PI.

Utiliser la broche GPIO4 pour la réception des données.

Ecrire un programme en Python ou en C qui affiche la température en

degrés Celsius dans une console. On pourra s’aider de la page suivante :

http://www.framboise314.fr/mesure-de-temperature-1-wire-

ds18b20-avec-le-raspberry-pi/

ATTENTION la procédure indiquée dans la page précédente pour

activer l’interface OneWire sur le Raspberry Pi n’est plus la bonne !

Dans Raspbian Jessie avec PIXEL, il suffit de passer par le menu

Préférences :

Et d’activer le Onewire par l’interface graphique :

Page 9: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 9

FAIRE VALIDER PAR UN ENSEIGNANT

3.3. Prise en main de la librairie RF24 et des modules NRF24L01

Récupérer et installer la librairie RF24 sur le Raspberry PI et l’Arduino :

Sur le PI : $ mkdir nrf24l01 $ cd nrf24l01 $ git clone https://github.com/TMRh20/RF24.git $ cd RF24 $ make $ sudo make install

Sur l’Arduino :

Récupérer et installer la bibliothèque suivante RF24. Pour cela, dans

l’IDE Arduino, allez dans le menu Croquis/Inclure une

bibliothèque/Gérer les bibliothèques et rechercher RF24 :

Page 10: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 10

La bibliothèque se trouve sur un serveur git à l’adresse suivante :

https://github.com/TMRh20/RF24/archive/master.zip

Câblage des modules :

Raspberry PI :

Pin 19 = MOSI du Raspberry vers MOSI (pin 6) du nRF24L01. Pin 21 = MISO du Raspberry vers MISO (pin 7) du nRF24L01. Pin 23 = SCLK du Raspberry vers SCK (pin 5) du nRF24L01. Pin 24 = CS0 du Raspberry vers CSN (pin 4) du nRF24L01. Pin 22 = GPIO 25 du Raspberry vers CE (pin 3) du nRF24L01. Pin 1 = 3.3V PWR du Raspberry vers VCC (pin 2) du nRF24L01. Pin 6 = GND du Raspberry vers GND (pin 1) du nRF24L01.

Arduino :

Attention le module s’alimente en 3.3V !

Page 11: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 11

Tester l’exemple Gettingstarted dans les deux sens (PI-Arduino et

Arduino-PI). Dans le cas du Raspberry Pi, il faut aller dans le sous-

répertoire examples_linux du répertoire RF24, éditer le fichier

gettingstarted.cpp et initialiser la radio avec ligne suivante :

RF24 radio(RPI_V2_GPIO_P1_22,RPI_V2_GPIO_P1_24,BCM2835_SPI_SPEED_8MHZ);

On terminera par un make pour générer l’exécutable. Ne pas oublier

d’activer le SPI sur le Raspberry Pi !

FAIRE VALIDER PAR UN ENSEIGNANT

Allumer une LED située sur l’Arduino à partir du PI. On pourra s’inspirer de

la page suivante :

http://www.framboise314.fr/faire-dialoguer-un-raspberry-et-un-

arduino-via-nrf24l01/

FAIRE VALIDER PAR UN ENSEIGNANT

3.4. Un serveur Web avec une base de données et un affichage de la

température sous forme de graphique

On choisira l’une des deux solutions suivantes :

Page 12: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 12

3.4.1. La solution « à l’ancienne »

Dans ce cas, on pourra utiliser un serveur LAMP. L’affichage des données de

température en provenance de la base de données se fera en utilisant les

Google Charts.

Expliquer les mots/acronymes suivants :

LAMP

JavaScript

CSS

JSON

La page suivante pourra vous aider :

http://raspberrywebserver.com/cgiscripting/rpi-temperature-

logger/building-an-sqlite-temperature-logger.html

3.4.2. La solution conforme à l’architecture REST (REpresentational State

Transfer)

Expliquer ce que représentent des RESTful Web services

Réaliser la même chose qu’en 3.4.1 mais cette fois-ci en utilisant node.js,

Express, Jade et MongoDB. Cela ne sera pas simple et il vous faudra

d’abord commencer par node.js pour lequel vous pourrez avoir un très

bon tutoriel (en Français !) ici :

https://openclassrooms.com/courses/des-applications-ultra-rapides-

avec-node-js

Répondre aux questions suivantes :

Qu’est-ce qu’Express et que permet-il de faire ?

Que permet de faire le middleware express.static ?

Qu’est-ce qu’un « template engine » ?

Expliquer la différence entre une base de données relationnelle et une

base de données non relationnelle (ou NoSQL) ?

On pourra s’inspirer de la page suivante :

https://tomholderness.wordpress.com/2013/01/03/raspberry-pi-

temperature-server/

Page 13: Raspberry Pi et réseau de capteurs sans fil - Bureau virtuel · Hervé Boeglen 2017 1 Raspberry Pi et réseau de capteurs sans fil 1. Introduction : Nous souhaitons mettre en place

Hervé Boeglen 2017 13

FAIRE VALIDER PAR UN ENSEIGNANT