Traitement de flux de Python et SensorTag, Kafka, Spark Streaming - Partie 1: Raspberry Pi 3

Dans cette série, nous obtiendrons les données d'environnement de SensorTag de Raspberry Pi 3. Après cela, j'écrirai le code de Python pour l'analyse du vent avec Spark Streaming via Kafka.   Il existe de nombreux exemples sur la configuration de Raspberry Pi 3. Ici, nous allons nous préparer à acquérir facilement les données d'environnement de SensorTag.

Que préparer

Le Raspberry Pi 3 dispose du Wi-Fi et du Bluetooth intégrés. Le dongle n'est plus nécessaire et moins d'articles sont nécessaires. Dans cet exemple, un ancien MacBook Pro (macOS Sierra 10.12.6) avec un terminal USB-A est utilisé comme terminal de développement. Préparez un périphérique qui se connecte à Raspberry Pi 3 via Ethernet.

Le SensorTag Texas Instruments peut être connecté au Raspberry Pi 3 via Bluetooth pour obtenir facilement des données environnementales telles que la température et l'humidité.

Graver une image Raspbian Lite sur macOS

Suivez la procédure officielle Installation des images du système d'exploitation sur Mac OS. Vérifiez le nom de l'appareil de la carte SD et démontez-la. Dans cet exemple, il s'agit de / dev / disk2.

$ diskutil list
...
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.6 GB    disk2
   1:             Windows_FAT_32 NO NAME                 15.6 GB    disk2s1

$ diskutil unmountDisk /dev/disk2

Téléchargez Raspbian Jessie Lite (https://www.raspberrypi.org/downloads/raspbian/) et gravez-le sur votre carte SD. N'oubliez pas d'activer SSH également.

$ cd ~/Downloads
$ wget http://director.downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2017-07-05/2017-07-05-raspbian-jessie-lite.zip
$ unzip 2017-07-05-raspbian-jessie-lite.zip
$ sudo dd bs=1m if=2017-07-05-raspbian-jessie-lite.img of=/dev/rdisk2
$ touch /Volumes/boot/ssh
$ diskutil unmountDisk /dev/disk2

Connexion SSH avec mDNS

macOS peut être facilement SSH en connectant le Raspberry Pi 3 avec un câble Ethernet. Par défaut, les utilisateurs suivants sont définis.

$ ssh [email protected]

Copiez la clé publique macOS dans `~ / .ssh / allowed_keys 'sur Raspberry Pi 3.

$ mkdir -p -m 700 ~/.ssh
$ cat << EOF > ~/.ssh/authorized_keys
ssh-rsa AAAA...
EOF
$ chmod 600 ~/.ssh/authorized_keys

Connectez-vous à nouveau.

$ exit

LAN sans fil

Configurez le point d'accès LAN sans fil (ESSID) et redémarrez le réseau. Vérifiez votre connexion Internet à partir de «ping».

$ sudo sh -c 'wpa_passphrase [ESSID] [mot de passe] >> /etc/wpa_supplicant/wpa_supplicant.conf'
$ sudo ifdown wlan0
$ sudo ifup wlan0
$ ping -c 1 www.yahoo.co.jp

raspi-config

Changez le mot de passe et le fuseau horaire avec raspi-config.

$ sudo raspi-config

apt-get

Passez à un site miroir japonais et mettez à jour le package. Installez vim pour modifier le fichier.

$ sudo sed -i".bak" -e "s/mirrordirector.raspbian.org/ftp.jaist.ac.jp/g" /etc/apt/sources.list
$ sudo apt-get update && sudo apt-get dist-upgrade -y
$ sudo apt-get install vim -y

Bluetooth et SensorTag

Allumez le SensorTag et numérisez à partir du Raspberry Pi 3. Vérifiez l'adresse BD.

$ sudo hcitool lescan
...
B0:B4:48:BE:5E:00 CC2650 SensorTag
...

gatttool

Connectez-vous au SensorTag de l'adresse BD confirmée dans le mode interactif de la commande gatttool.

$ gatttool -b B0:B4:48:BE:5E:00 --interactive
[B0:B4:48:BE:5E:00][LE]> connect
Attempting to connect to B0:B4:48:BE:5E:00
Connection successful
[B0:B4:48:BE:5E:00][LE]>

Obtenez la valeur du capteur en vous reportant à Obtenir la valeur du tag de capteur TI (CC2650) avec Raspberry Pi Je vais.

[B0:B4:48:BE:5E:00][LE]> char-write-cmd 0x24 01
[B0:B4:48:BE:5E:00][LE]> char-read-hnd 0x21
Characteristic value/descriptor: 94 0b f0 0d

Vous obtiendrez une valeur de 4 octets. Selon le Guide de l'utilisateur SensorTag, les données suivantes seront affichées dans l'ordre.

ObjLSB ObjMSB AmbLSB AmbMSB

Convertit 4 octets obtenus à partir de Python REPL en degrés Celsius et génère la température ambiante et la température de l'objet.

>>> raw_data = '94 0b f0 0d'
>>> rval = raw_data.split()
>>> obj_temp = int(rval[1] + rval[0], 16) / 4
>>> amb_temp = int(rval[3] + rval[2], 16) / 4
>>> obj_temp_celcius = obj_temp * 0.03125
>>> amb_temp_celcius = amb_temp * 0.03125
>>> print("Température ambiante: {:.2f} ℃".format(amb_temp_celcius))
Température ambiante: 27.88 ℃
>>> print("Température de l'objet: {:.2f} ℃".format(obj_temp_celcius))
Température de l'objet: 23.16 ℃

commande bluepy sensortag

Installez bluepy pour faire fonctionner les appareils Bluetooth LE depuis Python.

$ sudo apt-get install python-pip libglib2.0-dev -y
$ sudo pip install bluepy

Vous pourrez utiliser la commande sensortag. Exécutez avec l'indicateur -T et l'adresse BD comme argument.

$ sensortag -T B0:B4:48:BE:5E:00

Si vous spécifiez l'indicateur -T, vous pouvez obtenir la température ambiante et la température de l'objet dans cet ordre.

Connecting to B0:B4:48:BE:5E:00
('Temp: ', (28.34375, 24.25))
('Temp: ', (28.375, 23.28125))
...

SensorTag

Écrivez un script Python pour obtenir l'ambiance, l'objet et l'humidité.

~/python_apps/temp.py


# -*- coding: utf-8 -*-
from bluepy.sensortag import SensorTag
import sys
import time

def main():
    argvs = sys.argv
    argc = len(argvs)
    if (argc != 2):
        print 'Usage: # python {0} bd_address'.format(argvs[0])
        quit()
    host = argvs[1]
    print('Connecting to ' + host)

    timeout = 5.0
    count = 3

    tag = SensorTag(host)

    tag.IRtemperature.enable()
    tag.humidity.enable()

    time.sleep(1.0)

    counter = 0
    while True:
        counter += 1
        tAmb, tObj = tag.IRtemperature.read()

        print("Température:Alentours: {0:.2f},objet: {1:.2f}".format(tAmb, tObj) )
        humidy, RH = tag.humidity.read()
        print("Humidité: humidy: {0:.2f}, RH: {1:.2f}".format(humidy, RH))

        if counter >= count:
           break

        tag.waitForNotifications(timeout)

    tag.disconnect()
    del tag

if __name__ == '__main__':
    main()

Exécutez le script avec l'adresse BD de SensorTag comme argument.

$ python temp.py B0:B4:48:BE:5E:00

Le résultat de la mesure 3 fois à des intervalles de 5 secondes est émis. Le climatiseur fonctionne, donc c'est confortable.

Connecting to B0:B4:48:BE:5E:00
Température:Alentours: 25.03,objet: 19.94
Humidité: humidy: 25.25, RH: 69.47
Température:Alentours: 25.06,objet: 20.69
Humidité: humidy: 25.25, RH: 69.37
Température:Alentours: 25.06,objet: 20.69
Humidité: humidy: 25.25, RH: 69.37

Recommended Posts

Traitement de flux de Python et SensorTag, Kafka, Spark Streaming - Partie 1: Raspberry Pi 3
Traitement de flux de Python et SensorTag, Kafka, Spark Streaming - Partie 1: Raspberry Pi 3
Streaming Python et SensorTag, Kafka, Spark Streaming - Partie 5: Connexion de Jupyter à Spark avec Apache Toree
Streaming Python et SensorTag, Kafka, Spark Streaming - Partie 5: Connexion de Jupyter à Spark avec Apache Toree
Installez PyCall sur Raspberry PI et essayez d'utiliser la bibliothèque GPIO pour Python de Ruby
[Python] Mesure et affiche le temps nécessaire au traitement
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Installez pyenv sur Raspberry Pi pour gérer Python
Raspberry Pi + python + appareil IoT, procédure de construction d'environnement pour démarrer le traitement d'image et l'apprentissage automatique
Mettre à jour Raspberry Pi Python vers 3.7 ou version ultérieure avec pyenv
Exécutez AWS IoT Device SDK for Python sur Raspberry Pi
Créez des jeux LCD (16x2) avec Raspberry Pi et Python
Accédez aux feuilles de calcul Google en utilisant python avec raspberry pi (pour vous-même)
Mesurez la température, l'humidité, etc. avec SensorTag et envoyez-le à Ambient via Raspberry Pi 3 pour le représenter graphiquement Partie 2
Construire Raspberry Pi pour étudier Python et l'apprentissage automatique (version RaspberryPi4 & Buster (RaspberryPi3 est également possible))
Traitement d'image avec Python (partie 2)
Traitement d'image avec Python (partie 1)
Raspeye + Python + Mémo OpenGL
Traitement d'image avec Python (3)
raspberry pi 1 modèle b, python
[Python] Traitement itératif (for, while)
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
Créez votre propre plateforme IoT en utilisant raspberrypi et ESP32 (partie 1)
Associez SORACOM aux appareils ménagers et au LINE Bot [Python / Flask / Raspberry Pi]