Cet article est le chapitre 3 d'un article de quatre chapitres.
Je souhaite informer LINE Bot de l'heure à laquelle le capteur humain a répondu et du nombre de fois où il a répondu en une heure. Vous pouvez exécuter SQL localement, mais j'ai pensé qu'il serait plus facile de le stocker dans une base de données cloud car la tarte à la râpe avec un capteur humain attaché et la tarte à la râpe utilisée comme serveur pour LINE Bot sont séparées, j'ai donc utilisé le Firebase standard.
--Raspberry Pi 3 Model A + (OK s'il est supérieur à cela) --Module de capteur humain
J'ai utilisé le capteur humain de ce fabricant.
[Raspberry Pi] Comment utiliser et utiliser le capteur de sentiment humain auto-fabriqué a été utilisé tel quel. Attention aux erreurs de connexion GPIO (j'ai commis l'erreur d'épingler par erreur la broche 12 et la masse)
Firebase Je me suis référé à [python] Comment démarrer avec Firebase Realtime Database.
Installez firebase-admin sur Raspeye avec la commande suivante
$ pip install firebase-admin
Créez une base de données à partir de la console Firebase. Il existe «Cloud Firestore» et «Realtime Database», mais veuillez noter que cette fois il s'agit de ** «Realtime Database» **. Modifiez les règles comme suit:
Allez également dans Set Project> Service Account> Firebase Admin SDK
à partir de l'engrenage sur le côté droit de" Project Overview ", sélectionnez Python
pour copier et cliquez sur" Generate New Private Key ". , Enregistrez la clé privée téléchargée dans Raspeye.
Ci-dessous le code
firebase.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
from datetime import datetime
import time
import RPi.GPIO as GPIO
cred = credentials.Certificate("<Clé privée téléchargée>.json")
firebase_admin.initialize_app(cred, {
'databaseURL': 'https://<databaseURL>.firebaseio.com/'
})
ref = db.reference('data')
INTERVAL = 3
SLEEPTIME = 20
GPIO_PIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)
while True:
if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
print(datetime.now().strftime('%Y/%m/%d %H:%M:%S'))
new_data_ref = ref.push()
new_data_ref.set({
'timestamp': {'.sv': 'timestamp'}
})
time.sleep(SLEEPTIME)
else:
print(GPIO.input(GPIO_PIN))
time.sleep(INTERVAL)
Lorsqu'il est détecté, poussez-le vers la base de données avec horodatage. Un identifiant unique est généré en poussant. Apparemment, l'ID est également dans l'ordre chronologique.
C'est aussi Issue here, mais il semble qu'il y ait une habitude d'enregistrer les horodatages à partir du module firebase-admin de Python. J'espère que vous trouverez le '' timestamp ': {' .sv ':' timestamp '} `ci-dessus utile.
De cette façon, lorsqu'il est détecté, il est écrit dans la base de données en temps réel.
L'heure UNIX 1597307961996
est 2020/08/13 17:39:21, donc c'est parfait.
C'est tout pour stocker le temps de réaction du capteur humain dans la base de données Firebase Realtime. Ensuite, récupérez ces données d'une autre tarte aux râpes.
Recommended Posts