0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Raspberry pi 3 Model Bを使って気温・湿度・気圧・照度を測定 USBでスマホに接続しCloudにアップ

Last updated at Posted at 2021-01-06

ラズパイ Rasspberry Pi 3 Model B
https://projects.raspberrypi.org/ja-JP/projects

Indoor Corgi Elec. RPZ-IR-Sensor Rev2.0
https://www.indoorcorgielec.com/products/rpz-ir-sensor/
I2CでBME280の温度センサー(基盤についてるアドレス0x77,コードで外付けは0x76)、照度センサー(TSL2572 アドレス0x39 測る
サンプルプログラム https://www.indoorcorgielec.com/wp-content/uploads/products/rpz-ir-sensor/rpz-sensor.zip

ラズパイのOSをダウンロードする Liteを選択
https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit

rufus-3.4.exeでMicroSDに書き込む

SDカードをラズパイにさしこみ、起動する

login:pi
pass:raspberry

passwd root でrootのパスワードを作ってrootでもログインできるようにしておく

vi /etc/ssh/sshd_config
でパスワードでログインできるように、該当ラインの#を外しておく

systemctl enable ssh
systemctl start ssh
これをしておけば、リモートからアクセスできる

cat /proc/cpuinfo | grep Revision でリビジョンを確認

以下の実行
apt-get install python-smbus
apt-get install libi2c-dev これはやっていないかも・・・

i2cをイネーブルする
raspi-config
で該当場所を探し、I2Cをイネーブルする

以下のコマンドを実行して、アドレスを確認しておく
i2cdetect -y 0
i2cdetect -y 1

サンプルプログラムを動かす
ラズパイにはPythonは2.7ももともとインストールされているのでそれを使ってみた
環境はPython3で動くとあるが、2.7でも動いた

python bme280i2c.py
python tsl2572.py

Python3で動かすときには、以下を実行しておく
apt-get install python3-smbus
python3 bme280i2c.py

apt-get install python-pip
python -m pip freeze
python -m pip list
pip install docopt
python rpz_sensor.py

python rpz_sensor.py -l logfile.csv でログファイルに残せる。追記も可能。

cronで自動記録する crontabの編集
crontab -u root -e
vim.tinyで編集
*/1 * * * * python /home/pi/rpz_sensor.py -l /home/pi/log.csv
これで1分おきに自動記録
一時間毎の場合は
0 * * * * python /home/pi/rpz_sensor.py -l /home/pi/log.csv

編集の実体は /var/spool/cron/crontabs/root の中

または
vi /etc/cron.d/raspi に次の1行を書く。プラス空行も追加しておく
*/1 * * * * root /home/pi/cron_script

vi /home/pi/cron_script に次の1行を書いておく
python /home/pi/rpz_sensor.py -l /home/pi/log.csv

chmod 755 /home/pi/cron_script
これでもOK

時間を日本時間に変更しておく
ln -s -f /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

WiFiネットワークをOFFにする
ifdown wlan0 -> /etc/network/interfaces 内のwlan0を見るがDHCPだと記述ないので動かない
ifconfig wlan0 down -> 実装が古いのでお勧めではない
ip link wlan0 down

Androidスマホ ネットワークUSB共有をかけることで ラズパイ側でusb0として使えた

Webサーバーにアップする
GETリクエストのPythonスクリプト

getrequest.py

import urllib.request
import subprocess
from subprocess import PIPE


proc=subprocess.run('date "+%Y%m%d%H%M"', shell=True, stdout=PIPE, stderr=PIPE, text=True)
date=proc.stdout
date=date.rstrip('\n')
print(date)

proc=subprocess.run("python /home/pi/rpz_sensor.py | grep Temp", shell=True, stdout=PIPE, stderr=PIPE, text=True)

str=proc.stdout
str=str.replace(' ','%20')
str=str.replace('\n','-')
print(str)

# str= "http://www.xxxx.jp/xxxxx/getreceive.php?id=\""+ date + "%20" + str + "\""
str= "http://www.xxxx.jp/xxxxxx/getreceive.php?id="+ date + "%20" + str
# str= "http://www.xxxx.jp/xxxxxxx/getreceive.php?id=\"5%20---55\""
print(str)

response=urllib.request.urlopen(str)
print(response.getcode())
html=response.read()
print(html.decode('utf-8'))

Web側のPHPコード (単純な受け取りとTXTデータへの保存)

getreceive.php

<?php
if(isset($_GET[id])){
$comment = $_GET[id];
echo $comment;

$fp = fopen('temparature.txt','a');
fwrite($fp, $comment."\n");
fclose($fp);
}
?>

<!DOCTYPE html>
<html lang = ja>
<head>
<meta charset = UFT-8>
<title>フォームからデータを受け取る</title>
</head>
<body>
<h1>フォームデータの送信</h1>
<form action = getreceive.php method = get>
<input type=text name=id><br/>
<input type=submit value=送信>
</form>
</body>
</html>

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?