[JAVA] Représentez graphiquement les informations du capteur de Raspberry Pi et préparez un environnement qui peut être vérifié avec un navigateur Web

introduction

"Introduction à Raspberry Pi en Java" de Rick Telecom est l'un des rares (ou seuls?) Livres d'introduction basés sur Java sur Raspberry Pi. Vers la fin de ce livre, je vais vous montrer comment enregistrer en continu les informations du capteur de température connecté au Raspberry Pi dans la base de données et les afficher sous forme de graphique sur le navigateur Web d'autres PC et smartphones.

Pour ce faire, nous utilisons MySQL comme SGBDR, MySQL Connecter / J comme interface avec Java, Tomcat comme serveur Web et JFreeChart comme outil graphique. Cependant, la date de publication de ce livre était décembre 2016 et maintenant, même si vous essayez d'installer ou de configurer ces packages comme décrit dans le livre, diverses choses inattendues se produiront.

J'ai donc fait des recherches et construit l'environnement que vise ce livre.

Version de l'environnement / du logiciel utilisée cette fois

Raspberry Pi 3 Model B Raspbian v2.7.0 Java 1.8.0_65 Pi4J 1.1 Samba 4.5.12 Tomcat 9.0.6 MySQL 15.1 Distrib 10.1.23 MySQL Connecter/J 5.1.46 JFreeChart 1.0.19

Mise en garde

Installation et configuration de Raspbian

Installation

Cette fois, j'ai installé à partir de NOOBS. J'ai téléchargé Raspbian à partir de TÉLÉCHARGEMENTS sur le [site officiel] de Raspberry Pi (https://www.raspberrypi.org/), mais c'était si lent que j'ai utilisé le site miroir suivant (cela a encore pris environ 2 heures). Cette fois, j'ai utilisé la v2.7.0 publiée le 14 mars 2018.

http://ftp.jaist.ac.jp/pub/raspberrypi/NOOBS/images/

Extrayez le fichier téléchargé (NOOBS_v2_7_0 .zip), copiez tous les fichiers créés sur la carte microSD formatée telle quelle, insérez-la dans la fente pour carte du Raspberry Pi et démarrez l'installation. Si nécessaire, cliquez sur l'icône Réseaux Wifi sur l'écran initial de NOOBS et définissez le LAN sans fil.

Réglage

Tous les travaux ultérieurs sont effectués par l'utilisateur pi.

Modernisation du système

Une fois l'installation terminée et Raspbian démarré, entrez la commande suivante à partir de LXTerminal pour actualiser votre système.

sudo apt-get update
sudo apt-get upgrade

Paramètres de configuration du Raspberry Pi

Cliquez sur l'icône de menu en haut à gauche de l'écran GUI-sélectionnez "Préférences" - "Configuration Raspberry Pi" pour afficher le panneau de configuration Raspberry Pi. Cette fois, j'ai défini ce qui suit.

Catégorie Élément de réglage: valeur de réglage
System Mot de passe: facultatif
Underscan:Disable
Interface SSH:Enable
SPI:Enable
I2C:Enable
Localisation - Locale Country:US (United States)
Localisation - Timezone Area:Japan
Localisation - Keyboard Country:Japan
Variante: le clavier que vous utilisez
Localisation - WiFi Country Country:JP Japan

Lorsque vous appuyez sur le bouton OK, il vous sera demandé de redémarrer le système, mais ici, ne redémarrez pas et continuez à définir les paramètres suivants.

Changer le mot de passe root

sudo passwd root

Adresse IP fixe

Modifiez /etc/dhcpcd.conf.

sudo nano /etc/dhcpcd.conf

Ajoutez ce qui suit à ce fichier (spécifiez l'adresse IP, etc. en fonction de votre environnement).

interface wlan0      #Eth0 pour LAN filaire
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

Ceci termine les paramètres Raspbian. Redémarrez maintenant le système une fois.

sudo reboot

Installation de Pi4J

Pi4J est un package pour contrôler GPIO à partir de Java. Entrez la commande suivante pour obtenir et exécuter le script d'installation.

curl -s get.pi4j.com | sudo bash

Les fichiers de classe de package sont copiés dans / opt / pi4j / lib. Le site officiel de Pi4J contient des documents et des échantillons.

Site Web officiel Pi4J

Après avoir terminé les paramètres jusqu'à présent, il devrait être possible de contrôler les composants électroniques et les capteurs connectés à GPIO à l'aide de Java, mais à partir d'aujourd'hui (avril 2018), Wiring Pi, qui est la base du contrôle de GPIO. Ne prend pas en charge le dernier firmware (noyau), donc lorsque j'exécute le programme, il se termine avec le message d'erreur suivant.

Unable to determine hardware version. I see: Hardware : BCM2835

Par conséquent, pour que le programme fonctionne normalement, rétrogradez le micrologiciel avec la commande suivante (un redémarrage est nécessaire).

sudo rpi-update 52241088c1da59a359110d39c1875cda56496764

(Article de référence) Remarques lorsqu'une erreur se produit dans WiringPi

Installation et configuration de Samba (facultatif)

Bien que cela ne soit pas obligatoire, il est utile d'installer Samba afin que les fichiers du Raspberry Pi puissent être partagés avec d'autres PC.

sudo apt-get update
sudo apt-get install samba

Modifiez /etc/samba/smb.conf.

sudo nano /etc/samba/smb.conf

À la fin de ce fichier, ajoutez par exemple: Dans cet exemple, le nom de partage est pi et les fichiers sous / home / pi sont lus et écrits en tant qu'utilisateur pi.

[pi]
path = /home/pi
read only = No
guest ok = Yes
force user = pi

Après avoir enregistré le fichier ci-dessus, redémarrez le service.

sudo service smbd restart

Assurez-vous que le Raspberry Pi est reconnu par l'Explorateur Windows, etc., et que le répertoire défini est visible en tant que dossier.

samba.PNG

Si vous ne trouvez pas le Raspberry Pi, essayez de spécifier le nom d'hôte et le nom de partage directement dans la partie adresse de l'Explorateur, comme indiqué ci-dessous.

\\RASPBERRYPI\pi

(Article de référence) Installation, configuration et connexion à Samba

Installation et configuration de Tomcat

Installation

Téléchargez le package Tomcat depuis le Site officiel. Cliquez sur le lien Tomcat 9.0 sous Télécharger sur le côté gauche de la page d'accueil, puis cliquez sur tar.gz dans Binary Distributins Core pour télécharger le fichier du package.

Extrayez le fichier téléchargé (apache-tomcat-9.0.6.tar.gz) avec la commande suivante.

tar xzvf apache-tomcat-9.0.6.tar.gz

Déplacez le fichier apache-tomcat-9.0.6 décompressé, avec le répertoire, directement sous le répertoire personnel de pi.

mv apache-tomcat-9.0.6 ~

Réglage

Configurez l'utilisateur pour accéder à l'écran de gestion de Tomcat. L'écran d'administration est accessible depuis l'écran d'accueil de Tomcat (voir ci-dessous pour savoir comment accéder à l'écran d'accueil), mais cela ne signifie pas que vous ne pouvez pas du tout utiliser Tomcat.

Enregistrez l'utilisateur pour les fichiers suivants.

nano ~/apache-tomcat-9.0.6/conf/tomcat-users.xml

Ajoutez ce qui suit dans la balise \ <tomcat-users >. Spécifiez le contenu que vous souhaitez définir respectivement pour le nom d'utilisateur et le mot de passe.

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="pi" password="raspberry" roles="manager-gui,admin-gui"/>

Par défaut, l'écran d'administration n'est accessible que localement. Si vous souhaitez accéder aux écrans État du serveur et Gestionnaire d'applications Web Tomcat à partir d'autres ordinateurs parmi les écrans de gestion, modifiez le fichier de paramètres suivant.

nano ~/apache-tomcat-9.0.6/webapps/manager/META-INF/context.xml

Dans allow dans la balise \ <Valve >, entrez l'adresse IP pour autoriser l'accès en termes canoniques.

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

Par exemple, si vous souhaitez accéder à partir de l'adresse IP 192.168.1.xxx, remplacez la partie expression régulière comme suit. 192 \ .168 \ .1 \. \ D + est ajouté avec | (ou).

allow="127\.\d+\.\d+\.\d+|192\.168\.1\.\d+|::1|0:0:0:0:0:0:0:1"

Pour l'écran de gestion de Tomcat Virtual Host Manager, modifiez les fichiers suivants de la même manière.

nano ~/apache-tomcat-9.0.6/webapps/host-manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|192\.168\.1\.\d+|::1|0:0:0:0:0:0:0:1" />

Paramètres de démarrage automatique

Configurez Tomcat pour qu'il démarre automatiquement lorsque vous démarrez Raspberry Pi. Auparavant, il était démarré avec init.d, mais la version actuelle de Raspbian recommande d'utiliser systemd.

Créez un nouveau fichier d'unité /etc/systemd/system/tomcat.service pour Tomcat.

sudo nano /etc/systemd/system/tomcat.service

Décrivez le contenu suivant de ce fichier. Si vous voulez que l'utilisateur d'exécution soit autre chose que pi, remplacez les spécifications Utilisateur et Groupe dans la section [Service].

[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target
ConditionPathExists=/home/pi/apache-tomcat-9.0.6/bin/

[Service]
User=pi
Group=pi
Type=oneshot
Restart=no
PIDFile=/home/pi/apache-tomcat-9.0.6/tomcat.pid
RemainAfterExit=yes
ExecStart=/home/pi/apache-tomcat-9.0.6/bin/startup.sh
ExecStop=/home/pi/apache-tomcat-9.0.6/bin/shutdown.sh
ExecReload=/home/pi/apache-tomcat-9.0.6/bin/shutdown.sh;/home/pi/apache-tomcat-9.0.6/bin/startup.sh

[Install]
WantedBy=multi-user.target

Après avoir créé le fichier, définissez le propriétaire et les droits d'accès du fichier (je pense que c'est le cas même si vous ne le modifiez pas).

sudo chown root:root /etc/systemd/system/tomcat.service
sudo chmod 644 /etc/systemd/system/tomcat.service

Utilisez les commandes suivantes pour démarrer / arrêter les services et définir le démarrage automatique en tant que démon. Puisque l'autorité racine est requise sauf pour la commande de confirmation, ajoutez sudo au début et exécutez-le.

une fonction commander
Confirmation du statut d'inscription systemctl daemon-reload
systemctl list-unit-files --type=service
Commencez systemctl start tomcat.service
Arrêtez systemctl stop tomcat.service
Redémarrer systemctl restart tomcat.service
Vérifiez l'état systemctl status tomcat.service
Spécification de démarrage automatique Demon systemctl enable tomcat.service
Annulation automatique du démarrage démon systemctl disaable tomcat.service
Vérifiez le journal journalctl -u tomcat.service

Après avoir confirmé qu'il a été correctement enregistré, démarrez le service.

sudo systemctl daemon-reload
systemctl list-unit-files --type=service

sudo systemctl start tomcat.service

Après avoir lancé le service, spécifiez l'URL suivante et vérifiez que la page d'accueil Tomcat s'affiche depuis votre navigateur Web.

http://[adresse IP ou localhost]:8080/

![tomcat.PNG](https://qiita-image-store.s3.amazonaws.com/0/242156/9391a8ec-f1b1-90a9-01f9-9bc414758ecd.png)

Lorsque la page d'accueil s'affiche correctement, activez le démarrage automatique avec la commande suivante.

sudo systemctl enable tomcat.service
systemctl list-unit-files --type=service ・ ・ ・ Confirmer activé avec cette commande

(Article de référence) Installer Tomcat 8 sur CentOS 7 et définir le démarrage automatique

Installation et configuration de MySQL

Installez MySQL, l'un des systèmes de base de données relationnelle, avec la commande suivante.

sudo apt-get install mysql-server

Auparavant, les utilisateurs généraux tels que pi pouvaient accéder à MySQL en spécifiant un mot de passe avec la commande mysql -u root -p, mais la méthode d'authentification a changé et l'utilisateur root enregistré pour la première fois avec MySQL est le système d'exploitation. C'est une méthode d'authentification liée au compte.

Étant donné que la connexion utilisant TCP comme MySQL Connecter / J que nous allons introduire cette fois doit être une authentification par mot de passe, nous enregistrerons ici l'utilisateur pi dans MySQL par authentification par mot de passe.

sudo mysql -u root
mysql> USE mysql;
mysql> CREATE USER 'pi'@'localhost' IDENTIFIED BY 'raspberry';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'pi'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

Vous pouvez saisir des parties en minuscules écrites en majuscules. Spécifiez le mot de passe en insérant "User to register '@' localhost '" après USER dans l'instruction CREATE et "'" après IDENTIFIED BY. En outre, les instructions GRANT et FLUSH accordent à l'utilisateur pi des autorisations sur toutes les bases de données.

Enfin, redémarrez le service MySQL.

sudo service mysql restart

Accédez à MySQL avec la commande suivante. Si vous êtes connecté en tant qu'utilisateur pi, vous pouvez omettre "-u pi". Il vous sera demandé un mot de passe, alors spécifiez le mot de passe que vous avez défini ci-dessus.

mysql -u pi -p

Les articles suivants seront utiles pour les instructions SQL fréquemment utilisées.

(Article de référence) Commande Mysql

Installer MySQL Connector / J

Il s'agit du package requis pour accéder à MySQL depuis Java. Cliquez sur Télécharger l'archive TAR compressée à partir du lien ci-dessous.

https://dev.mysql.com/downloads/connector/j/

Vous serez invité à vous connecter, mais vous pouvez également télécharger en sélectionnant «Non merci, lancez simplement mon téléchargement».

Extrayez le fichier téléchargé (mysql-connector-java-5.1.46.tar.gz) avec la commande suivante.

tar zxvf mysql-connector-java-5.1.46.tar.gz

Copiez le fichier mysql-connector-java-5.1.46-bin.jar des fichiers extraits dans le répertoire lib de Tomcat (ou dans un répertoire de votre CLASSPATH).

cd mysql-connector-java-5.1.46
mv mysql-connector-java-5.1.46-bin.jar ~/apache-tomcat-9.0.6/lib

Installez JFreeChart

JFreeChart est un package qui vous permet de créer une grande variété de graphiques à partir de Java. Suivez le lien ci-dessous vers la page de téléchargement de SourceForge et cliquez sur le bouton Télécharger la dernière version.

http://www.jfree.org/jfreechart/download.html

Extrayez le fichier téléchargé (jfreechart-1.0.19.zip) avec la commande suivante.

unzip jfreechart-1.0.19.zip

Copiez le fichier jar extrait sous lib dans le répertoire lib de Tomcat (ou dans un répertoire de votre CLASSPATH). Une chose à noter ici est que pour les fichiers jar extraits, ** ne copiez pas uniquement le fichier servlet.jar **. Si vous mettez ce fichier dans votre CLASSPATH, Tomcat ne fonctionnera pas correctement.

cd jfreechart-1.0.19/lib
rm servlet.jar
mv *.jar ~/apache-tomcat-9.0.6/lib

Autre

Définissez CLASSPATH pour pouvoir accéder aux packages que vous avez installés jusqu'à présent par programme.

nano ~/.profile

À la fin de ce fichier, ajoutez ce qui suit: Si vous avez divers packages dans d'autres répertoires, ajoutez-les à votre CLASSPATH comme il convient.

CATALINA_HOME="/home/pi/apache-tomcat-9.0.6"	
export CLASSPATH=$CLASSPATH:.:/opt/pi4j/lib/*:$CATALINA_HOME/lib/*

Appliquez les paramètres avec la commande suivante.

source ~/.profile

finalement

Un ordinateur pour environ 5 000 yens? Il est difficile de sous-estimer le Raspberry Pi qu'il peut avoir une telle fonction comme d'habitude!

Sur la base de l'environnement construit cette fois, j'ai créé un programme capable de connecter les capteurs de température, d'humidité et de pression et d'afficher le graphique ci-dessous à partir d'un navigateur Web.

3.PNG

Ceci est présenté dans l'article suivant.

Représentez graphiquement les informations du capteur de Raspberry Pi en Java et vérifiez-les avec un navigateur Web

Recommended Posts

Représentez graphiquement les informations du capteur de Raspberry Pi et préparez un environnement qui peut être vérifié avec un navigateur Web
Représentez graphiquement les informations du capteur de Raspberry Pi en Java et vérifiez-les avec un navigateur Web
Création d'un environnement où kotlin peut être compilé avec cli avec docker et exécuté avec java
Construisez un NAS avec la fonction DLNA à la vitesse d'une seconde avec Raspberry Pi et Docker Compose
Une histoire qui a eu du mal avec l'introduction de Web Apple Pay
Préparer un environnement de scraping avec Docker et Java
Préparez l'environnement CentOS 8 avec Sakura VPS
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
Essayez de numériser, d'analyser et de transmettre la télécommande du climatiseur Mitsubishi avec Raspberry Pi
Un programme (Java) qui génère la somme des nombres pairs et impairs dans un tableau
Un grattage de la météo passée que l'on peut voir sur le site de l'Agence météorologique
J'ai essayé un puzzle qui ne peut être résolu que par les 10% de mauvais ingénieurs
Créer un contrôle de page qui peut être utilisé avec RecyclerView
Quatre rangées avec gravité pouvant être jouées sur la console
Communication socket avec un navigateur Web utilisant Java et JavaScript ②
Communication socket avec un navigateur Web utilisant Java et JavaScript ①