[PYTHON] Ich habe die Daten von Raspberry Pi an GCP gesendet (kostenlos)

Ich habe die Daten von Raspberry Pi an GCP gesendet (kostenlos)

Ich wollte einen Mechanismus erstellen, um Raspberry Pi-Daten in MySQL zu speichern und im Web zu überprüfen. Für diejenigen, die einen Server auf VPS einrichten und Daten austauschen möchten.

Entwicklungsumgebung

Über GCP

Abkürzung für Google Cloud Platform, einen von Google bereitgestellten Cloud-Computing-Dienst.

https://cloud.google.com/?hl=ja

Hier erfahren Sie, wie Sie GCP starten

https://cloud.google.com/gcp/getting-started/?hl=ja

Informationen zum Windows-Subsystem für Linux (WSL)

--Installieren Sie Ubuntu (keine Version angegeben) aus dem Microsoft Store ――Es scheint, dass die neueste Version automatisch aktualisiert wird.

Richten Sie einen Webserver ein

--Erstellen eines GCP-Projekts

https://cloud.google.com/free/docs/gcp-free-tier?hl=ja

scp ~/.ssh/[Öffentlicher Schlüssel] [Nutzername]@[IP des Übertragungszielservers]:~/.ssh/

--Installieren Sie apache2

sudo apt-get update
sudo apt-get install apache2 -y
curl http://[Externe IP]

--Firefall-Einstellungen (ufw Installation und Einstellungen)

#Aktivierung
sudo ufw enable
#TCP, das Sie verwenden/Untersuchen Sie den UDP-Port
sudo ufw status
#Auch mit nmap möglich
sudo nmap -sTU localhost
#Port freigeben (Registerregel)
sudo ufw allow [Portnummer, die Sie zulassen möchten]
#Regel löschen
sudo ufw status numbered
sudo ufw delete [number]
#Invalidierung
sudo ufw disable

DB-Konstruktion (MySQL)

sudo apt install mysql-server mysql-client
#Bestätigung des Servicestarts
sudo service mysql status
#MySQL-Initialisierung
sudo mysql_secure_installation
#Stellen Sie über die Konsole eine Verbindung zum MySQL-Server her
sudo mysql -u root -p
#Statusanzeige
mysql> status
#Datenbanklistenanzeige
mysql> show database;
#Benutzerlistenanzeige
mysql> select user, host from mysql.user;
#Bestätigung einer bestimmten Benutzerberechtigung (z)Benutzer: root,Hostname: localhost)
mysql> show grants for 'root'@'localhost';
#Ende
mysql> exit

https://www.yokoweb.net/2018/05/13/ubuntu-18_04-server-mysql/

sudo mysql
#Datenbank erstellen
mysql> create database [db_name]
mysql> show databases;
#Datenbank verschieben
mysql> use [db_name]
#Erstellen einer Tabelle (kein einziger Anstrich erforderlich)
mysql> create table [tbl_name]( id int(11) NOT NULL AUTO_INCREMENT, 
    -> ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    -> temp float NOT NULL,
    -> PRIMARY KEY(id)) ENGINE=MyISAM
#Bestätigung
mysql> show tables from [db_name];
mysql> show columns from [tbl_name];
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id    | int(11)   | NO   | PRI | NULL              | auto_increment              |
| ts    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| temp  | float     | NO   |     | NULL              |                             |
+-------+-----------+------+-----+-------------------+-----------------------------+
3 rows in set

http://zetcode.com/databases/mysqltutorial/storageengines/

Programm erstellen

PHP-Einstellungen

#Wenn es sich nicht um die neueste Version handelt, ist dies in Ordnung (die neueste Version ist Version 7)..3, im Fall von apt ver7.2)
sudo apt install php
<?php phpinfo(); ?>

Bestätigung des Zugriffs von PHP auf DB (MySQL)


<?php
try{
//Erstellen Sie ein Objekt der PDO-Klasse
$pdo = new PDO('mysql:host=localhost;dbname=[db_name];charset=utf8', '[Nutzername]', '[Passwort]', array(PDO::ATTR_EMULATE_PREPARES => false));
}catch(PDOException $e){
exit('Datenbankverbindung fehlgeschlagen.'.$e->getMessage());
}
//DB-Verarbeitung
switch ($_SERVER['REQUEST_METHOD']) {
    case 'GET':
        $st = $pdo->query("select * from [Tabellenname]");
        echo json_encode($st->fetchAll(PDO::FETCH_ASSOC));
        break;

    case 'POST':
        $data = json_decode(file_get_contents('php://input'), true);
        $st = $pdo->prepare("insert into [Tabellenname](ts,temp)values(:datetime,:temp)");
        $st->execute($data);
        header('Content-Type: application/json');
        echo json_encode("end");
        break;
}
?>

Datenübertragungsprozess von Raspberry Pi zu PHP (Python)

# coding: utf-8
import requests
import json
from datetime import datetime

def main():

    url = 'http://[Externe IP]/[Programmname].php'
    #Temperaturerfassungsprozess
    ...
    temp = #Wert

    data = {'datetime':datetime.now().strftime("%Y/%m/%d %H:%M:%S"),'temp':temp}
    #Codieren Sie Daten im JSON-Format
    print(json.dumps(data))
    #Senden Sie eine POST-Anfrage im JSON-Format(Inhalt, weil ich eine Antwort im Json-Stil möchte-Typenspezifikation)
    response = requests.post(url, json.dumps(data), headers={'Content-type': 'application/json'})    #Bei korrekter Rückgabe wird die Antwort ausgefüllt
    print(response.json())
    pass

if __name__ == '__main__':
    main()

Ich möchte Sensordaten gut nutzen und mich mit der Cloud verbinden ...

Recommended Posts

Ich habe die Daten von Raspberry Pi an GCP gesendet (kostenlos)
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe mit Raspberry Pi gesprochen
Ich möchte über die Verbindungsumgebung benachrichtigt werden, wenn RaspberryPi eine Verbindung zum Netzwerk herstellt
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Verwenden Sie Rasppie, um das Problem einer unzureichenden mobilen Wi-Fi-Verbindung zu lösen
[Ich habe den Raspberry Pi (1) berührt] Ich habe die grundlegenden Funktionen der Minecraft Pi Edition (Vorabversion 2015.5.23) zusammengefasst.
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, das Umfangsverhältnis mit 100 Millionen Stellen zu ermitteln
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Probieren Sie Progate Free Edition [Python I]
Ich möchte die Daten von League of Legends ② erhalten
Ich möchte das Erscheinungsbild von zabbix anpassen
Ich möchte League of Legends-Daten erhalten ①
Ich habe ein npm-Paket erstellt, um die ID der IC-Karte mit Raspberry Pi und PaSoRi zu erhalten
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
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Stellen Sie eine Verbindung zur Raspberry PI-Konsole her und zeigen Sie lokale IP- und SD-Informationen an
Ich habe die Beleuchtungsstärke des Raumes mit Raspberry Pi, Arduino und einem optischen Sensor getwittert
Ich habe Ruina von RPG Tsukuru 2000 ~ Die Geschichte der verlassenen Stadt ~ auf Raspberry Pi gespielt
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
So erstellen Sie einen Raspberry Pi, der die Tweets eines bestimmten Benutzers spricht
Ich möchte das Ausführungsergebnis von strace erfassen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
Verwendung von Raspeye Relay Module Python
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Ich möchte die Grundlagen von Bokeh vollständig verstehen
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich möchte die Sicherheit der SSH-Verbindung erhöhen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
[Erste Datenwissenschaft ⑥] Ich habe versucht, den Marktpreis von Restaurants in Tokio zu visualisieren
Ich habe versucht, die Laufdaten des Rennspiels (Assetto Corsa) mit Plotly zu visualisieren
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Ich habe versucht, die Entropie des Bildes mit Python zu finden
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, die Punktgruppendaten-DB der Präfektur Shizuoka mit Vue + Leaflet anzuzeigen
Ich möchte die von LINE an S3 gesendeten Fotos speichern
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Notieren Sie sich, was Sie in Zukunft mit Razpai machen möchten
Ich habe versucht, die Pi Console I / F von Mechatraxs Raspeye IoT Starter Kit "anyPi" zu verwenden.
Ich möchte Betriebsinformationen über die Yahoo-Route erhalten
Spielen Sie, um Slack mithilfe von AWS PaaS über Raspberry Pi3 über Umgebungsdaten von SensorTag zu informieren
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich habe versucht, die Daten des Fußballturniers der FIFA Fussball-Weltmeisterschaft Russland mit Fußball zu analysieren
Ich möchte Interrupts auf dem Raspberry Pi deaktivieren (≒ DI / EI)
So führen Sie die Exportfunktion des GCP-Datenspeichers automatisch aus
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren