ラズパイ(43) 再インストール3回目とpyenvのインストール

再インストール3回目です。

早速記録をまず最新版のRaspbianのimgファイルをダウンロードします。
ダウンロード時間は結構かかる。

というようにバージョンがアップしてました。

sshから設定をしました。

書いたとおり、touch コマンドでsshという名前のファイルを作れば、sshできます。
詳しくはリンク先。
$sudo raspi-config
でローカルの設定などをしました。

これはgitを使ってみたかっただけです。

アップグレードしますが、時間が長かったです。
コマンドは
$sudo apt-get update
$sudo apt-get upgrade

pyenvをインストール(詳細はリンク先)


numpy とmatplotlib をインストール。今回はpipですんなりできた。

sudo pythonとすると、バージョンが違う。ユーザーの環境変数の設定が違うためらしい。

コマンドのPATHを調べる

コマンドのPATH を調べる方法についてメモします。

  環境変数のPATHを表示
$echo $PATH
環境変数のPATHを表示します。(PATHは大文字で。)

  コマンドのPATHを表示
$which コマンド
コマンドのPATHを環境変数のPATHにあるコマンドから調べる。

例
$which ruby
/usr/bin/ruby

$whereis コマンド
whereisは/usr/bin:/bin:/usr/sbin:/sbinにあるコマンドから調べる。

例
$whereis ruby
/usr/bin/ruby

なのでwhereisではPATHが表示されない場合があるということです。
whichを使う機会のほうが多くなりそうです。
複数あった場合は、環境変数を$echo $PATHで表示した左側(先頭)にあるコマンドが優先的に表示される。実行される順番も同じ優先度です。

  環境変数の設定の仕方

KURO
筆者は whichコマンドをPythonで複数環境がある場合にどちらが有効かを確認する際に使ったよ。

written by gatamix

ラズパイ(42) ホームページにmysqlからグラフ作成

Gatamixです。

mysqlに取り込んだデータをlocalhostのホームページにグラフとして描画してみようと思います。
java script のライブラリーを使って描画します。
使うのは、morris.jsです。

phpを事前に導入しておいてください。私は、Raspberry pi上に構築しました。
(当初、ページが描画されなかったので、色々ためしたみたので、必要ではないパッケージもインストールしているかもしれないので、詳細は省略します。phpのインストールの詳細について自信がありません。)

  メタ変数
foo :ユーザー名
passwd : パスワード
hoge :データベース名
fuga :テーブル名

  コード

  グラフ(参考までに)

  参考にしたページ

written by gatamix

まとめ Raspberry Pi i2cモジュールを使ってみる

Raspberry Pi でのi2cモジュールの使ったものについてまとめてみました。

written by gatamix

ラズパイ(41) センサーの値をmysqlに書き込む

Gatamixです。
温度センサー(lps25h)の値をデータベースに書き込んでみます。

python ライブラリーのインストールをします。

$sudo apt-get install python-dev
$sudo apt-get install libmysqlclient-dev
$sudo pip install MySQL-python

メタ変数は以下です。
foge:データベース名
huga:テーブル名
foo:ユーザー名
passwd:パスワード

書き込み用のpythonコードです。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
 
import smbus
import time
import sys
import datetime
import MySQLdb

Device_add = 0x5d 
 
#通信確認
whoami = smbus.SMBus(1).read_byte_data(Device_add, 0x0f)
if whoami != 0xbd:
    print('接続できません')
    sys.exit()

#レジスタ切り替え(モード変更)
smbus.SMBus(1).write_byte_data(Device_add, 0x20, 0x90) 
time.sleep(1)

#データ読み込み

buff = [0 for i in range(5)]
buff[0] = smbus.SMBus(1).read_byte_data(Device_add, 0x28)
#print("buff[0]=%x" % buff[0])
buff[1] = smbus.SMBus(1).read_byte_data(Device_add, 0x29)
#print("buff[1]=%x" % buff[1])
buff[2] = smbus.SMBus(1).read_byte_data(Device_add, 0x2A)
#print("buff[2]=%x" % buff[2])
buff[3] = smbus.SMBus(1).read_byte_data(Device_add, 0x2B)
#print("buff[3]=%x" % buff[3])
buff[4] = smbus.SMBus(1).read_byte_data(Device_add, 0x2C)
#print("buff[4]=%x" % buff[4])

Data = [0 for i in range(2)]

"""---------------------------
圧力データ24bitデータ
8bitデータをシフトして結合
---------------------------"""

Data[0] = (buff[2] << 16 | buff[1] << 8 | buff[0])

"""---------------------------
温度データ16bitデータ
8bitデータをシフトして結合
---------------------------"""

Data[1] = (buff[4] << 8 | buff[3])

"""------------------------
圧力データの計算
Pout(hPa) = PRESS_OUT / 4096
-------------------------"""

Data[0] = float(Data[0]) / 4096

"""---------------------------
マイナスデータの補正と
温度データの計算
T(°C) = 42.5 + (TEMP_OUT / 480)
----------------------------"""

if Data[1] & 0x8000:
    Data[1] = -((Data[1] - 1) ^ 0xffff)
Data[1] = float(Data[1]) / 480.0 + 42.5

#出力-------------------------

print("Pressure %.2f hPa" % (Data[0]))
print("Temperature %.2f degree" % (Data[1]))

connector = MySQLdb.connect(host="localhost", db="hoge", user="foo", passwd="passwd", charset="utf8")
cursor = connector.cursor()
 
str_tmp = "%6.2f" % Data[1]
sql = u"insert into fuga values(now(), %s)" % str_tmp
cursor.execute(sql)
 
connector.commit()
 
cursor.close()
connector.close()

確認
$sudo mysql -u foo -p
>use hoge;
>select * from fuga;

written by gatamix

ラズパイ(40) mysqlをインストール

Gatamix です。
Raspberry pi に mysqlをインストールしてみようと思います。

・インストール
$sudo apt-get install mysql-server
mysqlのパスワードを入力します。

・コマンドラインツールの使用方法

メタ変数は以下。
foo:ユーザー名
hoge:データベース名
fuga:テーブル名
piyo1 , piyo2 :カラム名
hogera1,hogera2 : 値

$sudo mysql -u foo -p
パスワードの入力をします。

*データベースの作成
>create database hoge;

*データベースの削除
>drop database hoge;

*データベースの一覧表示
>show databases;

*使用するデータベースの選択
>use hoge;

*テーブルの作成
>create table fuga();

*テーブルの削除
>drop table fuga;

*テーブルの一覧表示
>show tables;

*カラムの確認
>describe fuga
または
>show columns from fuga

*データ入力
>use hoge;
>insert into fuga (piyo1,piyo2, …) values (hogera1,hogera2, …);

*データ削除(選択)
>use hoge;
>delete from fuga where piyo1 = hogera1;

など piyo1 < hogera1 の条件でも可能。 *データ削除(全データ) >use hoge;
>delete from fuga;

*データ更新
>use hoge;
>update fuga set piyo1 = hogera1 where piyo2 = hogera2;

*データの確認
>use hoge;
>select * from fuga;

*コマンドラインの終了
>quit

written by gatamix

ラズパイ(39) Apache2

Gatamix です。

Raspberry Pi にApache2をインストールします。

Apache2 は,HTTP Serverです。

HTTP Serverがあれば、ホームページを立ち上げることができます。
(ポートフォワーディングなどをしないと外部には公開できませんが…)

  Apache2 インストール
$sudo apt-get update
$sudo apt-get install apache2

$whereis apache2
で関連のフォルダーを検索

初期のドキュメントルート
/var/www/html

上記の index.html を置き換えるれば、ホームページのtopを変更できる。

written by gatamix

Python で localhost からリレーしてメール送信

Gatamix です。
Postfix に変更してから、ssmtp では上手くできなかったlocalhost からリレーしての送信ができるようになりました。今まではプログラムからGmailサーバーにアクセス。
それによってpython のプログラムコードにパスワードを直接書かなくてもよくなりました。
具体的には、こんな感じに書けます。

ユーザー認証がなくなったので、コードの一般化ができます。

written by gatamix

ラズパイ(38) SMTPサーバ postfixをつかってみた

Gatamix です。
Raspberry pi のSMTPサーバの構築をssmtp からpostfixに変更しようと試みました。
Gメールへリレーして送信するようにします。
postfix の設定方法
下記リンクを参照しました。

  インストールしていたmailutilsとssmtpをアンインストール
インストール前にmailutilsとssmtp のアンインストールをした。(インストールしていない場合は不要)
$sudo apt-get –purge remove mailutils
$sudo apt-get –purge remove ssmtp

  インストール
postfixのインストールとmailutilsの再インストール。
$sudo apt-get install postfix
インターネットサイト を選択。(設定なしを設定しているホームページもあるがpostfixが起動できなかった。)
$sudo apt-get install mailutils
パスワードの設定
$sudo vi /etc/postfix/sasl_passwd

gmailのipを直接入力:587 gmailのアカウント名@gmail.com:パスワード

(gmailのipを直接入力でなくてsmtp.gmail.comでできればそのほうがいいが、できなかった…)
アクセス権限の変更
$chmod 600 /etc/postfix/sasl_passwd
DB化
$sudo postmap /etc/postfix/sasl_passwd
main.cfの設定変更のまえにバックアップ
sudo cp -i /etc/postfix/main.cf /etc/postfix/main.cf.$(date +%Y%m%d)
main.cfの設定変更
sudo vi /etc/postfix/main.cf
以下追記

# Minimum Postfix-specific configurations.
#mydomain_fallback = localhost
relayhost=gmailのipを直接入力:587
# Enable SASL authentication in the Postfix SMTP client.
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
# Enable Transport Layer Security (TLS), i.e. SSL.
smtp_use_tls=yes
smtp_tls_security_level=encrypt
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
tls_random_source=dev:/dev/urandom

再起動
$sudo postfix reload
または、
$sudo systemctl restart postfix
Raspberry piも再起動してみる。
$sudo reboot

メール送信が上手くできない状況で苦戦していたのですが、
リレーするgmailのipがmail.logに接続できたときログにあった発見して設定ファイルの変更を実行。
直接接続するようにしたら、デーモンで起動したあと再起動なしでメールを送信できました。
サーバーのアドレスが上手く認識できていないことが原因?
この方法だとipが変更されたら、使えなくなりそうです。
以下できなかった時の状況。
Raspberry pi を起動したあとにpostfixを再起動しないと使えない。デーモンは起動している。
Gメールへリレーする際にmail.logを確認するとホスト名かドメイン名でエラーになっていて上手く接続できない。
$cat /var/log/mail.log
を実行すると
status=deferred (Host or domain name not found. Name service error for name=smtp.gmail.com type=MX: Host not found, try again)
とエラーの表示があった。

  postfixについてのメモ
postfixの設定ファイルはmain.cf の他にmaster.cfもある。
場所は、/etc/postfix/master.cf
設定の変更されている箇所は$postconf -n で確認できる。
デフォルト値は$postconf -d で表示される。

written by gatamix

ラズパイ(36) センサーで測定した値をメールで送る

Gatamixです。
センサーを使っての一つの目標だったデータの送信を行ってみました。
使ったセンサーはいつものLPS25Hです。
処理の流れは以下です。
①データの取得(温度、気圧)
②CSVに記録
③プログラムで自動でグラフ作成
④メールでCSVファイルとPNGファイルを送信する
記録:添付ファイルのヘッダーを追加するところでスペルミスをしました。
メールの添付ファイルがファイル名が表示されないという結果があらわれて、
ミスをしてもメールは送信されたので原因が究明に時間がかかりました。
*MIMEについてMultipurpose Internet Mail Extensionsの略である。
電子書式で色々なフォーマットを取り扱うための規格。
ここが間違えると上手く表示されない。


以下コード(長いですが参考までに記載します。)

written by gatamix