ラズパイ 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スクリプト
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データへの保存)
<?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>