Compiler les librairies UPM et MRRA pour manipuler des IoT sur Raspberry Pi et odroïd

Motivations

Le projet Météo Climat tremplin pour l'enseignement des sciences s'intéresse aux instruments de mesure des paramètres météorologiques et à l'exploitation des données mesurées ainsi qu'au traitement des données météorologiques et climatologiques fournies par Météofrance. Cet intérêt a croisé la volonté institutionnelle d'enseigner le codage. Cette intersection s'est matérialisée autour des nano-ordinateurs comme les RaspBerry ou les Odroïd qui pour une somme abordable pour un établissement d'enseignement (moins de 100 € ) permet de disposer d'un vrai ordinateur multi-coeurs de la taille d'une grosse boite d'allumettes. Ces nano-machine permettent autant de créer une interface de mesure avec des capteurs, que de traiter et afficher des données, que d'écrire des programmes qui s'exécutent sur un smartphone une tablette ou tout autre ordinateur, que de construire des microserveurs pédagogiques.

Ces outils permettent à l'élève et à son enseignant de changer de statut et de passer de l'état de consommateur passif de technologie à celui d'acteurs et de producteurs d'instruments et de ressources numériques. Toutefois l'accès direct possible au plus bas niveau technique de la machine et le "terrain vierge" qui est fourni requièrent un travail préliminaire d'installation / configuration, avant que chacun puisse exprimer ses compétences techniques technologiques scientifiques ou de design.

Cet article propose les fondements d'une interopérabilité ouverte entre les dispositifs en utilisant les mêmes librairies opensource pour interagir avec capteurs et moteurs et autres dispositifs connectés, embarqués ou à distance; que ce soit pour acquérir et traiter des données ou fournir des instructions à exécuter.


Sommaire

  1. MRAA et UPM des librairies à tout faire pour touts les plateformes et (presque) tous les langages
  2. Préparation de la compilation des librairies

    1. Paquets supplémentaires pour les compilations
    2. SWIG
      1. Sur Raspberry Pi
      2. Sur Odroïd C2 et C4
    3. NODE
      1. Sur Raspberry Pi
      2. Sur Odroïd C2 et C4S
    4. Option de compilation -std=c++11 (dépendance gcc5)
      1. Sur Raspberry Pi
      2. Sur Odroïd C2 et C4S
    5. Compilation des librairies iotdk mraa et upm

    6. Librairie mraa

    7. Librairie upm

Téléchargements

  1. INTEL iotdk sur github
  2. Source Node

1. MRAA et UPM des librairies à tout faire pour touts les plateformes et (presque) tous les langages

Lors du déploiement de ses Edison Intel a mis en place sur la forge opensource github.com un certain nombre d'outils logiciels permettant d'interagir avec les objets connectés (Internet of Things : IoT) IoT deveopment Kit. Nous utiliserons ici la librairie mraa qui permet les interactions de bas niveau avec les bus GPIO I2c et SPI et upm qui fournit un grand nombre de drivers pour l'univers des microcapteurs des micromoteurs et plus généralement de tous les instruments connectables et de tous les robots.

2. Préparation de la compilation des librairies

Il n'est pas nécessaire d'avoir les droits du superutilisateur pour compiler les librairies et dans cet article nous utiliserons un utilisateur ordinaire pour réaliser les travaux.

Un certain nombre de logiciels de développement auxiliaires sont nécessaires pour installer ces librairies la commande ci-dessous (peut-être non exhaustive) permet de les installer.

sudo apt-get install cmake python-pip
libpcre++-dev libpcre3-dev pep8 node-gyp libboost-all-dev openjdk-8-jdk openjdk-8-jre liblua5.1-0-dev npm libuv0.10-dev 

Un certain nombre de librairies doivent aussi être présentes pour permettre la compilation. Pour les Rpi elles doivent être compilées et installées depuis les sources du fait d'incompatibilités de versions entre mraa et les librairies par défaut du système des Rpi. pour les odroïd la situation est la m^eme si on reste en version jessie, par contre le passage en stretch des odroïd permet de récupérer gcc5 (donc pas besoin d'installer une astuce pour l'avoir) et swig3 qu'il n'est donc pas nécessaire de compiler, par contre la configuration debianiste de nodejs ne permet pas de le trouver facilement et c'est la croix et la bannière pour satisfaire les dépendances... Le plus simple est d'installer un binaire dans le /usr/local à partir des binaires du site.

2.1 Paquets supplémentaires pour les compilations

S'ils n'existent pas déjà installer les paquets suivants.

sudo apt-get install libpython2.7 libpython-all-dev2 gawk  libboost-all-dev python-configobj openjdk-7-jdk openjdk-7-jre  icedtea-7-plugin zlib1g-dev  tcl8.6-dev tk8.6-dev 

2.2 SWIG

2.2.1 Sur Raspberry Pi

Il est nécessaire de disposer du logiciel swig dans une version postérieure à 3.0, celle qui est proposée dans les distributions raspbian et debian Jessie ne convient pas. Pour disposer de la nouvelle version télécharger la dernière version de swig depuis https://sourceforge.net/projects/swig/files/swig/, il est nécessaire de passer par une page de téléchargement ou de récupérer le lien profond pour l'effectuer.

cd
mkdir Logiciels/Swig
cd logiciels/Swig
wget http://downloads.sourceforge.net/project/swig/swig/swig-3.0.10/swig-3.0.10.tar.gz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fswig%2Ffiles%2Fswig%2Fswig-3.0.10%2F&ts=1468066627&use_mirror=pilotfiber
tar xvfz swig-3.0.10.tar.gz
cd swig-3.0.10
./configure

L'opération de configuration doit se terminer par quelque chose comme :

The SWIG test-suite and examples are configured for the following languages:
java javascript perl5 python 

S'il manque un langage relire la trace complète et installer le ou les paquets manquants. Sinon lancer la compilation.

make

puis installer

sudo make install

2.2.2 Sur Odroïd C2 et C4

J'ai installé une version debian stretch sur mes C2 odrobian 64 bits et swig est donc en version 3.0 ce qui dispense de la manipulation faite sur la Raspberry. Il semble que le passage en stretch des Rpi ne soit pas aussi direct que pour les Odroïd, la recherche de la cause dépasse mes compétences.

2.3 NODE

2.3.1 Sur Raspberry Pi

La version NOde due la Rpi3 ne convient pas ou alors l'installation debian n'est pas compatible avec la détection faite par mraa et upm.Après plusieurs tentatives je me suis résolu à compiler node, c'est automatique mais ça prend du temps... Beaucoup de temps...

préparer un réceptacle

mkdir  Logiciels/Node

télécharger la dernière version source de node puis la décompresser, entrer dans le répertoire configurer, compiler et installer.

https://nodejs.org/dist/v6.3.0/node-v6.3.0-linux-arm64.tar.xz

wget https://nodejs.org/dist/v6.3.0/node-v6.3.0.tar.gz
tar xvfz node-v6.3.0.tar.gz
cd node-v6.3.0/
./configure
make
sudo make install

Le résultat est installé dans /usr/local et mraa et upm le détecteront.

2.3.2 Sur Odroïd C2 C4

Lorsque les Odroïd sont en stretch les versions de nodejs node et npm sont correctes mais la configuration debian de nodejs suit les règles debian et place les différents fichiers sur des chemins que ne trouve pas mraa et upm. Je suppose qu'il n'y a pas grand chose à faire mais mes tentatives simples de liens symboliques se sont soldées par des échecs et finalement il est beaucoup plus simple d'installer un binaire nodejs depuis le site officiel dans le répertoire local générique.

Pour le C2

La situation n'est pas immédiate car la version binaire pour arm64 n'est pas fonctionnelle on est ramenés à la situation du Rpi où on compile et installe nodejs.

Pour le C4

Les choses sont bien plus simples car le binaire armhf est totalement opérationnel. Il suffit de télécharger le binaire depuis le site nodejs et le copier dans /usr/local.

wget https://nodejs.org/dist/v6.3.0/node-v6.3.0-linux-armv7l.tar.xz
tar xvfx node-v6.3.0-linux-armv7l.tar.xz
sudo cp -r node-v6.3.0-linux-armv7l/* /usr/local

2.4 Option de compilation -std=c++11 (dépendance gcc5)

Toujours pour des raisons de compatibilité avec mraa et upm la compilarion de ces librairies doit ^etre effectuée avec gcc5 au moins pour disposer de l'option citée dans le titre du chapitre.

2.4.1 Sur Raspberry Pi

Le compilateur par défaut de la Rpi3 (gcc-4.9) ne permet pas de compiler upm. Je propose donc de rajouter le compilateur gcc-5.0 qui est disponible dans la distribution stretch. Pour cela ajouter un fichier dans le répertoire /etc/apt/sources.list.d un fichier contenant la ligne suivante :

cd /etc/apt/sources.list.d
sudo su
cat > stretch.list
deb http://ftp.us.debian.org/debian testing main contrib non-free
ctrlD

Ajouter la gestion des préférences dans un fichier de /etc/apt/preferences.d, les 3 lignes ci-dessous :

cd /etc/apt/preferences.d
cat > gcc5.prefs
Package: *
Pin: release a=testing
Pin-Priority: 100
ctrlD

Faire un update/upgrade pour mettre à niveau gcc.

sudo apt-get update
sudo apt-get install -t testing gcc g++

Le compilateur gcc5 est maintenant disponible

2.4.2 Sur Odroïd C2 C4

Mes Odroïd étant tous les deux en stretch je n'ai pas eu de problème sur les options de compilation.

3. Compilation des librairies iotdk mraa et upm

La librairie mraa est une librairie de bas niveau qui permet d'interagir avec les bus GPIO, I2C et SPI. Elle fournit des fonctions que peuvent utiliser les programmes de la librairie upm ou tous autres programmes d'interaction via les bus des nano-ordinateurs ou des objets connectés.

La librairie upm est une librairie de pilotes pour tous les instruments de mesure ou les acteurs pilotables depuis les bus disponibles sur les nano-ordinateurs. Cette librairie simplifie énormément la programmation, il suffit de connaitre le nom de code du capteur par exemple HTU21D-F pour un capteur température hygrométrie connu, aller chercher dans la doc en ligne ou sur la doc que l'on construit localement cette référence et on a la liste des fonctions disponibles. Il est possible ainsi en moins d'une dizaine de lignes python d'écrire le programme qui initie le capteur lit et affiche la température et l'hygrométrie pour notre capteur HTU21D-F dans cet exemple.

3.1 Librairie mraa

Créer un répertoire pour récupérer les codes sources depuis la forge:

mkdir -p Logiciels/IoT
cd Logiciels/IoT

Cloner ensuite les dépôts depuis github.com. Cette opération permettra de récupérer simplement plus tard les modifications faites aux sources ou éventuellement de contribuer au projet opensource :

git clone https://github.com/intel-iot-devkit/mraa.git

Pour construire la librairie mraa entrer dans le répertoire qui a été construit par le clonage, créer un répertoire de construction build et se positionner à l'intérieur puis effectuer la configuration.

cd mraa
mkdir build
cd build

Créer dans ce répertoire les outils por compiler la librairie, toujours vérifier que le répertoire est vide au moment de créer les outils car de nombreux fichiers de configuration sont créés et ne sont éventuellement pas écrasés par une nouvelle version.

sudo rm -r ./*
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

Lancer la compilation puis l'installation :

make
sudo make install

3.2 Librairie upm

C'est cette librairie qui utilise l'option -std=c++11qui a nécessité le passage au compilateur gcc version 5.0.

Créer un répertoire pour récupérer les codes sources depuis la forge:

mkdir -p Logiciels/IoT
cd Logiciels/IoT

Cloner ensuite les dépôts depuis github.com. Cette opération permettra de récupérer simplement plus tard les modifications faites aux sources ou éventuellement de contribuer au projet opensource :

git clone https://github.com/intel-iot-devkit/upm.git

Pour construire la librairie mraa entrer dans le répertoire qui a été construit par le clonage, créer un répertoire de construction build et se positionner à l'intérieur puis effectuer la configuration.

cd upm
mkdir build
cd build

Créer dans ce répertoire les outils por compiler la librairie, toujours vérifier que le répertoire est vide au moment de créer les outils car de nombreux fichiers de configuration sont créés et ne sont éventuellement pas écrasés par une nouvelle version.

sudo rm -r ./*
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

Lancer la compilation puis l'installation :

make
sudo make install

Webographie

  1. Site principal Raspberry
  2. Site principal Odroïd
  3. Odrobian

Commentaires