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

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


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

written by gatamix

ラズパイ(35) ADS1015 12ビットADC

Gatamix です。
12ビットADC(ADS1015)を購入して使ってみました。
これで、Cds光導電セルの値を取得します。
下図のように接続しました。

データ取得の専用パッケージをインストールします。
$sudo pip install adafruit-ads1x15
専用パッケージを呼び出します。
import Adafruit_ADS1x15
データの読み込みは
adc.read_adc(0,gain=GAIN)/500.0
で行っていますが、
Gain の設定は以下のようになっています。リンク参照。

Gain=1( 0.0V – 4.096V)
変換は11bit(2048)の分解能なので、
取得値×(4.096/2048)=取得値×(1/500)
となります。
コードは以下です。

written by gatamix

ラズパイ(32) センサーで測定したデータをグラフに自動描画する

Gatamixです。
Raspberry piの調子がイマイチですが、LPS25Hを使って以下のことをやってみました。
①データの取得(温度、気圧)
②CSVに記録
③プログラムで自動でグラフ作成
スケールを自動にするとオフセットでグラフが表示されるのでオフセットをなしに設定しました。
以下プログラム。
Raspberry pi でascii コードのエラーで℃が表示できなかったのを解決しました。
(python 2.7だからか?Mac python 3.6では表示できた。)
温度の単位をTex 形式で表示できるので、
変更。deg. → $^\circ$C

written by gatamix

ラズパイ(27) センサー(LPS25H)で測定したデータをcsvファイルに保存する

Gatamixです。
最近の記事で、CSVの取り扱いをやってきました。
今回は、センサー(LPS25H)で測定したデータをCSVに保存します。
簡単に説明すると、
 ①センサーの初期設定
 ②データの読み込み
 ③CSVの書き込み
 ④インターバル
 ⑤、②〜④を繰り返す
 ⑥データ名の変更
となります。
これまでの記事の内容でできました。
プログラムです。

written by gatamix

ラズパイ(24) LPS25H 番外編 ビット演算と2の補数について

少し補足します。
スマホだと横にしないと上手く表示されないかもしれません。
・bitの結合について
前のプログラムで
Data[0] = (buff[2] << 16 | buff[1] << 8 | buff[0])
と気圧のデータを処理している場所があると思います。
例えば
buff[2] = 0x0f(16進数) = 00001111(2進数)
buff[1] = 0x4e(16進数) = 01001110(2進数)
buff[0] = 0x33(16進数) = 00110011(2進数)
とする場合
上位のbitの場合buff[2]を16bit 左にシフトしているので
00001111 00000000 00000000(2進)
となります。
これらを論理和で計算する場合は、以下となります。

 

 

 

・負の値の補正
前のプログラムの
if Data[1] & 0x8000:
Data[1] = -((Data[1] – 1) ^ 0xffff)
の部分の補足です。
マイナスの場合に2の補数でデータが格納されているので
そのままだと正の値で計算されてしまうので
絶対値にして、マイナス符号をつけて、格納します。
2の補数は反転して( 排他的論理和(xor)をffff(16進)と行うことで反転します。)
それに1を足すことで作ります。

2補数の作成例

 

 

 

このプログラムの場合は2の補数を戻すので、
1を引いて、反転する(xor ffff(16進数))ことで求めます。
参考リンク

関連
Raspberry Pi(23)MEMSセンサー LPS25Hで温度と気圧の取得

written by gatamix

ラズパイ(22) i2cの設定 

i2cを使う前に設定をします。
raspbianのバージョンは
$cat /etc/debian_version
より 8.0 でした。(Raspbian GNU/Linux 8 (jessie))
まず、i2c-toolsをインストールします。
$sudo apt-get update
$sudo apt-get install i2c-tools
raspi-configで設定します。(GUIでも設定はできます。)
$sudo raspi-config

5 Interfacing Options → I2C → はい
i2c-devが書かれているか確認する。
$sudo vi /etc/modules
設定ファイルのバックアップをする。
$sudo cp -i /boot/config.txt /boot/config.txt.$(date +%Y%m%d)
/boot/config.txtにdtparam=i2c_baudrate=50000を追記する
$sudo vi /boot/config.txt

〜ページの行末〜
dtparam=i2c_baudrate=50000

pythonでi2cを使えるようにする。
$sudo apt-get install python-smbus
再起動する。
$sudo reboot
試しにi2cデバイスを接続する。
Raspberry Pi3 の端子位置とデバイスのマニュアル
で接続方法を確認します。
試しに使ったのはLPS25H MEMSデバイス
のモジュール化したものです。(購入は秋月電子)
i2cのアドレスを調べます。
コマンドの後の数字はi2cのチャネル番号です。(0または1)
実行するか聞かれるのでyで実行してください。
$sudo i2cdetect 1
実行結果

WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]y
0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- 5d -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

この場合は0x5dがアドレスです。
追記:
実行ユーザーがroot以外だとi2cにアクセスする際にアクセス権限がないとエラーがでる場合がある。
(再セットアップしたら、 pi ユーザーにi2cのグループがついていたので、設定しなくても大丈夫かもしれない。)
エラーが出た場合、sudo で実行するか下記リンクにあるように、実行するユーザーにi2cのグループをつける必要がある。

written by gatamix