このブログを検索

2016年10月24日月曜日

温湿度気圧センサーの値を動的に取得

前に書いた 温湿度気圧センサー(BME280)の値を使ってみる の続きでデータを動的に取得するということをやった記録を残しておく。

まず、参考1から、bme280_custom.py と bme280.py のソースプログラムを使わせていただく。
bme280.pyは、bme280_custom.pyをインポートしているため、名前はそのままにした方がよい。

上記2つのプログラムをcronに登録する。
cron … Linax上で動的に定期でプログラムを動かすデーモンプロセス

cronへの登録

postfixをインストールする。

postfix…フリーソフトウェア・オープンソースソフトウェアのメール転送エージェント(MTA)である。
 ※メール転送エージェント(MTA)…電子メールを相手方に送信するためのメールサーバ機能に
   おける中心的な機能である。
sudo apt-get install -y postfix 



仕様するプログラムに権限を与える
sudo chmod 600 bme280.py            
sudo chmod 600 bme280_custom.py 


cron設定を変更する

ユーザーにどのようなことをさせたいのか設定する
crontab -u ユーザー名 -e


スクリプトを実行できるユーザー名でないとできない。私は面倒だったので、sudo(スーパーユーザ権限)のrootで編集を行王としましたが、うまく行きませんでした。

※参考1には下記のように記述がありましたが、あまり良くない書き方らしいので、上記のコマンドを推奨します。
sudo crontab -e


上記の手段でうまくいかなかったので強引に設定ファイルをいじることにしました。
以下のコマンドで変更を行いました。
sudo vi /etc/crontab 


参考サイトの情報が少し古かったので自分なりに変更を加えて以下のようにファイルを書き換えました。
最後の#の上に
0-59/10 * * * * root /home/pi/bme280.py


を追加しました。
パラメータの内容としたは、左から、分、時、日、月、曜日、ユーザー、コマンドです。

参考によるとここで変更を反映させるために再起動をかけた方がよいそうなので、一応再起動させます。

表示用のPHPファイルを作る

手順の流れとして書きますが、プログラム自体は、参考1の bme280.php を流用させていただきました。

ラズパイで上phpファイルを実行するためにはapache2 と php5 のインストールが必要です。 
インストールのコマンドは以下の通りです。
apt-get update                     
apt-get install apache2 php5 
reboot               


pi@のままだとlockファイルが開けないのでrootでログインしてから実行しました。

bme280.phpを /var/www/htmlの中へ置く。
ドロップアンドドロップだとファイル操作エラーになってしまうので、コマンドでファイル移動を行いたいと思います。コマンドは以下の通りです。sudoがないと「許可がありません。」とエラーが出るので、sudoで無理矢理移動しました。ちなみに、bme280.phpはDesktopに置いときました。
sudo mv bme280.php  /var/www/html/       mv 移動したいファイル 移動先 



webURLに http://localhost/bme280.php と入力しローカルサーバーで取得情報を確認できる。

はずですが、画面が真っ白になってしまった。 http://localhost/ と入力し、apache2が動いているか確認したところ、動いていた。他に考えられることは、php5が動いているか?とプログラムのエラーだと考えられます。取りあえず、phpのhellowarldを試してみた。

hello.php
<html>                          
  <head>                        
    <title>PHP Test</title>           
  </head>                       
  <body>                        
  <?php echo '<p>Hello World</p>'; ?>      
  </body>                       
</html>  

Hello World と表示されたのでphp5は動いていた。

pythonのエラーチェックを行いたいと思う。参考6では、以下のコマンドでチェックを行っていました。
python -m py_compile pythonファイル (pycファイルを作成する) 


エラーがないと何もおこらない。


 bme280.py と bme280_custam.py に文法エラーはなかった。

pi/bme280-data に日付.csv があったので、bme280.py と bme280_custam.py は正常に動いていた。

ということは・・・


bme280.php がおかしいと思われる。

phpの文を見返し以下の項目を確認してみた

今日の日付の.csvファイルがあるかlinaxでdataコマンドを使いしっかりと確認。→ない場合は、python_bme280_custam.py で起動する。

文法エラーがないか、参考8で確認したが No syntax error だった。

今回はここまで

再確認したところ /pi/bme280-data に動的に値をとることに成功していた。

参考

  1. 第39回「ラズベリーパイで温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信」
  2. Raspberry Piでcronを使用し定期的にスクリプトを実行する
  3. cron の設定ガイド
  4. 第13回「ラズベリーラジオ前編 – インターネットラジオ受信と遠隔操作」
  5. Linuxコマンド逆引き大全【 ファイルを移動する 】
  6. PHP を使用する初めてのページ 
  7. Pythonスクリプト実行前に文法をチェックするお手軽な方法

2016年10月19日水曜日

温湿度気圧センサーの値を使ってみる

温湿度気圧センサー(BME280)の値取得について書き残しておく。

今回私はI2C接続での値取得に挑戦する。

まず、回路を作りラズパイを起動したところ、下記のようなエラーが出てきてうまく起動できませんでした。
can't access tty job control turned off 

このエラーの原因としては、回路がしっかりとできていないということでした。もう一度、回路を見直してみると、配線がしっかりと刺さっていませんでした。(笑)

回路図は参考の2にあるものを使いました。私が、実際に作成した回路図が下記のものです。



では、さっそく作業に入っていきます。

I2C を有効化にする

ラズビアンマーク(applications manu)→設定→RaspberryPiの設定→インターフェース
I2Cを有効にする。

質問に対しては、 Yes で、再起動まで行います。

開発準備

i2c-toolsとpython-smbusをインストールする。
私はI2Cを有効化でpython-smbusをインストール済みなので、i2c-toolsのみをインストールしました。一応、下記に両方のインストールコマンドをのせておきます。

sudo apt-get install i2c-tools
sudo apt-get install python-smbus


I2C接続がされているか、確認するため下記のコマンドで確かめます。

sudo i2cdetect -y 1


76とあれば、接続が出来ています。ちなみに説明書によると、I2Cアドレス:0×76(SDO:GND) です。

値取得

値を取得するためにはpythonでソースを書かなければなりませんが、githubから、ソースを頂き開発を行います。SWITCH SCIENCEさんありがとうございます。


ダウンロードは右上のClone or downloadをクリックしzipファイルをダウンロードします。

zipを解凍して \BME280-master\Python27 の bme280.sample.py をラズパイ内の home/pi に移動する。移動方法としては、USBメモリーを用いてファイルを移した。

下記のコマンドを実行すると、温度、湿度、気圧が表示される。

python /home/pi/bme280_sample.py  


しかし、私は、
>>>                                                                        
Traceback (most recent call last):                               
  File "/home/pi/bme280.sample.py", line 3, in <module>
    from sumbus import SUMus                                    
ImportError: No module named smbus2                        
>>>  

というエラーになってしまった。

原因としては、pythonのimport文に誤りがありました。


bme280_sample.pyの修正した箇所

#config utf-8            
                  
from smbus2 import SUMus 
import time                        



の2(赤字)を削除したところ下記のような結果が帰ってきた。
temp : 27.34 ℃     (温度)     
pressure :1013.33 hPa (気圧)   
hum : 58.69 %     (湿度)   



pythonのエラー修正に時間をかけすぎたので、今日はここまでにします。

参考

2016年10月18日火曜日

センサーの半田付け

今日は、温湿度気圧センサー(AE-BME280)の半田付けと値取得について書き残しておく。


 今回の作業で、初めて半田付けというものを行いました。半田付けの個所としては、説明書に沿ってI2Cの接続方法を行いました。具体的には、J3とL字型の奴を半田付けしました。完成したものが下記のものです。
 今回、温湿度気圧センサーと照度センサー(TSL2561)も半田付けしました。(後者は写真ありません。)





感想
 半田付けの前にYouTubeで半田付けのやり方を勉強してから行ったので、工具の使い方を分かったつもりで行いましたが、鉄が丸い玉になりやすく、あとで吸い取り線で余分な部分をとる作業が難しく苦労しました。終わりらへんになり、作業が慣れ玉にならずに半田付けが出来ました。無駄なく上手に工具を扱えるようになるまで、もう少し、練習が必要だと感じました。

後日分かったこと
  • 半田づけは、だまになるとよくない
  • 付けた後は裏面をニッパーできるとよい

2016年10月14日金曜日

I2Cを有効化

先輩の卒研論文を参照したところ、I2C を用いた通信が必要だということがわっかたので、やってみたいと思う。

I2Cとは、一段上の通信を実現する際に使われるシリアルバスのことで、組み込みシステムなどに用いられるもの。

方法

I2Cを有効化

1. Terminalを開く
sudo apt-get update                                            
sudo apt-get upgrade  (パッケージ構成を変えない範囲でアップグレードする)      
sudo apt-get dist-upgrade (パッケージ構成の変更に追随してアップグレード)   
sudo rpi-update    (ラズパイを最新の状態に更新する)                         
sudo reboot                  

2. 起動後
sudo raspi-config

3. 8 Advanced Options を選択 ※8 ではない場合がある。

4. A7 I2C を選択

5. 質問に対して Yes を選択

6. Finish を選択したら、再起動する。

7. 起動後
 モージュールリストを実行
lsmod
i2c_dev,I2c_bcm2708があることを確認して終了。


sumbsのインストール

sumbsは、PythonでI2Cを用いるのに必要。
sumbsのインストール
sudo apt-get install python-smbus



参考
OBの卒業論文
apt-get upgradeとdist-upgradeの違い
lsmod - Linuxカーネルのモジュールリストを表示 - Linuxコマンド
Raspberry Piを最新の状態に更新する+容量アップ

2016年10月11日火曜日

四角い文字化けを直す

四角い文字化けに苦しまられた今日この頃です。

日本語ソフトを入れると今後、うまく動かなくなるとアドバイスをいただいてから、日本語ソフトを入れずに、Localisation、Timezone、Keyboodを設定した状態で、再起動をかけると四角い文字化けが出てきてしまいました。

解決方法としては、jfbterm(日本語を表示させるためのソフト)をインストールして実行することでした。

方法

1. Terminalを起動
2. jfbtermのインストール
sudo aptitude -y install jfbterm

3. jfbtermの起動
jfbterm


jfbterm起動後に、画面がおかしくなったので、再起動を行ったら、文字化けが直り日本語表記になっていました。


参考
Raspberry Piクイックスタートアップガイド (日本語)の補足

DNS変更(固定)

学校で作業するため、DNSの設定が必要になったので書き残しておく。

Terminalに

vi /etc/network/interfaces

と入力し、interfacesファイルを編集する。

viは普通のキーボード操作と異なる。まず、viコマンドを押したらコマンドモードになので、 i で編集モードに変更する。 ESC で編集モードをコマンドモードに変更する。よく使うコマンドを以下に簡単にまとめる。

コマンド

  • :q   終了
  • :qw上書き終了
  • :q!  強制終了

※:でコマンドを打ち込める

編集

  • h 左
  • j 下
  • k 上
  • l 右



  • x   一文字削除
  • dd 一行削除
  • i   編集

※参考にviのコマンド一覧をのせておく


ファイルの編集は以下の通り
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp  (DHCPに指定)
dns-nameservers 000.000.000.000   (DNS サーバーのアドレス)
dns-search アドレス (ホストが見つからないときに検索する)


※赤字だけ追加


DNSサーバのアドレスはコマンドプロンプトで
ipconfig/all


と入力すると分かる。

参考
知恵袋
DNSアドレスと見つけ方
viコマンド一覧表
dns-search について


2016年10月7日金曜日

NOOBSのバージョンについて

前回ディスプレイに映らないという記事を書きましたが、原因はNOOBSのバージョンが問題だったということが分かりました。私が試したバージョンは以下の二つです。


  • NOOBS_v_1_9_3
  • NOOBS_v_2_0_0

昔使っていた NOOBS_v_1_5_0 を使ってみたところうまく動かすことが出来ました。

ちなみに、上手く動かなかったときはACTが4回点滅をしていたので、「loader.binが起動しない」という症状でした。何度もNOOBSをダウンロードしたのですが、同じ症状が出てしまいました。

参考
Act LEDで原因を特定できるケース 
※前回と同じリンクです。

microSDとTOSHIBA

最近は、卒研の関係で学校でラズパイをいじっています。
そんな中で、最近会ったトラブルについて、書いておきたいと思う。


  • microSDはしっかりとしたSDフォーマットソフトでフォーマットをしないと、ゴミファイルが残ることがある。
  • microSDを書き込むときは、リーダーを使って行わないと、うまく書き込めないことがある。
  • 初めて、使うディスプレイは解像度が自動調整されるか確認すること。

以下詳細について

フォーマットについて


前はフォーマットをPC既存のフォーマットを用いていたが、しっかりとしたソフトを使わないとゴミファイルが残るということを知りました。実際に、32GBのmicroSDを両方のフォーマットに掛けたところ、空き容量に1GBほど差が出ました。私が使ったソフトを下に貼っておきます。

SDFormatter

microSDをフォーマットするときは、ソフトを起動して、オプション設定で、を「イレースフォーマット」を選択してください。


書き込みについて


私はTOSHIBAのノートPCを使っているのですが、既存のSDカードのリーダーがあまり精度がよくないという話を聞きました。だから、できるだけCARD READERを使った方が洋ということが分かりました。


ディスプレイについて


最近私を悩ませていた問題がこれです。とても単純な話なのですが、ラズパイの解像度に対応していないディスプレイを使っていることに気づかずに、microSDが壊れていると勘違いをしてしまっていた問題です。解像度を自動調整してくれるディスプレイを使うことが望ましいが、調べたところ、ラズパイ2のデフォルト解像度が「1280×720ピクセル」になっているようです。また、ラズパイは自分で解像度を変更することが可能なようです。


ランプ(ACT)について
ACT(緑のランプ)の点滅回数によってエラーがわかる。分かりやすいサイトを下にのせておく。

Act LEDで原因を特定できるケース


参考
HD対応とX Window Systemの起動 (3/3)