[PYTHON] Ich habe mit Raspberry Pi ein System erstellt, das regelmäßig den Unbehaglichkeitsindex des Raums misst und eine LINE-Benachrichtigung sendet, wenn es sich um einen gefährlichen Wert handelt

Auslösen

――Das Jahr wird es heiß, aber wie heiß solltest du den Kühler benutzen? ――Es wäre einfacher, wenn Sie den Unbehaglichkeitsindex messen und eine Benachrichtigung erhalten, die besagt: "Verwenden Sie den Kühler, weil er gefährlich ist!" ...

Systemübersichtsdiagramm

Untitled Diagram (1).png

Hinweis

――Daher dieser Artikel auf der Grundlage eines durch Versuch und Irrtum erstellten Memos verfasst wurde, kann es zu Auslassungen im Verfahren kommen ...

Was ich benutzt habe

Vorbereiten des Betriebssystems für Raspeye (Arbeiten unter Win10)

Betriebssystem auf SD-Karte exportieren

-Download und Installation von Raspberry Pi Imager --Starten und Ausführen durch Angabe des Betriebssystems und der zu schreibenden SD-Karte

Generieren Sie 2 Dateien im Stammverzeichnis der SD-Karte, auf der das Betriebssystem geschrieben wurde

ssh Leere Datei ist 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="Verschlüsselungsschlüssel"
}

Einstellungen nach dem Start von Raspberry (Linux / Himbeerpi-Arbeit)

Sie können eine Verbindung von Win10 mit Teraterm usw. herstellen, aber da die Programmierung grundsätzlich unter Linux erfolgte Ich bereite mich auf die Arbeit vor, indem ich mit ssh eine Verbindung zu Raspai von Linux (Ubuntu) herstelle.

SSH-Zugriff (Linux)

linux


ssh [email protected]
# pass:raspberry

Himbeer-Pi-Grundeinstellung (Himbeer-Pi)

raspberrypi


#Sudo-Benutzererstellung
sudo adduser kabu0404
sudo usermod -aG sudo kabu0404
su kabu0404

#Verschiedene Updates
sudo apt update
sudo apt upgrade

#Zeitzone/Lokalisierungseinstellungen
sudo timedatectl set-timezone Asia/Tokyo
sudo localectl set-locale ja_JP.UTF-8
#Endlich Sudo Raspi-Vielleicht habe ich mit config rumgespielt

SSH-Verbindung mit öffentlichem Schlüssel

linux


#Ssh in der Vergangenheit-keygen -Da ich trsa war, werde ich den vorhandenen öffentlichen Schlüssel senden
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

BME280 Einstellung

BME280-Verbindung

BME280 Seite PIN Nummer
VDD 1(3.3V)
GND 9(GND)
CSB ---
SDI 3(I2C1_SDA1)
SDO 9(GND)
SCK 5(I2C1_SCL1)

Mitteilung von BME280

raspberrypi


# spi/Aktivieren Sie i2c & fix locale
sudo raspi-config

sudo chmod 666 /dev/i2c-1

#Überprüfen Sie den Verbindungsstatus
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 --  

#Stellen Sie sicher, dass Sie mit 76 verbunden sind

#Überprüfen Sie den Inhalt des Registers
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    .......?..?..?.?

#Registrieren Sie die Einstellungen
#Überprüfen Sie den Wert des Betriebseinstellungssystemregisters
echo -n '0xF5:' ; i2cget -y 1 0x76 0xF5 ; \
echo -n '0xF4:' ; i2cget -y 1 0x76 0xF4 ; \
echo -n '0xF2:' ; i2cget -y 1 0x76 0xF2

#Werteinstellung des Betriebseinstellungssystemregisters
# i2cset -y 1 0x76 [Interne Adresse] [Wert]
i2cset -y 1 0x76 0xF5 0xA0 ; \
i2cset -y 1 0x76 0xF4 0x27 ; \
i2cset -y 1 0x76 0xF2 0x01
#Wenn Sie nichts Besonderes tun möchten, sollten die obigen Einstellungen in Ordnung sein

#Erfassung von Temperatur- / Feuchtigkeits- / Druckwerten
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 

#Es sollte in Ordnung sein, wenn Sie den Wert so erhalten können
#Es scheint, dass Daten sauber ausgegeben werden können, wenn Sie die Werte anderer Register gut verwenden.

Vorbereiten der Erfassung von Messwerten in Python

Das Kit ist ein Produkt von Akizuki Electronics, aber da der Sensor selbst derselbe ist, verwende ich SWITCH SCIENCE-Beispielcode.

raspberrypi


mkdir i2ctest
cd i2ctest/
wget https://github.com/SWITCHSCIENCE/samplecodes/archive/master.zip
unzip master.zip
#Was Sie nach der Bereitstellung benötigen
# i2ctest/BME280/Python27/bme280_sample.Weil es nur py ist
#Das Kopieren des Code-Inhalts in die Datei, die unter einem beliebigen Verzeichnis berührt wird, reicht aus

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

Holen Sie sich Token für LINE-Benachrichtigungen

-Ich habe das Token erhalten, indem ich auf LINE-Nachricht mit Python senden verwiesen habe.

Zusätzliche Codierung für LINE-Benachrichtigungen

Die Temperatur- / Feuchtigkeitsfunktion wurde vom Konsolenausgang auf die Wertrückgabe geändert

bme280_sample.py


#Funktion für Temperatur
def compensate_T(adc_T):
	#Unterlassung
	# print "temp : %-6.2f ℃" % (temperature) 
	return temperature

#Feuchtigkeitsfunktion
def compensate_H(adc_H):
	#Unterlassung
	# print "hum : %6.2f %" % (var_h)
	return var_h

Rufen Sie die LINE-Benachrichtigungsfunktion mit der Datenerfassungsfunktion auf

bme280_sample.py


def readData():
	#Unterlassung
	temp = compensate_T(temp_raw)
	#Verwenden Sie keinen Druck
	# compensate_P(pres_raw)
	hum  = compensate_H(hum_raw)

	#Berechnen Sie den Unbehaglichkeitsindex und senden Sie eine Benachrichtigung, wenn Sie über 80 Jahre alt sind
	discomfortIndex = 0.81 * temp + 0.01 * hum * ( 0.99 * temp - 14.3 ) + 46.3
	if discomfortIndex > 80:
		sendNotice(temp, hum, discomfortIndex)

Funktion zum Senden von LINE-Benachrichtigungen hinzugefügt

-Codierung mit Bezug auf LINE-Nachricht mit Python senden

bme280_sample.py


def sendNotice(temp, hum, discomfortIndex):
	url = 'https://notify-api.line.me/api/notify'
	token = #Legen Sie ein Token für die Benachrichtigung fest
	headers = {'Authorization' : 'Bearer ' + token}
	now = datetime.datetime.now()
	message = \
		'\r\n Datum:' + now.strftime('%Y/%m/%d') + \
		'\r\n Zeit:' + now.strftime('%H:%M:%S') + \
		'\r\n Index:%5.2f' % (discomfortIndex) + \
		'\r\n Temperatur:%5.2f ℃' % (temp) + \
		'\r\n Luftfeuchtigkeit:%5.2f %' % (hum)
	payload = {'message' : message}
	r = requests.post(url, headers=headers, params=payload)

Geplante Ausführungseinstellungen

Stellen Sie die regelmäßige Ausführung mit cron ein, indem Sie auf [Vor der ersten Verwendung von crontab mit RaspberryPi3] verweisen (https://qiita.com/Higemal/items/5a579b2701ef7c473062).

lineNoticeCron


#Beispiel für das Laufen alle 5 Minuten
*/5 * * * * kabu0404 sudo python /home/kabu0404/i2ctest/BME280/Python27/bme280_sample.py

Ausführungsergebnis

resised.jpg

Eindrücke, die ich gemacht habe

LINE Nortify

Serielle Kommunikation

――I2C? SPI? Was war das? Ich hatte es schwer, weil es ein Level war. Ich verstehe immer noch nicht. ――Es scheint, dass Sie etwas mehr lernen sollten, da dies ein Teil ist, der unverzichtbar zu sein scheint, wenn Sie versuchen, etwas mit Razzpie zu tun.

Registrieren Sie die Spezifikationen

»Es war ein Teil, den ich überspringen konnte, aber ich war ein wenig festgefahren, wie ich ihn lesen sollte. ――Das aktuelle Verständnis ist unten angegeben. Bitte weisen Sie darauf hin, wenn Sie einen Fehler machen --hoge <n: m> undfuga [n: m]bedeuten, die Werte von nbit zu mbit zu verwenden. --hoge <0> undfuga [0]werden weggelassen, da das Schreiben von 0: 0 redundant ist, wenn der verwendete Wert nur eine Ziffer ist.

Python ――Einfach nicht genug studieren

Wie benutzt man dieses System?

――Stellen Sie es in das Haus einer Familie, die Kühler nicht mag, und teilen Sie der Gruppenleitung mit, dass "es heiß sein kann, aber Sie möglicherweise keinen Kühler haben!" ――Stellen Sie es vor das Fenster und benachrichtigen Sie, dass "es kühl genug ist, um den Kühler auszuschalten".

Andere

――Es sieht interessant aus, IFTTT- oder Smart Home-Geräte zu kombinieren (obwohl ich keine habe) ――Ich frage mich, ob Sie in Kombination mit dem angeschlossenen GPS nichts Interessantes tun können.

Artikel / Websites, auf die ich verwiesen habe

Recommended Posts

Ich habe mit Raspberry Pi ein System erstellt, das regelmäßig den Unbehaglichkeitsindex des Raums misst und eine LINE-Benachrichtigung sendet, wenn es sich um einen gefährlichen Wert handelt
Ich habe die Beleuchtungsstärke des Raumes mit Raspberry Pi, Arduino und einem optischen Sensor getwittert
[Für Anfänger] Ich habe mit Raspberry Pi einen menschlichen Sensor erstellt und LINE benachrichtigt!
Ein einfaches System, das automatisch mit Objekterkennung aufnimmt und an LINE sendet
Ein Programm, das den Servobefehl der Funksteuerung empfängt, den Raspetorte unterbricht und protokolliert.
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe mit Heroku + Flask + PostgreSQL (Heroku Postgres) einen LINE-Bot erstellt, der mir den Typ und die Stärke von Pokemon in der Garal-Region angibt.
Ich habe ein npm-Paket erstellt, um die ID der IC-Karte mit Raspberry Pi und PaSoRi zu erhalten
Ich habe ein System erstellt, das automatisch entscheidet, ob es morgen mit Python ausgeführt wird, und es zu Google Kalender hinzufügt.
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 3 sichtbar
Eine Geschichte darüber, wie man das Atomfeld (XML-Telegramm) der Meteorologischen Agentur mit einem Raspeltorte bekommt und twittert
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
Ich habe ein Docker-Image erstellt, das RSS liest und automatisch regelmäßig twittert, und es veröffentlicht.
Erstellt eine Web-App, die IT-Ereignisinformationen mit Vue und Flask abbildet
Eine Geschichte, bei der ich darüber nachdachte, die Informationen über die Fülle des Parkplatzes anhand des von der Webkamera und Razpai erhaltenen Bildes und durch tiefes Lernen zu ermitteln.
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
Ich mag es nicht, mit der Veröffentlichung von Pokemon Go frustriert zu sein, deshalb habe ich ein Skript erstellt, um die Veröffentlichung zu erkennen und zu twittern
Ein Skript, das den registrierten Server anpingt und eine bestimmte Anzahl von E-Mails mit Google Mail sendet, wenn dies fehlschlägt
Erstellen Sie mit Raspberry Pi + DHT11 ganz einfach einen TweetBot, der Sie über Temperatur und Luftfeuchtigkeit informiert.
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Ich habe meine Qiita-Post-Daten automatisch mit Raspberry Pi gesammelt und regelmäßig mit Slack benachrichtigt
Herstellung eines Temperaturregelungssystems mit Himbeerkuchen und ESP32 (1)
Ich habe einen Ressourcenmonitor für Raspberry Pi mit einer Tabelle erstellt
Ich habe zum ersten Mal eine Überwachungskamera mit Raspberry PI gemacht.
Erstellen einer verteilten Umgebung mit der Raspberry PI-Serie (Teil 2: PiServer-Analyse und alternatives Systemdesign)
Eine Liste von Funktionen, die mir mit 100 Numpy-Klopfen begegnet sind und ich dachte "Das ist praktisch!"
Rasppie? Was ist das? Hardware-Level Unerfahrene College-Studenten haben ein System entwickelt, mit dem sie erfassen können, ob sich Personen im Büro befinden
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe mit Razpai einen Webserver erstellt, um Anime zu schauen
Machen Sie ein Thermometer mit Raspberry Pi und machen Sie es im Browser Teil 4 sichtbar
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
Ich habe ein Programm erstellt, das den Tierkreis mit tkinter automatisch berechnet
Protokollieren Sie die Omron-Umgebungssensorwerte regelmäßig mit Raspberry Pi
Ich habe einen Chat-Chat-Bot mit Tensor2Tensor erstellt und diesmal hat es funktioniert
Lesen Sie die Daten des NFC-Lesegeräts, das mit Python an Raspberry Pi 3 angeschlossen ist, und senden Sie sie mit OSC an openFrameworks