Mein Name ist Ryosuke Kamei und ich bin ein IT-Berater, der auf der Idee der "sanften IT" basiert! Meine Hauptaufgabe ist vom vorgelagerten Prozess der Anforderungsanalyse und Anforderungsdefinition bis zum Entwicklungsmanagement, aber ich entwickle ein Web-System privat! Im Rahmen unserer freundlichen IT-Aktivitäten werden wir die mit "Raspberry Pi 3" (allgemein bekannt als "Raspberry Pi 3") erstellten Waren- und Serviceprogramme vorstellen, die die Philosophie haben, "kostengünstige PCs bereitzustellen, die für Bildungszwecke programmiert werden können"!
Dieses Mal werde ich ein Beispiel für die Verwendung von Docker vorstellen, das sich für den Razpai Contest 2016 beworben hat! Dies ist ein Beispiel, das die Temperatur automatisch jede Minute misst, sie in der Datenbank (MySQL) von Docker registriert und es Ihnen ermöglicht, die Temperatur mit einem Browser zu durchsuchen!
Die Datei wird auf Github veröffentlicht. Wenn Sie also interessiert sind, verwenden Sie sie bitte!
Für diejenigen, die Raspetorte mögen "Ich bin gut in elektronischer Arbeit, aber ich bin mir nicht sicher, wann sie online veröffentlicht wird ..." Ich denke, es gibt viele Leute, die das sagen.
Es ist möglich, einen Webserver auf Raspai zu erstellen, aber die Installation eines Anwendungsservers, Datenbankservers usw. ist mühsam, ärgerlich und selbst wenn ich es versuche, funktioniert es nicht ... Wird der Aufbau von Webservern als hoher Schwellenwert angesehen?
Um es jedem so einfach wie möglich zu machen, einen Webserver zu erstellen, werden wir ein Beispiel für den Aufbau eines Webservers mit weniger Aufwand mithilfe der Containertechnologie Docker vorstellen!
Da das Betriebssystem von Raspai das Linux-basierte Betriebssystem "Raspbian" ist, können Sie Apache auf dem Webserver und MySQL auf dem Datenbankserver installieren. Es gibt jedoch auch die folgenden Probleme.
Ich weiß nicht, was das Problem verursacht hat. Bei elektronischen Arbeiten ist es schwierig, das Problem zu isolieren, wenn ein Problem auftritt, da das System wie die Temperaturerfassung und der Mechanismus wie der Webserver auf demselben Computer aufgebaut sind.
Komplizierte Installation und Konfiguration von Webserver und Datenbank Es ist möglich, den Webserver Apache und den Datenbankserver MySQL zu installieren, die Installation und Konfiguration dauert jedoch einige Zeit. Ich bin sicher, einige von Ihnen haben es erlebt, aber wenn Sie sich nicht richtig Notizen machen, kennen Sie möglicherweise nicht die richtigen Einstellungen oder arbeiten gerade.
Es ist schwierig, die Einstellungen des Webservers und des Datenbankservers zu wiederholen. Wenn Sie Ihren Webserver oder Ihre Datenbank neu konfigurieren möchten, müssen Sie sich Gedanken darüber machen, was zu tun ist, wenn die Änderung Ihrer vorhandenen Umgebung nicht funktioniert.
Ich weiß nicht, was das Problem verursacht hat. Docker verwendet eine Technologie namens Container. Starten Sie ein "virtuelles Betriebssystem" auf dem Raspelkuchen. Die Rollen sind klar zwischen dem Anwendungscontainer und dem Datenbankcontainer aufgeteilt, und das Betriebssystem der Raspeye-Haupteinheit ist auf die Kommunikation mit Hardware wie Temperatursensoren, Feuchtigkeitssensoren und Beleuchtungsstärkesensoren spezialisiert. Wenn ein Problem auftritt, ist es einfacher, das Problem bei der Suche nach der Ursache zu isolieren!
Komplizierte Installation und Konfiguration von Webserver und Datenbank Mit Docker können Sie Bilddateien mit schwierigen Einstellungen kostenlos verwenden, wenn Sie eine problematische Middleware-Installation durchführen! Die Bilddateien reichen von offiziellen bis hin zu fein angepassten und können in Kombination zum Zusammenbau eines Kunststoffmodells verwendet werden!
Es ist schwierig, die Einstellungen des Webservers und des Datenbankservers zu wiederholen. Mit Docker können Sie Installationen und Einstellungen in einer einzigen Datei kombinieren. Wenn Sie in den Einstellungen einen Fehler machen, experimentieren Sie in einer anderen Umgebung, die auf dieser Datei basiert. Wenn es so oder so nicht funktioniert, können Sie den Inhalt wegwerfen und die gut gemachte Konfigurationsdatei abrufen und es erneut versuchen. Docker kann mithilfe von Bilddateien parallelisiert werden (jederzeit und überall dieselbe Umgebung erstellen), sodass die Portierung reibungslos durchgeführt werden kann!
Docker hat auch seine Herausforderungen. Typische Server haben eine x86_64-Architektur, und die meisten Docker Hub-Images sind auch x86_64-Architektur-Images. Es gibt nur wenige Bilder der armv7l-Architektur von Raspberry Pi, und es gibt noch wenig Informationen zu Raspberry Pi + Docker.
In dieser Ausgabe stellen wir ein Beispiel für die Verwendung von Docker auf Himbeere vor, das auf dieser Situation basiert!
Festpunktbeobachtung der Temperatur, Aufzeichnung in der Datenbank und Surfen auf dem Webserver!
① Mit einem digitalen Temperatursensor am Hauptteil von Raspai erfassen
② Die erfasste Temperatur wird vom Programm über die API in der Datenbank registriert.
③ Der Webbrowser kann die in der Datenbank registrierte Temperatur anzeigen.
Diese befinden sich auf meinem Github und können mit relativ einfachen Schritten erstellt werden. Dies ist einer der Vorteile von Docker.
Umweltkonstruktion wird in "3. Umwelt bauen" erklärt!
Wenn Sie Docker und Git nicht installiert haben, lesen Sie bitte den folgenden Artikel. Installieren Sie Docker und Git auf RaspberryPi3
Verwenden Sie Docker sofort, um Anwendungscontainer, Datenbankcontainer und Datencontainer zu erstellen!
Siehe den Artikel unten für Details! Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung![Einfache Konstruktion]
Es gibt auch eine Videoversion!
Mit git klonen und die Datei herunterladen
$ git clone [email protected]:RyosukeKamei/rpi-python-bottle.git
Wechseln Sie in den geklonten Ordner
$ cd rpi-python-bottle
docker-Erstellen und starten Sie einen Datencontainer und einen Datenbankcontainer mit compose
$ docker-compose up -d
Überprüfen Sie das Bild
$ docker images
Überprüfen Sie den Behälter
$ docker ps -a
Melden Sie sich beim Datenbankcontainer an
$ docker exec -it rpi-python-bottle-db bash
Geben Sie Beispieltabelle und Daten ein
# mysql -u bottle -pbottle measurement < /docker-entrypoint-initdb.d/create_table.sql
Datenbankcontainer abmelden
# (Contrl + p, Control + q)
Anwendungscontainer erstellen
$ docker build -t hypriot/rpi-python .
Starten Sie den Anwendungscontainer und melden Sie sich an
$ docker run --name rpi-python-bottle-app -it hypriot/rpi-python bash
Starten Sie den Server
# /usr/local/bin/python3 /home/bottle/server.py
Wenn Sie es in einem Browser öffnen, wird es wie folgt angezeigt.
Wenn Sie git clone, sieht die Ordnerstruktur wie folgt aus!
3-3. /app/server.py
In der Datenbank und in der API registrierte Temperaturdaten für die Datenregistrierung.
@route('/list') Erhalten Sie die Temperaturdaten mit der SQL SELECT-Anweisung und zeigen Sie sie in einer Liste an.
@route('/input_temperature') Empfängt Temperaturdaten, generiert und registriert eine SQL INSERT-Anweisung. Formatbeispiel: http://172.17.0.4:8080/input_temperature?server_id=1&temperature=29&user_id=1
server_id: ID des Servers (fester Wert im Beispiel unter Berücksichtigung der zukünftigen Erweiterbarkeit) Temperatur: Vom Temperatursensor erfasste Temperatur user_id: Benutzer-ID (fester Wert im Beispiel unter Berücksichtigung der zukünftigen Erweiterbarkeit)
Details finden Sie in den Kommentaren beginnend mit #.
/app/server.py
#Flaschenbibliothek
from bottle import route, run, request
#MySQL-Treiber ist MySQL.connector
import mysql.connector
#Ergänzung
#Wenn Sie eine Vorlage einfügen, ist der HTML-Code tatsächlich wunderschön.
#Dieser Bereich wird später sein ...
#Die IP-Adresse des Hosts lautet$ docker inspect {Name des Datenbankcontainers}Finden Sie es heraus in
#MySQL-Benutzer, Passwörter und Datenbanken sind Docker-compose.Was wurde mit yml eingestellt
# user : MYSQL_USER
# password : MYSQL_PASSWORD
# database : MYSQL_DATABASE
connector = mysql.connector.connect (
user = 'bottle',
password = 'bottle',
host = '172.17.0.3',
database = 'measurement'
)
@route('/list')
def list():
#Temperatur anzeigen
cursor = connector.cursor()
cursor.execute("select `id`, `temperature`, `careted_at` from temperatures")
disp = "<table>"
#Header
disp += "<tr><th>ID</th><th>Temperatur</th><th>Registrierungsdatum</th></tr>"
#Teil auflisten
for row in cursor.fetchall():
disp += "<tr><td>" + str(row[0]) + "</td><td>" + str(row[1]) + "</td><td>" + str(row[2]) + "</td></tr>"
disp += "</table>"
cursor.close
return "Erhalten von DB"+disp
@route('/input_temperature')
def input_temperature():
#Temperatur eingeben
cursor = connector.cursor()
cursor.execute("INSERT INTO `temperatures` (`server_id`, `temperature`, `careted_at`, `careted_user`, `updated_at`, `updated_user`) VALUES (" + request.query.server_id + ", " + request.query.temperature + ", NOW(), " + request.query.user_id + ", NOW(), " + request.query.user_id + ")")
#verpflichten
connector.commit();
cursor.close
return "OK"
#Schließen Sie den Stecker
connector.close
#Serverstart
run(host='0.0.0.0', port=8080, debug=True, reloader=True)
3-4. digital_temperature_sensor_for_api.py Jede Minute wird die Temperatur vom Temperatursensor über I2C abgerufen und auf die Datenregistrierungs-API zugegriffen.
Beispiel für einen API-Wert http://172.17.0.4:8080/input_temperature?server_id=1&temperature=29&user_id=1
digital_temperature_sensor_for_api.py
#Vorbereitung
# $ sudo apt-get install libi2c-dev
# $ sudo sh -c 'echo "options i2c_bcm2708 combined=1" >> /etc/modprobe.d/i2c.conf'
#Bibliothek, die GPIO steuert
import wiringpi
#Timer-Bibliothek
import time
#Rufen Sie die Bibliotheken auf, die zum Lesen vom I2C-Gerät benötigt werden
import os
import struct
#URL-Zugriff
import urllib.request
#Erstellen Sie eine Instanz von I2C
wiringpi.wiringPiSetup()
i2c = wiringpi.I2C()
#I2C-Einstellungen
#Geben Sie die I2C-Adresse des zu kommunizierenden Geräts an
temperture_dev = i2c.setup(0x48)
#Holen Sie sich 16-Bit-Daten für die Temperatur
#Andere Auf 0x03 setzen
i2c.writeReg8(temperture_dev, 0x03, 0x80)
while True:
#Lesen Sie 2 Byte Temperatursensor
temperture_data = struct.unpack('2B', os.read(temperture_dev, 2))
#Der Wert ist in 2 Bytes unterteilt, kombinieren Sie sie also zu einem.
temperture = ( ( temperture_data[0] << 8 ) + temperture_data[1] )
#Zahlen in negative Werte umwandeln
if ( temperture_data[0] >= 0x80 ):
temperture = temperture - 65536
#Berechnen Sie die Temperatur, indem Sie den erfassten Wert durch 128 teilen
temperture = temperture / 128
#Temperaturanzeige
print ( "Temperatur" , temperture , "C" )
response = urllib.request.urlopen('http://172.17.0.4:8080/input_temperature?server_id=1&temperature=' + str(temperture) + '&user_id=1')
data = response.read()
print ( "Serverantwort: ", data )
#Jede Minute
time.sleep(60)
3-5. /docker/mysql/my.cnf Dies ist eine japanische Datei für MySQL. Da es dynamisch eingestellt ist, werde ich eine tiefe Erklärung weglassen.
/docker/mysql/my.cnf
[mysqld]
innodb_strict_mode
innodb_file_format = Barracuda
innodb_file_per_table
innodb_large_prefix = 1
character-set-server=utf8mb4
skip-character-set-client-handshake
max_allowed_packet = 32m
skip-networking = 0
[client]
default-character-set=utf8mb4
3-6. docker-compose.yml Verwalten Sie Datenbankcontainer und Datencontainer zentral.
Siehe den Artikel unten für Details! Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung![Einfache Konstruktion]
3-7. Dockerfile Dies ist die Konfigurationsdatei für den Anwendungscontainer.
Weitere Informationen finden Sie im folgenden Artikel! Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung![Einfache Konstruktion]
3-8. /initdb.d/create_table.sql SQL zum Registrieren der Tabellendefinition und der Anfangsdaten für die Betriebsprüfung. Zur Erstellungszeit wird es mit Befehlen ausgeführt.
sql:/initdb.d/create_table.sql
USE measurement;
CREATE TABLE `temperatures` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`server_id` int(11) NOT NULL,
`temperature` int(11) NOT NULL,
`careted_at` datetime NOT NULL,
`careted_user` int(11) NOT NULL,
`updated_at` datetime NOT NULL,
`updated_user` int(11) NOT NULL,
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `temperatures`
(`id`, `server_id`, `temperature`, `careted_at`, `careted_user`, `updated_at`, `updated_user`)
VALUES
(1, 1, 29, NOW(), 1, NOW(), 1);
3-9. README.md Dies ist eine README-Datei, die automatisch von Git generiert wird. Es hat nichts mit der Operation zu tun. (Es wäre schön, es etwas sorgfältiger zu schreiben ...)
3-10. /vim/python.vim Bei Verwendung von vim im Anwendungscontainer stehen praktische Einstellungen zum Schreiben von Python zur Verfügung. Dadurch wird das Anwendungsimage beim Erstellen automatisch erstellt.
Es ist endlich Betriebsprüfung.
In Raspeye befindet sich eine Datei mit dem Namen "digital_temperature_sensor_for_api.py" in dem von git clone erstellten Ordner. Starten Sie sie also.
Holen Sie sich die Temperatur
$ cd {Git geklont Ordner}/rpi-python-bottle
$ sudo python3 digital_temperature_sensor_for_api.py
Die Temperatur wird wie folgt erhalten (das Bild hat ein Argument, wird aber ignoriert).
Die erfasste Temperatur wird vom Programm über die API in der Datenbank registriert.
Wenn Sie mit Raspeyes Browser auf "http://172.17.0.4:8080/list" zugreifen, wird die folgende Anzeige angezeigt!
/vim/python.vim
setl expandtab
setl tabstop=4
setl shiftwidth=4
setl softtabstop=0
autocmd BufWritePre * :%s/\s\+$//ge
setlocal textwidth=80
Ich habe diesmal einen Temperatursensor verwendet, aber wenn Sie einen Beleuchtungsstärkesensor verwenden, der die Helligkeit misst, und einen Feuchtigkeitssensor, der die Feuchtigkeit misst, können Sie Beleuchtungsstärke und Feuchtigkeit messen!
Wenn Sie die Temperatur, Beleuchtungsstärke und Luftfeuchtigkeit von einem entfernten Ort aus sehen müssen, können Sie dies tun! Wenn es noch etwas gibt, das nützlich erscheint, würde ich es gerne anwenden!
Raspberry Pi 3-Installation → WLAN → Japanische Ein- / Ausgabe → Betrieb vom Mac
Docker auf RaspberryPi3 installieren Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung![Einfache Konstruktion] Erstellen Sie mit Docker auf RaspberryPi3 eine Python + Flasche + MySQL-Umgebung![Versuch und Irrtum]
Machen Sie einen in die Klimaanlage integrierten PC "airpi" mit Raspberry Pi 3!
Motor bewegt sich beim Drücken der Taste Motor bewegt sich, während der Magnet näher gebracht wird Der Motor bewegt sich, wenn der Magnet näher gebracht wird und stoppt automatisch
Programmieren mit Node-RED-Programmieren mit Raspberry Pi 3 und normaler Programmierung Beleuchten Sie die LED mit Python auf Raspberry Pi 3 (Hello World) Schalterstatus mit Raspberry Pi 3 erkennen Führen Sie einen Servomotor mit Python auf Raspberry Pi 3 aus Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3! Erkennen Sie den Schiebeschalter mit Python auf Raspberry Pi 3! Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3! Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3! Raspberry Pi 3 verwendet Python, um den Summer zu ertönen! Analoge Signale mit A / D-Wandler mit Python auf Raspberry Pi 3 erkennen! Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3! Ermitteln Sie "Temperatur (mit A / D-Wandler)" mit Python auf Raspberry Pi 3! Ausgabe auf "7 Segment LED" mit Python auf Raspberry Pi 3! Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten! Verwenden Sie Python auf Raspberry Pi 3 und schalten Sie die LED ein, wenn es dunkel wird!
Codierungsregeln "Schreiben wir sanften Code" (FuelPHP) Namensregeln "Freundlich zu sich selbst, teamfreundlich und unsichtbare Mitglieder nach 3 Monaten"
PHP-Umgebung + Eclipse mit Docker mit Apache verknüpfen Erstellen einer PHP-Entwicklungsumgebung für Kraftstoff mit Docker Erstellen eines CRUD-Skeletts mit den Anfangseinstellungen der FuelPHP-Entwicklungsumgebung mit Docker und Scaffold Migration der FuelPHP-Datenbank
Recommended Posts