[PYTHON] J'ai envoyé les données de Raspberry Pi à GCP (gratuit)

J'ai envoyé les données de Raspberry Pi à GCP (gratuit)

Je voulais créer un mécanisme pour stocker les données Raspberry Pi dans MySQL et les vérifier sur le Web. Pour ceux qui souhaitent mettre en place un serveur sur VPS et échanger des données.

Environnement de développement

À propos de GCP

Abréviation de Google Cloud Platform, un service de cloud computing fourni par Google.

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

Découvrez ici comment démarrer GCP

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

À propos du sous-système Windows pour Linux (WSL)

--Installez Ubuntu (aucune version spécifiée) à partir du Microsoft Store ――Il semble que la dernière version sera automatiquement mise à jour.

Configurer un serveur Web

--Création d'un projet GCP

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

scp ~/.ssh/[Clé publique] [Nom d'utilisateur]@[IP du serveur de destination du transfert]:~/.ssh/

--Installez apache2

sudo apt-get update
sudo apt-get install apache2 -y
curl http://[IP externe]
#Activation
sudo ufw enable
#TCP que vous utilisez/Examinez le port UDP
sudo ufw status
#Également possible avec nmap
sudo nmap -sTU localhost
#Port de sortie (règle d'enregistrement)
sudo ufw allow [Numéro de port que vous souhaitez autoriser]
#Supprimer la règle
sudo ufw status numbered
sudo ufw delete [number]
#Annulation
sudo ufw disable

Construction de bases de données (MySQL)

sudo apt install mysql-server mysql-client
#Confirmation du démarrage du service
sudo service mysql status
#Initialisation MySQL
sudo mysql_secure_installation
#Connectez-vous au serveur MySQL depuis la console
sudo mysql -u root -p

--Confirmation des informations utilisateur MySQL, etc.

#Affichage de l'état
mysql> status
#Affichage de la liste des bases de données
mysql> show database;
#Affichage de la liste des utilisateurs
mysql> select user, host from mysql.user;
#Confirmation de l'autorité utilisateur spécifique (ex)Utilisateur: root,Nom d'hôte: localhost)
mysql> show grants for 'root'@'localhost';
#Fin
mysql> exit

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

sudo mysql
#Créer une base de données
mysql> create database [db_name]
mysql> show databases;
#Déplacer la base de données
mysql> use [db_name]
#Créer une table (pas besoin d'une seule couche)
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
#Vérification
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/

Créer un programme

Préférences PHP

#S'il ne s'agit pas de la dernière version, c'est OK (la dernière est ver7).3, dans le cas d'apt ver7.2)
sudo apt install php
<?php phpinfo(); ?>

Confirmation d'accès de PHP à DB (MySQL)


<?php
try{
//Créer un objet de classe PDO
$pdo = new PDO('mysql:host=localhost;dbname=[db_name];charset=utf8', '[Nom d'utilisateur]', '[mot de passe]', array(PDO::ATTR_EMULATE_PREPARES => false));
}catch(PDOException $e){
exit('La connexion à la base de données a échoué.'.$e->getMessage());
}
//Traitement DB
switch ($_SERVER['REQUEST_METHOD']) {
    case 'GET':
        $st = $pdo->query("select * from [nom de la table]");
        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 [nom de la table](ts,temp)values(:datetime,:temp)");
        $st->execute($data);
        header('Content-Type: application/json');
        echo json_encode("end");
        break;
}
?>

Processus de transmission de données de Raspberry Pi à PHP (Python)

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

def main():

    url = 'http://[IP externe]/[nom du programme].php'
    #Processus d'acquisition de la température
    ...
    temp = #valeur

    data = {'datetime':datetime.now().strftime("%Y/%m/%d %H:%M:%S"),'temp':temp}
    #Encoder les données au format JSON
    print(json.dumps(data))
    #Envoyer une requête POST au format JSON(Contenu parce que je veux une réponse de style json-spécification de type)
    response = requests.post(url, json.dumps(data), headers={'Content-type': 'application/json'})    #Si renvoyé correctement, la réponse sera renseignée
    print(response.json())
    pass

if __name__ == '__main__':
    main()

Je veux faire bon usage des données des capteurs et me connecter au cloud ...

Recommended Posts

J'ai envoyé les données de Raspberry Pi à GCP (gratuit)
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai parlé à Raspberry Pi
Je souhaite être informé de l'environnement de connexion lorsque RaspberryPi se connecte au réseau
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
Utilisez Rasppie pour résoudre le problème de connexion Wi-Fi mobile insuffisante
[J'ai touché le Raspberry Pi (1)] J'ai résumé les opérations de base de Minecraft Pi Edition (2015.5.23 pré-version)
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé de trouver le rapport de circonférence par 100 millions de chiffres
J'ai essayé de corriger la forme trapézoïdale de l'image
Essayez Progate Free Edition [Python I]
Je veux obtenir les données de League of Legends ②
Je souhaite personnaliser l'apparence de zabbix
Je veux obtenir les données de League of Legends ①
J'ai fait un package npm pour obtenir l'ID de la carte IC avec Raspberry Pi et PaSoRi
Lisez les données du lecteur NFC connecté à Raspberry Pi 3 avec Python et envoyez-les à openFrameworks avec OSC
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
Connectez-vous à la console Raspberry PI et affichez les informations IP et SD locales
J'ai tweeté l'éclairement de la pièce avec Raspberry Pi, Arduino et un capteur optique
J'ai joué à Ruina du RPG Tsukuru 2000 ~ The Story of the Abandoned City ~ sur Raspberry Pi
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
Comment faire un Raspberry Pi qui parle les tweets d'un utilisateur spécifié
Je veux grep le résultat de l'exécution de strace
J'ai essayé de résumer la forme de base de GPLVM
Visualisons la pièce avec tarte aux râpes, partie 1
J'ai essayé de prédire le match de la J League (analyse des données)
Comment utiliser Raspeye Relay Module Python
Prenez la valeur du thermo-hygromètre SwitchBot avec Raspberry Pi
Changer les valeurs du thermo-hygromètre Bot avec Raspberry Pi
Je veux bien comprendre les bases de Bokeh
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de classer les voix des acteurs de la voix
Je souhaite augmenter la sécurité de la connexion SSH
J'ai essayé de résumer les opérations de chaîne de Python
[First data science ⑥] J'ai essayé de visualiser le prix du marché des restaurants à Tokyo
J'ai essayé de visualiser les données de course du jeu de course (Assetto Corsa) avec Plotly
Je voulais juste extraire les données de la date et de l'heure souhaitées avec Django
J'ai essayé de trouver l'entropie de l'image avec python
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé d'afficher les données du groupe de points DB de la préfecture de Shizuoka avec Vue + Leaflet
Je souhaite enregistrer les photos envoyées par LINE vers S3
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
Notez ce que vous voulez faire à l'avenir avec Razpai
J'ai essayé d'utiliser la console Pi I / F du kit de démarrage Raspeye IoT de Mechatrax "anyPi"
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
Jouez pour informer Slack des données environnementales de SensorTag à l'aide d'AWS PaaS via Raspberry Pi3
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai essayé d'analyser les données du tournoi de football de la Coupe du monde de football en Russie avec l'action de football
Je souhaite désactiver les interruptions sur le Raspberry Pi (≒ DI / EI)
Comment exécuter automatiquement la fonction d'exportation de GCP Datastore
[Python] J'ai essayé de visualiser la relation de suivi de Twitter