Mes passions, le boulots, mes coups de gueule...




Raspberry Pi : Lire les données d’un capteur Xiaomi Flower Care / MiFlora en Bluetooth

Categorie : Domotique, Geek, Informatique, Raspberry Pi · par 1 Juin 2017

Introduction

Il y a quelques temps, je vous avais parlé de mon Flower Power de Parrot et de la manière de le connecter à un Raspberry Pi.

Malheureusement, après une mise à jour de l’App sur iPhone, j’ai perdu la possibilité d’y récupérer les données.

Je me suis alors tourné vers les produits chinois et plus spécialement vers le Xiaomi Flower Care aussi appelé MiFlora.

Cette sonde permet de mesurer :

  • La température ambiante
  • La luminosité ambiante
  • L’humidité du sol
  • La fertilité du sol

Installation

Matériel utilisé

Raspberry Pi

Pour la connexion, j’ai utilisé un Raspberry Pi 3 qui intègre d’origine le Wifi et le Bluetooth 4.1 LE.

L’OS utilisé est Raspbian Jessie with Pixel avec toutes les mises à jours au 01 juin 2017.

Flower Care

Le Flower Care de Xiaomi est une version chinoise (pas internationale) identifiée comme telle par l’App iOS et désactivée par défaut hors de la Chine continentale. Allez savoir pourquoi, mais c’est comme ça. Je vous ferai un billet plus complet sur le couple Flower Care / App Flower Care dans les semaines qui viennent.

Pour comprendre le fonctionnement de l’engin, je vous suggère de lire (en anglais) l’excellent article sur le wiki d’Hackerspace. Il y détaille tous les composants que renferme la sonde.

Pour pouvoir lire les données avec l’app que l’on va voir plus bas, le firmware doit être récent. Genre 2.6 ou plus récent. Faites une mise à jour à l’aide de l’App iOS si nécessaire et/ou possible.

Connexion au Raspberry Pi

De mon côté, je n’ai eu à installer ni pilote, ni outils de gestion du Bluetooth. Ceux intégrés à l’ISO de base de Raspbian ont semblé suffire. Je n’ai pas eu non plus à activer quoi que ce soit sur le RPi.

Premier test

On va commencer par vérifier si le RPi « voit » le Flower Care :

$ sudo hcitool lescan

Cette commande devrait vous retourner un truc du genre :

LE Scan ...
C4:7C:8D:63:85:B1 (unknown)
C4:7C:8D:63:85:B1 Flower care

Installation de l’outil « miflora »

L’outil « miflora » est publié par BarnyBug sur GitHub :
https://github.com/barnybug/miflora/

Deux possibilités s’offrent à vous :

  1. Télécharger les sources et les compiler avec GoLang
  2. Télécharger l’app déjà compilée par mes soins

1. Télécharger les sources et les compiler avec GoLang

Il est recommandé de compiler les sources sur un PC.

Installer GO

J’ai installé GO sur une machine virtuelle Debian Jessie 386 dans Parallels Desktop.

Cette page peut vous aider à installer GO :
https://www.digitalocean.com/community/tutorials/how-to-install-go-1-7-on-debian-8

On va d’abord déterminer la version de GO à installer en consultant cette page :
https://storage.googleapis.com/golang/

Dans mon cas, j’ai choisi cette version : go1.8.linux-386.tar.gz

Dans le terminal :

$ sudo apt-get update && sudo apt-get upgrade
$ cd ~/
$ curl -O https://storage.googleapis.com/golang/go1.8.linux-386.tar.gz
$ tar xvf go1.8.linux-386.tar.gz

Vous devriez maintenant avoir un dossier appelé go dans votre dossier home.

On va ensuite changer les droits de propriétaire et de groupe vers root et tout déplacer vers /usr/local :

$ sudo chown -R root:root ./go
$ sudo mv go /usr/local

Puis, on va modifier le PATH de l’environnement :

First, set Go’s root value, which tells Go where to look for its files.
On va d’abord définir la valeur de racine de Go, qui indique à Go où chercher ses fichiers.

$ sudo nano ~/.profile

À la fin du fichier, on ajoute ces lignes :

export GOPATH=$HOME/work
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
Compiler miflora

Puis, on lance la commande indiquée sur le GitHub de BarnyBug :

$ go get github.com/barnybug/miflora/cmd/miflora

Dans mon cas, j’ai rencontré l’erreur suivante :

go: missing Git command. See https://golang.org/s/gogetcmd
package github.com/barnybug/miflora/cmd/miflora: exec: "git": executable file not found in $PATH

Git manque à l’appel. On va l’installer :

$ sudo apt-get install git

Une fois que c’est fait, on relance la commande :

$ go get github.com/barnybug/miflora/cmd/miflora

On va ensuite compiler l’app avec les paramètres d’environnement du RPi :

$ env GOOS=linux GOARCH=arm go build github.com/barnybug/miflora/cmd/miflora

L’app obtenue devrait se trouver dans votre dossier home de Debian Jessie du PC :

Rapatriez-la sur votre RPi comme on va le voir plus loin.

2. Télécharger l’app déjà compilée par mes soins

Si vous n’avez pas envie de vous coltiner l’installation de GO et toutes les étapes préalables à la compilation de l’app miflora, téléchargez-la directement depuis ce lien :

Installation de « miflora » dans son dossier

Sur le RPi, on va créer un dossier /home/pi/scripts/miflora/ dans lequel on va placer l’app :

$ mkdir /home/pi/scripts/
$ mkdir /home/pi/scripts/miflora/

Avec un utilitaire comme CyberDuck, on va déposer l’app miflora dans le dossier créé.

On va se placer dans le dossier et rendre l’app executable :

$ cd /home/pi/scripts/miflora/
$ chmod +x miflora

Puis, on execute l’app miflora :

$ ./miflora

On devrait avoir ce retour :

Usage: miflora MAC HCI_DEVICE

eg: miflora C4:7C:8D:XX:XX:XX hci0

Pour trouver la MAC address du Flower Care, on entre la commande vue en début d’article :

$ sudo hcitool lescan

Et on la trouve (ici, en rouge) :

LE Scan ...
C4:7C:8D:63:85:B1 (unknown)
C4:7C:8D:63:85:B1 Flower care

Et on termine comme ceci (n’oubliez pas de terminer par hci0) :

$ ./miflora C4:7C:8D:XX:XX:XX hci0

Si tout s’est bien passé, elle devrait vous retourner quelque chose comme ça :

Reading miflora...
Firmware: {Version:2.7.0 Battery:100}
Sensors: {Temperature:20.3 Moisture:35 Light:14 Conductivity:411}

Références :

https://loads.pickle.me.uk/2017/03/19/raspberry-pi-zero-w-and-mi-flora-plant-monitor/
https://wiki.hackerspace.pl/projects:xiaomi-flora
https://github.com/barnybug/miflora/
https://www.digitalocean.com/community/tutorials/how-to-install-go-1-7-on-debian-8
https://git-scm.com/download/linux

Laisser un commentaire