[PYTHON] Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi

introduction

Cet article a le même contenu que ** Article Omron Environmental Sensor (BAG Type) **. Cet article a été réalisé avec un ** capteur de température / humidité SwitchBot ** avec un écran d'affichage à petit prix.

Qu'est-ce que SwitchBot?

Une série d'appareils IoT pour la maison développés par Wonderlabs Inc., un fabricant à Shenzhen, en Chine. Cette fois, les capteurs de température et d'humidité de la série ci-dessus switchbot.jpg Utilisez le. À bas prix (environ 2000 yens), la multifonctionnalité qui comprend l'acquisition de données et l'affichage d'écran à l'aide d'applications et d'API pour smartphone est intéressante.

Les choses nécessaires

** ・ RaspberryPi ** (Pi3 Model B est utilisé cette fois) ** - Environnement d'exécution Python ** (Cette fois, pyenv utilise Python 3.7.6) ** ・ Capteur de température et d'humidité SwitchBot **

procédure

** ① Vérifiez la connexion Bluetooth entre le Raspberry Pi et le capteur ** ** ② Obtenez la valeur mesurée du capteur avec Python ** ** ③ Accédez à l'API GAS de Python pour écrire des données dans la feuille de calcul ** ** ④ Exécution périodique du script **

J'en ai parlé. https://qiita.com/warpzone/items/11ec9bef21f5b965bce3

① Vérifiez la connexion Bluetooth entre le Raspberry pi et le capteur

Confirmation de la reconnaissance du capteur

** - Configuration du capteur ** Insérez des piles AAA dans le capteur

** - Recherche d'appareils Bluetooth ** Après avoir vérifié l'adresse MAC sur SwitchBot Official App Exécutez la commande suivante sur Raspberry Pi

sudo hcitool lescan
LE Scan ...
AA:EE:BB:DD:55:77 (unknown)

Si l'adresse MAC confirmée par l'application ci-dessus apparaît, cela signifie qu'elle a réussi.

** ② Obtenez la valeur mesurée du capteur avec Python **

Confirmation de reconnaissance avec bluepy

bluepy est une bibliothèque pour accéder à Bluetooth Low Energy (BLE) en Python (Définition de classe)

** ・ Installation des packages requis ** Installez ce qui suit

sudo install libglib2.0-dev

** ・ Installation de bluepy **

Installer avec pip avec la commande suivante

pip install bluepy

** ・ Autoriser bluepy ** Vous devez autoriser bluepy Sudo à scanner.

Allez dans le dossier où bluepy est installé et

cd ~.pyenv/versions/3.7.6/lib/python3.7/site-packages/bluepy

Accordez l'autorisation Sudo à bluepy-helper avec la commande suivante

sudo setcap 'cap_net_raw,cap_net_admin+eip' bluepy-helper

Création d'un script d'acquisition de valeur de capteur

Créez le script suivant pour obtenir la valeur du capteur

switchbot.py


from bluepy import btle
import struct

#Délégué d'acquisition de données de diffusion
class SwitchbotScanDelegate(btle.DefaultDelegate):
    #constructeur
    def __init__(self, macaddr):
        btle.DefaultDelegate.__init__(self)
        #Variables pour conserver les données du capteur
        self.sensorValue = None
        self.macaddr = macaddr

    #Gestionnaire de scan
    def handleDiscovery(self, dev, isNewDev, isNewData):
        #Si vous trouvez un appareil avec l'adresse Mac cible
        if dev.addr == self.macaddr:
            #Extraire les données publicitaires
            for (adtype, desc, value) in dev.getScanData():  
                #Effectuer la récupération des données lorsque le capteur d'environnement
                if desc == '16b Service Data':
                    #Extraire les données du capteur
                    self._decodeSensorData(value)

    #Extraire les données du capteur et les convertir au format dict
    def _decodeSensorData(self, valueStr):
        #Données du capteur à partir de la chaîne de caractères(4e et suivants caractères)Sortir et convertir uniquement en binaire
        valueBinary = bytes.fromhex(valueStr[4:])
        #Convertir les données binaires du capteur en valeur numérique
        batt = valueBinary[2] & 0b01111111
        isTemperatureAboveFreezing = valueBinary[4] & 0b10000000
        temp = ( valueBinary[3] & 0b00001111 ) / 10 + ( valueBinary[4] & 0b01111111 )
        if not isTemperatureAboveFreezing:
            temp = -temp
        humid = valueBinary[5] & 0b01111111
        #Stocker dans le type de dict
        self.sensorValue = {
            'SensorType': 'SwitchBot',
            'Temperature': temp,
            'Humidity': humid,
            'BatteryVoltage': batt
        }

Identique à la version BAG du capteur d'environnement Omron, la valeur du capteur est acquise en mode diffusion. Le contenu des données acquises étant compliqué, la référence ci-dessus

Création du script principal

Créez un script principal pour appeler le script d'acquisition de la valeur du capteur

switchbot_toSpreadSheet.py


from bluepy import btle
from switchbot import SwitchbotScanDelegate

######Obtenez la valeur de SwitchBot######
#switchbot.Définit le délégué d'acquisition de la valeur du capteur de py pour qu'il s'exécute au moment du scan
scanner = btle.Scanner().withDelegate(SwitchbotScanDelegate())
#Scan pour obtenir la valeur du capteur (délai d'attente 5 secondes)
scanner.scan(5.0)
#Afficher la température à titre d'essai
print(scanner.delegate.sensorValue['Temperature'])

#Décrivez le processus de téléchargement vers la feuille de calcul Google dans ④

Essayez de courir à partir de la console

python switchbot_toSpreadSheet.py
25.49

Vous avez maintenant obtenu des mesures de capteurs en Python.

③ Accédez à l'API GAS de Python pour écrire des données dans la feuille de calcul

[Article sur le capteur environnemental d'Omron](https://qiita.com/c60evaporator/items/ed2ffde4c87001111c12#python%E3%81%8B%E3%82%89gas%E3%81%AEapi%E3%82%92%E5% 8F% A9% E3% 81% 84% E3% 81% A6% E3% 82% B9% E3% 83% 97% E3% 83% AC% E3% 83% 83% E3% 83% 89% E3% 82% B7% E3% 83% BC% E3% 83% 88% E3% 81% AB% E3% 83% 87% E3% 83% BC% E3% 82% BF% E6% 9B% B8% E3% 81% 8D% E8% BE% BC% E3% 81% BF) Veuillez vous référer

④ Exécution périodique du script

[Article sur le capteur environnemental Omron](https://qiita.com/c60evaporator/items/ed2ffde4c87001111c12#%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83 % 88% E3% 81% AE% E5% AE% 9A% E6% 9C% 9F% E5% AE% 9F% E8% A1% 8C) Veuillez consulter

Recommended Posts

Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
Enregistrement des valeurs du capteur d'environnement Omron avec Raspberry Pi (type USB)
Créer une API pour le thermo-hygromètre Switchbot avec Node-RED
Enregistrement de la valeur d'Inkbird IBS-TH1 avec Raspberry Pi
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Observez le groupe de météores Futago avec RaspberryPi4
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Mesurer la température du processeur de Raspeye avec Python
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Informer périodiquement l'état de traitement de Raspberry Pi avec python → Google Spreadsheet → LINE
Utilisez le capteur d'éclairement numérique TSL2561 avec Raspberry Pi
Visualisons la pièce avec tarte aux râpes, partie 1
Exploitons GPIO de Raspeye avec Python CGI
Plantes Mutter avec Raspberry Pi
Jouez avec le module de caméra Raspberry Pi Zero WH Partie 1
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
Votre URL n'a pas répondu avec la valeur du paramètre de défi.
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Comment obtenir la température du thermo-hygromètre SwitchBot à l'aide de Raspberry Pi
La vraie valeur de l'automatisation Terraform à partir d'Oracle Cloud
J'ai envoyé les données de Raspberry Pi à GCP (gratuit)
Notez ce que vous voulez faire à l'avenir avec Razpai
Trouvez la définition de la valeur de errno
Connectez-vous à Raspberry PI avec ssh sans mot de passe (authentification par clé)
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Utilisez vl53l0x avec RaspberryPi (python)
Commande de servomoteur avec Raspberry Pi
Extraire la valeur maximale avec les pandas.
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 2)
J'ai appris comment la télécommande infrarouge fonctionne avec Raspberry Pi
Communication série avec Raspberry Pi + PySerial
À propos de la valeur de retour de pthread_mutex_init ()
Notifier LINE de la température corporelle du thermomètre BLE avec la tarte à la râpe # 1
Configuration du système d'exploitation avec Raspberry Pi Imager
À propos de la valeur de retour de l'histogramme.
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Classification en temps réel de plusieurs objets dans les images de la caméra avec apprentissage en profondeur de Raspberry Pi 3 B + et PyTorch
Affichage graphique de la consommation électrique des ménages avec 3GPI et Raspeye
Résolution du problème de la valeur initiale des équations différentielles ordinaires avec JModelica
Essayez de déplacer 3 servos avec Raspeye
Astuces: [Python] Calculez la valeur moyenne de la zone spécifiée avec bedgraph
Utiliser une webcam avec Raspberry Pi
Construction d'un environnement distribué avec la série Raspberry PI (Partie 1: Résumé de la disponibilité des clients sans disque par modèle)
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Utilisez Rasppie pour résoudre le problème de connexion Wi-Fi mobile insuffisante
[J'ai touché le Raspberry Pi (1)] J'ai résumé les opérations de base de Minecraft Pi Edition (2015.5.23 pré-version)
Sortie CSV des données d'impulsion avec Raspberry Pi (vérifier l'entrée analogique avec python)
Laissez-moi vous montrer les performances du nouveau Raspberry pi zero (v1.3)!
Acquérir la valeur du capteur de Grove Pi + avec Raspberry Pi et la stocker dans Kintone
Obtenez la valeur de retour d'un script shell externe (ls) avec python3
Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission
Mesurer la force du signal SIM avec Raspberry Pi