Installation und Vorbereitung des Raspberry Pi
Für das Projekt haben wir haben uns für den neuesten Raspberry Pi 3 Model B für ca. 35€ entschieden.
Mit einer 4x 1.2 GHz CPU und 1GB Arbeitsspeicher ist er für alle Aufgaben und eine flüssige grafische Oberfläche gut zu brauchen.
Als SD-Karte haben wir eine 8GB Class10 in Benutzung. 8GB bietet genug Platz für die Daten und halt gleichzeitig die Größe des Backup-Image modetat.
Als Betriebssystem ist Rasperian eine sinnvolle Wahl, weil viele Pakete für den Raspberry Pi enthalten sind.
Die SD Karte vorbereiten
Das Image von Rasperian runterladen
https://www.raspberrypi.org
Empfolen ist Rasperian mit der grafischen Oberfläche Pixel Desktop. Es ist auch möglich ohne grafischen Desktop oder ausschließlich mit Fernzugriff zu arbeiten. Hier wird aber die Einrichtung an einem Monitor am Raspi beschrieben.
Das Image muss mittels einer Imagewritersoftware auf die SD Karte kopiert werden, mit z.B.
https://sourceforge.net/projects/win32diskimager
Nach dem ersten Start und in regelmäßigen Abständen sollte das Betriebssystem auf den neusten Stand gebracht werden:
sudo apt-get update && sudo apt-get upgrade
sudo reboot
Bei Bedarf den Raspi konfigurieren zB. Wlan Password, Zeitzone, Tastaturlayout, ...
sudo raspi-config
Python, Apache-Webserver, PHP und MySql-Datenbank installieren
Python ist die Programmiersprache in der hauptsächlich die Sensoren abgefragt
werden und die Steuerung angesprochen wird.
Der Apache Webserver mit PHP ist für die grafische Ausgabe als Webseite.
Die Daten werden in einer MySql Datenbank gespeichert.
sudo apt-get install build-essential python-dev python-openssl gi
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install mysql-server mysql-client php5-mysql
Ein
Passwort für Mysql eingeben und neu starten mit
sudo reboot
Die
Datenbank muss für den
Zugriff eingerichtet werden indem man sich einloggt und einen user anlegt. In dem Fall User pi mit Zugriff von überall ('%') und dem Passwort ('f6g7h8')
mysql -uroot -hlocalhost -p
CREATE USER 'pi'@'%' IDENTIFIED BY 'f6g7h8';
CREATE DATABASE grow;
GRANT ALL PRIVILEGES ON grow.* TO 'pi'@'%';
FLUSH PRIVILEGES;
quit
Für den
Datenbankzugriff von außen zB mit dem Programm
HeidiSQL muss die datei /etc/mysql/my.cnf geändert werden
sudo nano /etc/mysql/my.cnf
Aus der Zeile bind-adress = 127.0.0.1 muss
bind-adress = 0.0.0.0 werden und mysql neu starten mit:
sudo /etc/init.d/mysql restart
Die Datenbankstruktur muss vorab per Hand angelegt werden. Entweder per Konsole oder bequemer mit HeidiSQL. Die Tabellen sind so aufgebaut, das sie mit allen Modulen des messens und steuerns arbeiten können und keine weitere Anpassung benötigen.
Wir brauchen eine Datenbank mit Namen 'grow' die alle Tabellen zum loggen und steuern enthalten wird.
In der Tabelle 'log' werden die Werte von verschiedenen Sensoren mit Wert und Zeit gespeichert.
CREATE DATABASE IF NOT EXISTS `grow` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `grow`;
CREATE TABLE IF NOT EXISTS `log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`datum` date NOT NULL,
`zeit` time NOT NULL,
`sensor` tinytext NOT NULL,
`wert` mediumint(9) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
In der
Tabelle 'soll' werden die Soll-Werte zum steuern gespeichert.
CREATE TABLE IF NOT EXISTS `soll` (
`name` text,
`wert` text
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Damit
Python auf die MySql Datenbank zugreifen kann
sudo apt-get install python-mysqldb
Error reporting in php aktivieren ist keine STandarteinstellung und ist sehr zu empfehlen
sudo nano /etc/php5/apache2/php.ini
ziemlich weit unten muss aus einem Off ein On werden:
Display_Errors=On
Damit der Apache Webserver mittels PHP Shellkommandos ausführen darf, zB für Notaus
sudo visudo
und die Zeile ergänzen mit allen erlaubten Befehlen:
www-data ALL = NOPASSWD: /sbin/reboot, /sbin/halt, /sbin/shutdown, /usr/bin/gpio, /usr/bin/python
Samba installieren
Um im Netzwerk die Datein mit editieren zu können, brauchen wir Samba
sudo apt-get install samba samba-common-bin
sudo nano /etc/samba/smb.conf
Bei Bedarf die Workgroup auf die eigene ändern und folgende Zeilen anhängen:
security = user
[WWW_Freigabe]
path = /var/www/html
writeable = yes
guest ok = no
[root]
path = /
writable = yes
guest ok = no>
[grow]
path = /home/pi
writabel = yes
guest ok = no
Samba
Passwort setzten:
sudo smbpasswd -a pi
User Pi für das Webserververzeichniss Schreibrechte geben:
sudo chown -R pi:pi /var/www/html
Samba neu starten:
sudo /etc/init.d/samba restart
SPI Bus einrichten
Um analoge Signale zu empfangen braucht man einen Analog/Digital (AD) Wandler
Chip, zB MCP3008, der die Signale über den SPI Bus bereit stellt. Der Raspi
verfügt über 2 SPI-Busse.
Als erstes muss der Bus in der Raspi Configuration aktiviert werden:
sudo raspi-config
„8 Advanced Options“ -> „A6 SPI“ -> „Yes“.
sudo reboot
Treiberinstallation:
git clone git://github.com/doceme/py-spidev
cd py-spidev/
sudo python setup.py install
I2C Bus einrichten
Der Lichtsensor wird über den I2C Bus abgefragt, der entsprechende Pakete braucht
I2C-Toolkit fuer die Kommandozeile
sudo apt-get install i2c-tools
Python-Bibliothek fuer I2C
sudo apt-get install python-smbus
Fast Fertig
Somit ist die Grundinstallation des Rasperry Pi abgeschlossen.
Die Dateien des Webservers befinden sich in /var/www/html
Für die Pythondateien legen wir ein Arbeitsverzeichnis "grow" im Userverzeichniss Pi an mit
mkdir grow