[PYTHON] J'ai créé un système avec Raspberry Pi qui mesure périodiquement l'indice d'inconfort de la pièce et envoie une notification LINE s'il s'agit d'une valeur dangereuse

Déclencheur

――Il fait chaud cette année, mais à quelle température devriez-vous utiliser la glacière? ――Ce serait plus facile si vous mesurez l'indice d'inconfort et recevez une notification disant "utilisez la glacière car c'est dangereux!" ... --Un système qui peut sauver des vies en été au Japon, où il y a un risque de coup de chaleur même à l'intérieur ... Je le faisais si je connectais simplement le capteur à la tarte à la râpe et que je communiquais, alors pourquoi ne pas le faire?

Schéma de présentation du système

Untitled Diagram (1).png

Mise en garde

―― Étant donné que cet article a été écrit sur la base d'une note de service faite par essais et erreurs, il peut y avoir des omissions dans la procédure ...

Ce que j'ai utilisé

Préparation du système d'exploitation pour Raspeye (travail sur Win10)

Exporter le système d'exploitation sur la carte SD

-Téléchargez et installez Raspberry Pi Imager --Démarrez et exécutez en spécifiant le système d'exploitation et la carte SD à écrire

Générez 2 fichiers à la racine de la carte SD où l'OS a été écrit

ssh Le fichier vide est OK wpa_supplicant.conf

wpa_supplicant.conf


country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="SSID"
  psk="Clé de cryptage"
}

Paramètres après le démarrage de Raspberry (travail Linux / raspberrypi)

Vous pouvez vous connecter depuis Win10 avec teraterm etc., mais comme la programmation a été essentiellement faite avec Linux Je me prépare à travailler en me connectant à Raspai depuis Linux (Ubuntu) avec ssh.

accès ssh (Linux)

linux


ssh [email protected]
# pass:raspberry

Réglage initial du Raspberry Pi (raspberrypi)

raspberrypi


#création d'utilisateur sudo
sudo adduser kabu0404
sudo usermod -aG sudo kabu0404
su kabu0404

#Diverses mises à jour
sudo apt update
sudo apt upgrade

#Fuseau horaire/Paramètres de localisation
sudo timedatectl set-timezone Asia/Tokyo
sudo localectl set-locale ja_JP.UTF-8
#Enfin sudo raspi-Peut-être que j'ai dérangé la configuration

Connexion SSH avec clé publique

linux


#Ssh dans le passé-keygen -Depuis que je suis trsa, envoyez la clé publique existante
cd ~/.ssh
scp ./id_rsa.pub [email protected]:~/.ssh/

raspberrypi


cd ~
chmod 700 .ssh
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
rm -fv ~/.ssh/id_rsa.pub

Réglage BME280

Connexion BME280

--Connectez-vous via la maquette comme indiqué dans le tableau ci-dessous

Côté BME280 Code PIN
VDD 1(3.3V)
GND 9(GND)
CSB ---
SDI 3(I2C1_SDA1)
SDO 9(GND)
SCK 5(I2C1_SCL1)

Communication du BME280

raspberrypi


# spi/Activer i2c et corriger les paramètres régionaux
sudo raspi-config

sudo chmod 666 /dev/i2c-1

#Vérifiez l'état de la connexion
i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- 76 --  

#Assurez-vous que vous êtes connecté à 76

#Vérifiez le contenu du registre
i2cdump -y 1 0x76

No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    ................
80: 8a 70 89 8e 83 0f fc 06 34 6e 56 66 32 00 8a 8e    ?p??????4nVf2.??
90: 17 d6 d0 0b 5e 1d f0 ff f9 ff ac 26 0a d8 bd 10    ????^??.?.?&????
a0: 00 4b 40 00 00 00 00 00 00 00 00 00 33 00 00 c0    [email protected]..?
b0: 00 54 00 00 00 00 60 02 00 01 ff ff 1f 60 03 00    .T....`?.?..?`?.
c0: 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00    ................
d0: 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    `...............
e0: 00 67 01 00 14 05 00 1e 57 41 ff ff ff ff ff ff    .g?.??.?WA......
f0: ff 00 00 00 00 00 00 80 00 00 80 00 00 80 00 80    .......?..?..?.?

#Enregistrer les paramètres
#Vérifiez la valeur du registre système de réglage de fonctionnement
echo -n '0xF5:' ; i2cget -y 1 0x76 0xF5 ; \
echo -n '0xF4:' ; i2cget -y 1 0x76 0xF4 ; \
echo -n '0xF2:' ; i2cget -y 1 0x76 0xF2

#Réglage de la valeur du registre système de réglage de fonctionnement
# i2cset -y 1 0x76 [Adresse interne] [valeur]
i2cset -y 1 0x76 0xF5 0xA0 ; \
i2cset -y 1 0x76 0xF4 0x27 ; \
i2cset -y 1 0x76 0xF2 0x01
#Si vous ne voulez rien faire de spécial, les paramètres ci-dessus devraient être OK

#Acquisition des valeurs de température / humidité / pression
i2cdump -r 0xF7-0xFE -y 1 0x76

No size specified (using byte-data access)
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
f0:                      54 0b 00 84 00 00 74 62              T?.?..tb 

#Cela devrait être OK si vous pouvez obtenir la valeur comme celle-ci
#Il semble que les données peuvent être sorties proprement si vous utilisez bien les valeurs d'autres registres.

Se préparer à acquérir des valeurs mesurées en Python

Le kit est un produit d'Akizuki Denshi, mais comme le capteur lui-même est le même, j'utilise SWITCH SCIENCE sample code.

raspberrypi


mkdir i2ctest
cd i2ctest/
wget https://github.com/SWITCHSCIENCE/samplecodes/archive/master.zip
unzip master.zip
#Ce dont vous avez besoin après le déploiement
# i2ctest/BME280/Python27/bme280_sample.Parce que ce n'est que py
#Copier le contenu du code dans le fichier touché sous n'importe quel Dir suffit

cd BME280/Python27/
sudo python bme280_sample.py
temp : 28.37  ℃
pressure : 1003.83 hPa
hum :  51.99 %

Obtenez des jetons pour les notifications LINE

-J'ai obtenu le jeton en me référant à Envoyer un message LINE avec Python

Codage supplémentaire pour les notifications LINE

Changement de la fonction de température / humidité de la sortie de la console au retour de valeur

bme280_sample.py


#Fonction pour la température
def compensate_T(adc_T):
	#Omission
	# print "temp : %-6.2f ℃" % (temperature) 
	return temperature

#Fonction humidité
def compensate_H(adc_H):
	#Omission
	# print "hum : %6.2f %" % (var_h)
	return var_h

Appelez la fonction de notification LINE avec la fonction d'acquisition de données

bme280_sample.py


def readData():
	#Omission
	temp = compensate_T(temp_raw)
	#N'utilisez pas de pression
	# compensate_P(pres_raw)
	hum  = compensate_H(hum_raw)

	#Calculer l'indice d'inconfort et envoyer une notification si plus de 80 ans
	discomfortIndex = 0.81 * temp + 0.01 * hum * ( 0.99 * temp - 14.3 ) + 46.3
	if discomfortIndex > 80:
		sendNotice(temp, hum, discomfortIndex)

Ajout d'une fonction d'envoi de notifications LINE

-Codage avec référence à Envoyer un message LINE avec Python

bme280_sample.py


def sendNotice(temp, hum, discomfortIndex):
	url = 'https://notify-api.line.me/api/notify'
	token = #Définir un jeton pour la notification
	headers = {'Authorization' : 'Bearer ' + token}
	now = datetime.datetime.now()
	message = \
		'\r\n Date:' + now.strftime('%Y/%m/%d') + \
		'\r\n temps:' + now.strftime('%H:%M:%S') + \
		'\r\indice n:%5.2f' % (discomfortIndex) + \
		'\r\n Température:%5.2f ℃' % (temp) + \
		'\r\n Humidité:%5.2f %' % (hum)
	payload = {'message' : message}
	r = requests.post(url, headers=headers, params=payload)

Paramètres d'exécution programmée

Définissez l'exécution périodique avec cron en vous reportant à Avant d'utiliser crontab pour la première fois avec RaspberryPi3

lineNoticeCron


#Exemple d'exécution toutes les 5 minutes
*/5 * * * * kabu0404 sudo python /home/kabu0404/i2ctest/BME280/Python27/bme280_sample.py

Résultat d'exécution

resised.jpg

Impressions que j'ai faites

LINE Nortify

Communication série

――I2C? SPI? Qu'est-ce que c'était? J'ai eu du mal parce que c'était un niveau. Je ne comprends toujours pas. «Il semble que vous devriez étudier un peu plus car c'est une partie qui est pratiquement essentielle lorsque vous essayez de faire quelque chose avec Raspeye.

Enregistrer les spécifications

«C'était une partie que je pouvais sauter, mais j'étais un peu coincé dans la façon de le lire. ――La compréhension actuelle est ci-dessous, veuillez indiquer si vous faites une erreur --hoge <n: m> etfuga [n: m]signifient utiliser les valeurs du nbit à mbit. --hoge <0> etfuga [0]sont omis car il est redondant d'écrire 0: 0 si la valeur utilisée n'est qu'un chiffre.

Python ――Tout simplement pas assez d'étude

Comment utiliser ce système?

――Placez-le dans la maison d'une famille qui n'aime pas les glacières et informez la ligne du groupe que "il peut faire chaud mais vous n'avez peut-être pas de glacière!" ――Placez-le à l'extérieur de la fenêtre et notifiez que "il fait assez froid pour éteindre la glacière"

Autre

――Il semble intéressant de combiner IFTTT ou des appareils électroménagers intelligents (même si je n'en ai pas) ――Je me demande si vous ne pouvez rien faire d'intéressant en combinaison avec le GPS connecté.

Articles / sites auxquels j'ai fait référence

Recommended Posts

J'ai créé un système avec Raspberry Pi qui mesure périodiquement l'indice d'inconfort de la pièce et envoie une notification LINE s'il s'agit d'une valeur dangereuse
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
[Pour les débutants] J'ai fait un capteur humain avec Raspberry Pi et notifié LINE!
Un système simple qui prend automatiquement des photos avec détection d'objet et l'envoie à LINE
Un programme qui reçoit la commande d'asservissement du contrôleur radio, interrompt la tarte aux râpes et l'enregistre.
J'ai créé un robot Line qui devine le sexe et l'âge d'une personne à partir de l'image
J'ai créé un bot LINE qui me dit le type et la force de Pokémon dans la région de Garal avec Heroku + Flask + PostgreSQL (Heroku Postgres)
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
Fabriquez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 3
Une histoire sur l'obtention du champ Atom (télégramme XML) de l'Agence météorologique avec une tarte à la râpe et de le tweeter
J'ai créé une application Twitter qui décrypte les caractères de pré-connexion avec heroku (échec)
J'ai créé et publié une image Docker qui lit RSS et tweete automatiquement régulièrement.
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
Une histoire à laquelle j'ai pensé en essayant d'identifier les informations de plénitude du parking en utilisant l'image obtenue par la caméra Web et Razpai et le deep learning.
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
J'ai essayé de faire LINE BOT avec Python et Heroku
Je n'aime pas être frustré par la sortie de Pokemon Go, j'ai donc créé un script pour détecter la sortie et le tweeter
Un script qui envoie un ping au serveur enregistré et envoie un e-mail avec Gmail un certain nombre de fois en cas d'échec
Créez facilement un TweetBot qui vous informe de la température et de l'humidité avec Raspberry Pi + DHT11.
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
J'ai automatiquement collecté mes données de publication Qiita avec Raspberry Pi et je les ai régulièrement notifiées avec Slack
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
J'ai créé un moniteur de ressources pour Raspberry Pi avec une feuille de calcul
J'ai fait une caméra de surveillance avec Raspberry PI pour la première fois.
Construire un environnement distribué avec la série Raspberry PI (Partie 2: Analyse PiServer et conception de système alternatif)
Une liste de fonctions que j'ai rencontrées avec 100 coups Numpy et j'ai pensé "C'est pratique!"
Rasppie? Qu'est-ce que c'est? Niveau de matériel Des étudiants inexpérimentés ont créé un système pour savoir s'il y a des gens au bureau
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai créé un serveur Web avec Razpai pour regarder des anime
Créez un thermomètre avec Raspberry Pi et rendez-le visible sur le navigateur Partie 4
J'ai fait un bot mou qui m'informe de la température
J'ai fait un programme qui calcule automatiquement le zodiaque avec tkinter
Consigner périodiquement les valeurs des capteurs d'environnement Omron avec Raspberry Pi
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC