Raspberry Pi und Sensor
Was ist das Ziel unseres Projekts?
Mit einem Raspberry Pi sollen alle 5 Minuten Daten von einem BME280 Sensor ausgelesen werden und in einer MySQL/MariaDB abgespeichert werden.
Anschließend sollen die Daten in ein Excel geladen werden, um Diagramme erstellen zu können.
Der verwendete Sensor BME280 kann Temperatur, Luftfeuchtigkeit und Druck auslesen – bei der Bestellung des Sensors wurde darauf geachtet, dass es zumindest eine einfache Installationsanleitung sowie eine verfügbare Demo für das Auslesen der Daten gibt.
Schritt 1 – Raspberry Pi OS installieren und einrichten
Die Installation des Raspberry Pi OS ist relativ simpel, einfach den Installer von der Homepage runterladen, installieren und ausführen lassen.
Als Operating System verwenden wir Pi OS 32Bit in der Lite Version (da wir keine grafische Oberfläche benötigen) mit einer 64GB Speicherkarte.
Unter den Einstellungen setzen wir den Hostname, aktivieren SSH und setzen Benutzername und Passwort.
Zusätzlich lassen wir den Raspberry Pi mit unserem WLAN verbinden und setzen Zeitzone und Tastaturlayout:
Nachdem das Pi OS auf die microSD Karte geschrieben wurde, schieben wir es in den Raspberry Pi microSD Slot – und nach ein bisschen warten, ist der erste Bootvorgang inkl. automatischer Einrichtung abgeschlossen.
Mittels ssh können wir uns nun auf die IP des Raspberry Pi verbinden und erstmal Updates installieren:
ssh pi@192.168.42.50
sudo apt-get update
sudo apt-get dist-upgrade
Mit Y bestätigen, nach erfolgreicher Installation der Updates rebooten mit:
sudo reboot
MariaDB-Server installieren und einrichten:
sudo apt-get install mariadb-server
sudo mysql_secure_installation
Enter current password for root (enter for none): <Enter>
Enter current password for root (enter for none): Y
Change the root password? [Y/n] Y
New password: <password>
Re-enter new password: <password>
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
MariaDB über das Netzwerk erreichbar machen:
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 127.0.0.1 à bind-address = 0.0.0.0
sudo systemctl restart mariadb
Kontrollieren mit netstat:
sudo netstat -tulpen |grep 3306
Mit MariaDB verbinden:
sudo mysql -uroot -p
Datenbank und Tabelle anlegen:
create database bme280;
use bme280;
CREATE TABLE wohnzimmer (Messzeit DATETIME NULL, Temperatur DECIMAL(6 , 2) NULL, Druck DECIMAL(6 , 2) NULL, Luftfeuchtigkeit DECIMAL(6 , 2 ) NULL, PRIMARY KEY (Messzeit) );
desc wohnzimmer;
User anlegen und testen:
CREATE USER ‚bme280‘ IDENTIFIED BY ‚bme280‘;
GRANT ALL ON bme280.* TO ‚bme280‘;
flush privileges;
exit
Verbindung testen:
mysql -ubme280 -pbme280 -Dbme280
Schritt 2 – BME280 mit dem Raspberry Pi verbinden und testen
Den BME 280 Sensor verbinden wir über I2C mit den entsprechenden Pin’s des Raspberry Pi:
I2C interface | |
BME280 PIN | Raspberry |
VCC | 3.3V (PIN 1) |
GND | GND (PIN 6) |
SDA | SDA (PIN 3) |
SCL | SCL (PIN 5) |
ADDR | nicht verbunden |
CS | nicht verbunden |
i2c und spi aktivieren:
sudo raspi-config
→ Interface Options →I4 SPI bzw. I5 SPI → <YES>
Mit <Finish> beenden und rebooten à nach dem Neustart sollten wir die Module sehen:
lsmod |grep -E ‚i2c_bcm|spi_bcm‘
I2C Tools installieren und den Sensoren suchen:
sudo apt-get install i2c-tools
i2cdetect -y 1
Der Sensor meldet sich mit Adresse 77 und sollte somit funktionstüchtig sein.
Schritt 3 – Daten auslesen und in die MariaDB Tabelle schreiben
Für unseren Sensor verwenden wir einen frei verfügbaren Demo Code, passen diesen aber noch etwas an, damit wir die Daten in csv Form erhalten.
Zusätzlich benötigen wir noch das Tool WiringPi, welches wir runterladen und mit dpkg installieren:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
Nach dem kompilieren des Programmes können wir es mit ./bme280 starten und bekommen Temperatur, Druck und Luftfeuchtigkeit als Output:
Mit einem einfachen Shellscript können wir nur die Daten per cronjob alle 5 Minuten abfragen, in einer Datei speichern und angereichert mit Datum und Uhrzeit in die MariaDB schreiben:
bme280.sh
#!/bin/bash
/home/pi/bme280 |sed „s/^/$(date ‚+%Y-%m-%d %H:%M‘);/g“ > /tmp/wohnzimmer.csv
sleep 1
cat /tmp/wohnzimmer.csv >> /home/pi/wohnzimmer_all.csv
mysqlimport –lines-terminated-by=’\n‘ –fields-terminated-by=‘;‘ –verbose –local -hlocalhost -ubme280 -pbme280 bme280 /tmp/wohnzimmer.csv
cronjob
Den letzten Datensatze können wir mit dem Befehl abfragen:
mysql -ubme280 -pbme280 -Dbme280 -e „select * from wohnzimmer order by Messzeit desc limit 1“;
Somit ist unser erster Teil fertig – wir lesen uns die Daten vom Sensor aus und schreiben diese in eine MariaDB.
Im nächsten Schritt werden wir uns per ODBC mit der MariaDB verbinden, in Excel einbinden und uns ein paar Diagramme für unsere Daten überlegen.