Die Temperatur wird automatisch mit Raspberry Pi 3 gemessen und automatisch zur Anzeige auf den Server (Docker Python3 + Flasche + MySQL) hochgeladen!

Einführung

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!

Inhaltsverzeichnis

  1. Zweck
  2. Vorbereitung
  3. Umweltbau
  4. Funktionsprüfung
  5. Am Ende

1. Zweck

1-1. Vorschlag zum Erstellen eines Webservers mit Docker

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!

1-2. Herausforderungen beim Aufbau eines Servers in Raspeye

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.

  1. Ich weiß nicht, was das Problem verursacht hat.
  2. Komplizierte Installation und Konfiguration von Webserver und Datenbank
  3. Es ist schwierig, die Einstellungen des Webservers und des Datenbankservers zu wiederholen.

ラズパイ上にウェブサーバを構築する際の課題

  1. 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.

  2. 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.

  3. 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.

1-3 Mit Docker gelöst!

  1. 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!

  2. 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!

  3. 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!

1-4. Herausforderungen bei der Verwendung von Docker mit Raspeye

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!

1-5. Dieses Beispiel

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!

2. Vorbereitung

Wenn Sie Docker und Git nicht installiert haben, lesen Sie bitte den folgenden Artikel. Installieren Sie Docker und Git auf RaspberryPi3

3. Umweltbau

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! Bewegung

3-1. Bauverfahren

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. ブラウザで確認

3-2. Ordnerstruktur

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.

3-11 Schaltplan

デジタル温度センサで温度取得

4. Funktionsprüfung

Es ist endlich Betriebsprüfung.

4-1 Erfassen Sie die Temperatur mit einem digitalen Temperatursensor am Hauptteil von Raspai

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.

システム構成図

4-2 Der Webbrowser zeigt die in der Datenbank registrierte Temperatur an.

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

5. Am Ende

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!

Seitenverzeichnis

Raspberry Pi 3 Setup

Raspberry Pi 3-Installation → WLAN → Japanische Ein- / Ausgabe → Betrieb vom Mac

Erstellen Sie mit Docker eine Python + MySQL-Umgebung auf Raspberry Pi 3!

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!

Machen Sie einen in die Klimaanlage integrierten PC "airpi" mit Raspberry Pi 3!

Endlich ... Erstellen Sie einen Funkcontroller mit Python auf 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

Lass uns mit Raspberry Pi 3 und Python Record of Raspberry kämpfen

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!

Die Regeln konzentrierten sich auf die testgetriebene Entwicklung

Codierungsregeln "Schreiben wir sanften Code" (FuelPHP) Namensregeln "Freundlich zu sich selbst, teamfreundlich und unsichtbare Mitglieder nach 3 Monaten"

Entwicklung von Webanwendungen mit Docker + Python

Installieren Sie Python3 und verwandte Bibliotheken pip, virtualenv und Framework Django, Flasche, Flask unter CentOS auf Docker! Mit einer Docker-Datei, die diese zusammenfasst!

Einfach zu entwickelnde Umgebungskonstruktion (Docker + PHP)

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

Die Temperatur wird automatisch mit Raspberry Pi 3 gemessen und automatisch zur Anzeige auf den Server (Docker Python3 + Flasche + MySQL) hochgeladen!
Senden Sie die mit SensorTag gemessene Temperatur, Luftfeuchtigkeit usw. über Raspberry Pi 3 an Ambient und zeichnen Sie sie grafisch auf.
Endlich ... Erstellen Sie einen Funkcontroller mit Python auf Raspberry Pi 3! (Wenn der Magnet näher gebracht wird, bewegt sich der Motor und stoppt automatisch)
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Verwendung des digitalen 1-Draht-Temperatursensors DS18B20 mit Raspberry Pi von Python
Verwenden Sie den analogen Temperatursensor Raspberry Pi Python to TMP36 und den AD-Wandler MCP3008
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
Installieren Sie PyCall auf Raspberry PI und versuchen Sie, die GPIO-Bibliothek für Python von Ruby zu verwenden
Verwendung von Raspeye Relay Module Python
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Ausgabe auf "7 Segment LED" mit Python mit Raspberry Pi 3!
Aktualisieren Sie Raspberry Pi Python mit pyenv auf 3.7 oder höher
Verwenden Sie Python auf Raspberry Pi 3, um "Temperatur (mit A / D-Wandler)" zu erkennen!
Zugriff auf Google Spreadsheets Verwenden von Python mit Himbeer-Pi (für sich selbst)
Erstellen Sie eine Python-Umgebung und übertragen Sie Daten auf den Server
Messen und vergleichen Sie Temperaturen mit Raspberry Pi und generieren Sie automatisch Diagramme
So erhalten Sie die Temperatur vom SwitchBot-Thermo-Hygrometer mit Himbeer-Pi
Holen Sie sich das Wetter mit API und lassen Sie Raspberry Pi sprechen!
Erstellen von Raspberry Pi zum Lernen von Python und maschinellem Lernen (RaspberryPi4 & Buster-Version (RaspberryPi3 ist ebenfalls möglich))
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
So erhalten Sie mithilfe der Mastodon-API Follower und Follower von Python
Ich möchte Python GUI ausführen, wenn Raspberry Pi startet
Verwenden Sie Python auf Raspberry Pi 3, um die LED zu beleuchten (Hello World)
Raspberry Pi --1 - Zum ersten Mal (Schließen Sie einen Temperatursensor an, um die Temperatur anzuzeigen)
Endlich ... Erstellen Sie einen Funkcontroller mit Python auf Raspberry Pi 3! (Der Motor bewegt sich, während die Taste gedrückt wird.)
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