Raspberry Pi et réseau de capteurs sans fil · Raspberry Pi et réseau de capteurs sans fil 1....

12
TP3 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 toutes sortes 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

Transcript of Raspberry Pi et réseau de capteurs sans fil · Raspberry Pi et réseau de capteurs sans fil 1....

TP3

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 toutes sortes 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

TP3

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

Quels sont les protocoles série couramment utilisés par les

microcontrôleurs ?

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

Carte Raspberry PI 2

TP3

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.

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

TP3

Hervé Boeglen 2017 4

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).

TP3

Hervé Boeglen 2017 5

TP3

Hervé Boeglen 2017 6

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.

A partir du datasheet du DS18B20, répondre aux questions suivantes :

Le DS18B20 est-il un capteur numérique ou analogique ?

Quelle est sa précision ? Peut-on la changer ? Si oui quelle est la

conséquence sur le temps de conversion ?

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

On câblera le montage de la Figure 7 du datasheet (page 7) en

considérant que VDD = VPU. Attention au câblage du capteur sur

l’Arduino !

TP3

Hervé Boeglen 2017 7

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 L’ENSEIGNANT

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 RPI.

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 :

TP3

Hervé Boeglen 2017 8

FAIRE VALIDER PAR L’ENSEIGNANT

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

En vous aidant du datasheet du NRF24L01+, répondre aux questions

suivantes.

Par quelle interface communique-t-on avec le module ?

Quelle est la vitesse maximale de cette interface ?

Sur quelle bande de fréquence radio le module fonctionne-t-il ?

Quel est le type de modulation utilisée ?

Quel est le débit de transfert maximal atteignable en radio ?

Quelle est la puissance d’émission maximale ? A votre avis, quelle est la

distance maximale de communication ?

Ce module est très populaire car faible coût. Malheureusement, on trouve

rarement des puces originales. La plupart des modules que l’on trouve sur

le marché sont des copies Chinoises de moins bonne qualité. Voir à ce

sujet la page suivante :

https://zeptobars.com/en/read/Nordic-NRF24L01P-SI24R1-real-fake-

copy

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

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

TP3

Hervé Boeglen 2017 9

Expliquer les commandes précédentes.

Sur l’Arduino :

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

Arduino, allez dans le menu Croquis/Inclure une bibliothèque/Gérer les

bibliothèques et rechercher RF24 :

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 :

TP3

Hervé Boeglen 2017 10

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 !

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 (menu Préférences/Configuration du

Raspberry Pi) !

Pour éviter les interférences avec vos camarades qui utilisent le même

module avec le canal radio par défaut, s’assurer de sélectionner un canal

libre ! Pour cela, on rajoutera la ligne suivante au programme :

Radio.setChannel(numéro de canal) ;

TP3

Hervé Boeglen 2017 11

FAIRE VALIDER PAR L’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/

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

l’interface SPI sur le Raspberry Pi n’est plus la bonne ! Dans Raspbian

Jessie avec PIXEL, il suffit de passer par le menu Préférences comme dans

la partie précédente. Eviter surtout la partie concernant raspi-

blacklist.conf !

FAIRE VALIDER PAR L’ENSEIGNANT

3.4. Installer un serveur Web pour piloter des pins GPIO et faire un

affichage graphique de température

3.4.1. Installation du serveur

Nous souhaitons installer un serveur LAMP.

Expliquer les mots/acronymes suivants :

LAMP

JavaScript

CSS

JSON

Existe-il d’autres technologies de serveurs Web ? Citez-en une.

Installer le serveur LAMP sur votre RPi. On pourra s’aider de la page

suivante :

http://simple-duino.com/installer-serveur-web-raspberry/

3.4.2. Allumer/Eteindre une LED à partir d’une page php.

TP3

Hervé Boeglen 2017 12

Créer une page de ce type en php et permettant d’allumer/d’éteindre une

LED :

3.4.3. Affichage graphique de la température en provenance d’un DS18B20

Récupérer la température en provenance d’un DS18B20 connecté au RPi

et l’afficher dans une page Web. Faire de même avec la température d’un

nœud distant.

FAIRE VALIDER PAR L’ENSEIGNANT

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

température sous forme de graphique

La page suivante pourra vous aider :

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

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

Il y a bien sûr plusieurs solutions possibles. On pourra regarder des solutions

construites autour de HighCharts ou Google Charts.

FAIRE VALIDER PAR L’ENSEIGNANT