suica(スイカ)のオートチャージを利用するために、JR東日本グループのVIEWカードを利用している。


VIEWカード画像(suit)


ある日突然、このVIEWカードに付帯しているsuica機能が、反応しにくくなった。

駅改札、バスの乗車、コンビニでの電子決済の際に、このsuicaをかざしても、なかなか認識しない。

こんな感じだ。
1回目:無反応
 しばらくして、カードリーダーから取り外し、再度suicaをかざす
2回目:ピピッ

以前は何の問題も無く、軽快に認識されていたのに、ある日突然認識されづらくなったのだ。

特に、磁石に近づけてもいないし、水に濡らしたということもない。
(なお、非接触ICカードは磁気部分が無いので、磁石を近づけても壊れないらしい)


こんな状況の中で1ヶ月ほど、騙し騙し使っていたのだが、さらにある日突然、全く認識しなくなった。

JRの駅員さんに聞いてみた。
私「このsuica(VIEWカード)が全く認識されなくなってしまったのですが」
駅員さん「これは再発行が必要ですね。VIEWカードの場合、クレジットカード機能が搭載されているので、裏面の電話番号へ電話をかけて再発行手続きをしてください」

とのこと。

そこで、VIEWカードお客様サポートへ電話してみることに。

VIEWカードお客様サポート


プルルルル
(こちらVIEWカードお客様サポートセンタで、ガイダンスに従い、、、、中略、、、、オペレータに接続します)
私「VIEWカードに搭載されたsuicaが全く認識されなくなりました。JRの駅員さんに聞いたところ、再発行が必要で、この電話番号に問い合わせて欲しいと言われ、電話しました。
オペレータ「ご不便をおかけし、申し訳ございません。クレジットカード番号、お名前、生年月日を教えてください」
〜中略〜
オペレータ「suica残高もありますし、どうやら弊社不備によるカード不具合のようです。申し訳ございません。再発行をさせて頂きます。10日ほどしますと、新しいカードが届きますので、現在のカードにはハサミを入れて頂き、破棄をお願いします。現在お使いのsuicaチャージもそのままご利用頂けます。」


とのことで、無償で新しいカードを再発行してくれることになった。

10日間、suicaを使えない不便な期間があるが、仕方がない。


suicaが認識されにくくなった人は、再発行の検討をなさることをおすすめします。

    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 
iPhone 5C Softbankに、下駄R-SIM10を使って、OCNモバイルONEという格安SIM(MVNO)を使って運用してきた。

しかし、圏外になると、3Gでも、再アクティベーションを求められ、運用に耐え難かったので、下駄を変更してみることにした。


iPhone5D(5S)で使える下駄は、R-SIM7+、R-SIM9GOLD等々様々なものがあるが、2chやAmazonのレビューを見て、最も評価の良い、R-SIM9GOLDを試してみることにした。





R-SIM9GOLDは、Amazonで1300円くらいだった。



R-SIM9GOLD




開けてみると、このような下駄が入っていた。


R-SIM9GOLD2.jpg



R-SIM10と違い、ICチップ搭載箇所の関係上、専用のチープなSIMトレイを使う必要がある。
安定性のためなので、まぁ仕方がないとしよう。



事前に下記の設定をしておく。



(1)4GをOFFに

「設定」→「モバイルデータ通信」→「4Gをオフにする」


4Goff.png





(2)iMessageをOFFに

「設定」→「Message」→「iMessageをオフにする」


iMessageOFF.png





(3)FaceTimeをOFFに

「設定」→「FaceTime」→「FaceTIMEをオフにする」


FaceTime.png






あとは、R-SIM9GOLDの下駄を履かせて、
docomoのSIMカードを載せて、iPhoneに挿すだけ。




iPhoneがリンゴマークになり、
元キャリア設定画面になるので、元キャリアである「JP SoftBank」を選択し、
「iOS7.x」を選択するだけ。
(実際はiOS8.12だったが、最新のOSという意味で、iOS7.xを選択した)



しばらく待つと、下記のようにdocomoの電波を掴み、使用可能となる。

docomo.png




たまに、「SIMカードが挿されていません」というポップアップが出ることがあるが、その場合は、一度SIMカードを出し入れすればOKだ。




3G運用だと、R-SIM10と比較して、たいへん安定している。
アクティベーション画面になることもない。


4G(LTE)をONにすると、圏外になると、アクティベーション画面になることがあり、
あまり安定した運用をすることはできない。



3G運用であれば、R-SIM10と比較し、たいへん安定して運用できるので、
新規に購入する場合は、R-SIM9GOLDをおすすめする。





    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 
iPhoneのSIMロックを解除する下駄(R-SIM等)が色々なバージョンがあり、
対応iPhone機種や、iOSの違いがよく分からなくなってきたので、
簡単にまとめてみた。


要は、ほとんど同じで、相違点は下記だ。
R-SIM10: iPhone6と6PLUSに対応している。専用SIMトレイではなく、iPhoneオリジナルのSIMトレイの利用が可能。
(R-SIM9 GOLDとR-SIM7+は、上記に非対応)


本家曰く、新しいほど、安定性が向上しているとのことだが、
レビューを見ていると、どうもどれも似たり寄ったりの安定性のようだ。

未だ、4Gが安定して使える下駄はない。


これから新しく買うのであれば、最新の下駄を購入しておくのが無難なようだ。




以下、主な下駄の対応状況を記す。



  • R-SIM10
対応機種:iPhone 5, 5S, 5C, 6, 6PLUS
対応OS: iOS 7.0.x, 7.1.x, 8.0.x, 8.1.x, 8.2,x
対応キャリア: au, SoftBank

備考: 4GはNG(圏外、プレーンモード、電源ON/OFFでアクティベーション画面に)









  • R-SIM9 GOLD
対応機種:iPhone 5, 5S, 5C
対応OS: iOS 7.0.x, 7.1.x, 8.0.x, 8.1.x, 8.2,x
対応キャリア: au, SoftBank

備考: 4GはNG(圏外、プレーンモード、電源ON/OFFでアクティベーション画面に)








  • R-SIM7+
対応機種:iPhone 5, 5S, 5C
対応OS: iOS 7.0.x, 7.1.x, 8.0.x, 8.1.x, 8.2,x
対応キャリア: au, SoftBank

備考: 4GはNG(圏外、プレーンモード、電源ON/OFFでアクティベーション画面に)






    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 
Softbank版iPhone5Cを、R-SIM10という下駄を利用してSIMロック解除し、
NTT docomoの回線をつかめたのでレポ。
(SIMフリーなiPhoneは必要ない)



R-SIM10.png


このように、「Carrier: ソフトバンクモバイル」とSoftbankのiPhoneなのに、
「Network: NTT DOCOMO」と、ちゃんとdocomoの電波をつかんでいる。


3Gをつかませているが、4G(LTE)をつかむことも可能だ。




まず、通称「下駄」と呼ばれるSIMロックアダプタR-SIM10を購入。
Amazonで2,000円ほどだった。






届いたR-SIM10がこちら。
このように、下駄(R-SIM10)を履かせて、nano-SIMを格納する。


R-SIM10_geta2.jpg




iPhone5, 5C, 5S, 6, 6plusに対応している。
iOS8でもSIM解除が可能だ。
(私はiOS8.12だったが、問題なかった)






ちなみに、SIMカードは、OCNモバイルONE(SMS付き)だ。
micro-SIMだったが、SIMカッターでnano-SIMサイズにカットした。







予め、iPhoneにアクティベーションSIM等を入れて、
下記設定をしておく。

1.4Gをオフ(「設定」→「モバイルデータ通信」→「4Gをオンにする」)
2.iCloudをサインアウト(「設定」→「iCloud」→「サインアウト」)
3.FaceTimeをオフ(「設定」→「FaceTime」→「オフ」)


その状態で、下駄(R-SIM10)を履かせたdocomoのSIMを挿入する。


しばらく待つと、下記画面になる。
Softbankの端末なので、「JP SoftBank」を選択。


r-sim-10-sim-unlock-04.png




次に、iPhone5Cなので、「i5/i5S/i5C」を選択。


r-sim-10-sim-unlock-05.png




「iOS6.0-8.X(2G/3G SIM Card」を選択。


r-sim-10-sim-unlock-06.png




「M2」を選択。


r-sim-10-sim-unlock-07.png




「了解」を選択。

r-sim-10-sim-unlock-08.png






しばらく待つと、
「アクティベーションが必要です」
という画面になる。


ActivationRequired.png


※私は、言語を英語にしているので、「Activation Required」と出ている。



しばらく待つと、
左上のアンテナピクトの項目に、
「●●●●docomo」と、docomoの表示が出るので、
表示が出たら、アクティベーションを行う。
(この時、アクティベーションのために、Wifi等のインターネット接続環境が必要だ)



以上でSIMロック解除は完了だ。





圏外になったり、飛行機モード、電源ON/OFFにより、
時々アクティベーション画面になることがある。

この頻度を下げるために、
電波をつかむキャリアを固定しておくと良い。
「設定」→「 キャリア」で「自動」をオフにして
「NTT DOCOMO」を選択する。




Carrier.png







3Gだと、
圏外、飛行機モード、電源ON/OFFでも、
よっぽどのことがない限り安定して動作している。
(時々、アクティベーション画面になることはあるが)



しかし、4Gをオンにすると、1日に一回くらいの頻度で
アクティベーション画面になってしまう。



近くに公衆Wifi等があればよいが、
オフラインな場所にいる時は、アクティベーションができなくて困る。




アクティベーション画面にならないために、
GPP3to2を使って2Gをオフにしてみたり、
iPhoneを探すをオフにしてみたり、
iPhone構成ユーティリティでiPhoneを探すアプリを削除してみたり、
色々とやってみたが、どうしても現状アクティベーション画面になることがある。



アクティベーション画面になることを解消される、
若しくは、新しい下駄が出ないものかと期待している。


とはいいつつも、3Gでの運用は十分可能だ。

    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 


というエントリで、温度と湿度についてグラフ表示ができることを紹介した。

今回は、BMP085という気圧センサを用いて、
気圧(hPa)、標高(m)が測定できるので、これをグラフ表示する。


私は気圧が低いと(低気圧が来ていると)眠たくなるような気がするので、
この減少を実際に気圧を監視することで確認したいと思う。


さて、少し話が脱線したが、
BMP085の話に戻ろうと思う。




bmp085.jpg
BMP085 (秋月電子) http://akizukidenshi.com/catalog/g/gM-08764/ 

秋月電子で価格は1,250円となかなかお高めだ。



◆主な仕様
・計測範囲:300~1100hPa(海抜約9000m~-500mmに相当)
・消費電流約:3μA(ウルトラ・ローパワー・モード時)
・I2Cインタフェース:最大通信速度3.4MHz
・I2Cアドレス:0x77[1110111]固定
・電源:3.3V~1.8V、または5V(3.3V三端子レギュレーター搭載)
・データ解像度:[気圧]16~19ビット、[温度]16ビット
・温度測定範囲:0~+65℃(仕様確度を満たす範囲)、-40~+85℃(動作範囲)




RaspberryPiとは、I2Cインタフェースで接続する。
I2C(Inter-Integrated Circuit)は、フィリップス社が提唱した周辺デバイスとのシリアル通信の方式とのことだ。
SCLとSDAという2本の線を使って、通信を行う。




まずは、ソケットピンをはんだ付けする。


bmp085_handa.jpg




上記写真は、裏側だが、
表から見て、右から順に①pin〜⑦pinと命名すると、
ピン配列は下記の通りとなる。


①pin:5V → 接続しない
②pin:3.3V → RaspberryPi 3V3(1番端子)
③pin:GND → RaspberryPi Ground(6番端子等)
④pin:SDA → RaspberryPi GPIO2(3番端子)
⑤pin:SCL → RaspberryPi GPIO3(5番端子)
⑥pin:XCLR → 接続しない
⑦pin:ECC → 接続しない



Raspberry-Pi-GPIO-Layout-Revision-2.png





ブレッドボードを使って接続した写真がこちら。


bmp085_impli.jpg








それでは、RaspberryPi側の設定を行う。

まずは、GPIOのI2Cインタフェースが使えるようにする。


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



$ sudo vi /etc/modules

#下記を追記
i2c-bcm2708
i2c-dev



$ sudo vi /etc/modprobe.d/raspi-blacklist.conf

#下記をコメントアウト
#blacklist spi-bcm2708
#blacklist i2c-bcm2708



$ sudo vi /boot/config.txt 

#下記を追記
dtparam=i2c_arm=on





$ sudo raspi-config

-> 8 Advanced Options

-> A7 I2C

→ONにする

リブート




以上でI2Cインタフェースが使えるようになる(はずだ)。


きちんとI2Cインタフェースが動いているか、確認する。

$ sudo i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 

70: -- -- -- -- -- -- -- 77   






次に、BMP085から、気圧等を読み取るためのサンプルプログラムを入手する。

$ wget https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/archive/master.zip
$ unzip master.zip


動かしてみる。

$ cd /Adafruit-Raspberry-Pi-Python-Code-master/Adafruit_BMP085
$ sudo python Adafruit_BMP085_example.py

Temperature: 20.60 C

Pressure:    1002.82 hPa

Altitude:    86.78



きちんと動作した。



それでは、
muninでグラフ化できるようにする。

余計は表示は削除する。

cp Adafruit_BMP085_example.py pressure.py

$ vi pressure.py

#!/usr/bin/python


from Adafruit_BMP085 import BMP085


# ===========================================================================

# Example Code

# ===========================================================================


# Initialise the BMP085 and use STANDARD mode (default value)

# bmp = BMP085(0x77, debug=True)

bmp = BMP085(0x77)


# To specify a different operating mode, uncomment one of the following:

# bmp = BMP085(0x77, 0)  # ULTRALOWPOWER Mode

# bmp = BMP085(0x77, 1)  # STANDARD Mode

# bmp = BMP085(0x77, 2)  # HIRES Mode

# bmp = BMP085(0x77, 3)  # ULTRAHIRES Mode


#temp = bmp.readTemperature()


# Read the current barometric pressure level

pressure = bmp.readPressure()


# To calculate altitude based on an estimated mean sea level pressure

# (1013.25 hPa) call the function as follows, but this won't be very accurate

#altitude = bmp.readAltitude()


# To specify a more accurate altitude, enter the correct mean sea level

# pressure level.  For example, if the current pressure level is 1023.50 hPa

# enter 102350 since we include two decimal places in the integer value

# altitude = bmp.readAltitude(102350)


print pressure / 100.0




作成したpressure.py等を、/usr/local/binへ移動する。

$ sudo cp *.py /usr/local/bin



次に、muninでグラフ表示を行うための設定を行う。
下記のように、pressure ファイルを作成する。

$ sudo vi /usr/share/munin/plugins/pressure

!/bin/sh


#%# family=auto

#%# capabilities=autoconf


GETNUM=`python /usr/local/bin/pressure.py`


if [ "$1" = "autoconf" ]; then

        if [ -n ${GETNUM} ] ; then

                echo yes

                exit 0

        else

                echo no

                exit 0

        fi

fi


if [ "$1" = "config" ]; then

        echo 'graph_title pressure'

        echo 'graph_args -r --lower-limit 0'

        echo 'graph_vlabel hPa'

        echo 'graph_category Weather'

        echo 'total.label pressure'

        echo 'total.min 0'

        echo 'total.draw LINE2'

        echo 'total.type GAUGE'

        exit 0

fi


echo "total.value $GETNUM";

~                              





muninでグラフ化できるように、
/etc/munin/pluginsへシンボリックリンクを張る。

$ sudo ln -s /usr/share/munin/plugins/pressure /etc/munin/plugins/pressure



次に、ここで著者はかなりハマったが、
BMP085への気圧取得アクセスは、ルート権限でなければならない。

そこで、muninがルート権限で値を取得できるように
設定を入れる。

$ sudo vi /etc/munin/plugin-conf.d/pressure

[pressure]

user root

~      




これでmuninの設定は完了だ。
後はmuninを再起動するだけ。

$ /etc/init.d/munin-node restart





あとは、muninで生成したhtmlをwebサーバで公開し、閲覧する。



気圧グラフ
pressure-day.png




このように、グラフ化することができた。
この日は、だいたい1000hPa程度だった。

1気圧は1013hPaなので、少し気圧が低めだが、まぁこんなもんだろう。




ちなみに、BMP085は、標高と温度も測定できる。
試しに、気圧と同じように標高をグラフ化する設定を投入し、描写したグラフが下記。



標高グラフ
altitude.png


BMP085の高さは変えていないにもかかわらず、
標高が127mと74mの間を行ったり来たりしていることになっている。
(家が上がったり下がったりしているのだろうか、、笑)


どうも、標高は気圧と気温の変化から換算した参考値のようだ。
つまり、標高はあまり当てにならない。





ちなみに、気圧が低くなると眠くなるというのは、本当のようだ。
上述のグラフでは、気圧は一定だが、
気圧が低下した際は、やはり眠くなることが確認できた。

どうも、気圧が低くなると、酸素濃度が低下し、また、少し暗くなることから、副交感神経が刺激されて、体が省エネモードになるらしい。





    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 

前回、温湿度センサDHT11(秋月電子で500円)を使って、
温度と湿度のグラフ表示に挑戦した。



しかし、DHT11は精度が低く、
温度・湿度ともに、あまり正確に記録できなかった。
(ハズレの個体をひいてしまったのか、湿度変化をほとんど計測できなかった)


そこで、DHT11の上位デバイスであるAM2302/DHT22を使って、
上述と同じように、温度・湿度のグラフ表示を行うことにした。


DHT22.jpg




◆主な仕様
・電源電圧:5V(3.5V~5.5V)
・消費電流:0.5mA(測定時)、15μA(スタンバイ時)
・サンプリング間隔:2秒以上
・内部ADコンバータ:各16bit
・サイズ:15×25×7mm(ピン含まず)
◆湿度センサ部
・測定範囲:0~99.9%RH ・精度:±2% RH(@25℃)
・繰り返し精度:±0.3% RH ・レスポンス:5秒以内(1/e (63%)、@25℃、風速1m/s)
◆温度センサ部
・測定範囲:-40~+80℃ ・精度:±0.5℃
・繰り返し精度:±0.2℃
・レスポンス:10秒以内(1/e (63%))
◆シリアル通信部
・形式:単線バス(双方向)、シリアル40bit構成
・出力データ:湿度16bit(分解能:0.1%RH)、温度16bit(分解能:0.1℃)
・出力:オープンドレイン
・通信距離:30m max(@5.1kΩプルアップ)
※秋月電子から転載



温度精度が±0.5℃(DHT11は±2℃)、湿度精度が±2% RH(DHT11は±5% RH)と、DHT11と比較し、なかなかの精度だ。
分解能も、温度0.1℃(DHT11は1℃)、湿度0.1%RH(DHT11は1%RH)と、DHT11と比較し、能力が高い。



AM2302/DHT22は、DHT11とデータ送信方式が同じだ。
つまり、DHT11と同じようにRaspberryPiと接続すればOKだ。


DHT22_on_board.jpg





AM2302/DHT22の向かって左から①〜④pinと命名するとすると、
下記のpin配置となる。
①pin:Vdd → RaspberryPi 3V3(1番端子)or 5V(2番端子)
②pin:SDA(DATA) → RaspberryPi GPIO4(7番端子)
③pin:NC → 接続しない
④pin:GND → RaspberryPi Ground(6番端子等)

また、①pinと②pinの間に5.1kΩの抵抗を挿入する。
(マニュアルにも記載があるが、30m以下のケーブルを接続する場合は、5.1kΩの抵抗でプルアップすると良いようだ)

加えて、①pinと④pinの間に、0.1uF程度のコンデンサを挿入する。
(高周波ノイズを逃がす為)
このコンデンサは、高周波特性の良いフィルムコンデンサや積層コンデンサ等が良い。
(電解コンデンサはあまり良くない)



Raspberry-Pi-GPIO-Layout-Revision-2.png





Raspi_GPIO.jpg








さて、接続が完了したので、
AM2302/DHT22から温度/湿度を取得する。
(DHT11との接続と基本的に同じである)


RaspberryPiからAM2302/DHT22の温度/湿度を取得する為のプログラムが
Githubにあがっていたので、これを活用する。



まずは、pythonをインストール。

$ sudo apt-get update
$ sudo apt-get install build-essential python-dev


Adafruit_Python_DHTのソースコードを取得。

$ sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT



インストール。

sudo python setup.py install


動作確認を行う。

$ cd examples

sudo ./AdafruitDHT.py 22 4

Temp=19.0*C  Humidity=46.0%



このように、きちんと表示された。
(ルート権限でなければ値を取得できないので、注意)




次に、グラフ表示を行うための設定を行う。
グラフ表示は、監視ツールとして近頃一般的なmuninを使う。
温度/湿度をそれぞれ取得するために、
AdafruitDHT.pyを少し編集する。


$ cp AdafruitDHT.py temp.py
$ vi temp.py

import sys


import Adafruit_DHT



# Parse command line parameters.

sensor_args = { '11': Adafruit_DHT.DHT11,

                '22': Adafruit_DHT.DHT22,

                '2302': Adafruit_DHT.AM2302 }

if len(sys.argv) == 3 and sys.argv[1in sensor_args:

    sensor = sensor_args[sys.argv[1]]

    pin = sys.argv[2]

else:

    print 'usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#'

    print 'example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4'

    sys.exit(1)


# Try to grab a sensor reading.  Use the read_retry method which will retry up

# to 15 times to get a sensor reading (waiting 2 seconds between each retry).

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


# Note that sometimes you won't get a reading and

# the results will be null (because Linux can't

# guarantee the timing of calls to read the sensor).  

# If this happens try again!

if humidity is not None and temperature is not None:

    print '{}'.format(temperature) #!!!!!!!←ここを左記のように編集!!!!!!!!


else:

    print 'Failed to get reading. Try again!'






同じく、湿度用も作成。
$ cp AdafruitDHT.py humid.py
$ vi humid.py

import sys


import Adafruit_DHT



# Parse command line parameters.

sensor_args = { '11': Adafruit_DHT.DHT11,

                '22': Adafruit_DHT.DHT22,

                '2302': Adafruit_DHT.AM2302 }

if len(sys.argv) == 3 and sys.argv[1in sensor_args:

    sensor = sensor_args[sys.argv[1]]

    pin = sys.argv[2]

else:

    print 'usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#'

    print 'example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4'

    sys.exit(1)


# Try to grab a sensor reading.  Use the read_retry method which will retry up

# to 15 times to get a sensor reading (waiting 2 seconds between each retry).

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


# Note that sometimes you won't get a reading and

# the results will be null (because Linux can't

# guarantee the timing of calls to read the sensor).  

# If this happens try again!

if humidity is not None and temperature is not None:

    print '{}'.format(humidity)  #!!!!!!!←ここを左記のように編集!!!!!!!!


else:

    print 'Failed to get reading. Try again!'




これらのスクリプトを、パスが通るところに移動する。
例えば下記のように。

$ sudo cp temp.py /usr/local/bin
$ sudo cp humid.py /usr/local/bin



次に、muninでグラフ表示を行うための設定を行う。
下記のように、temp ファイルを作成する。

$ sudo vi /usr/share/munin/plugins/temp

!/bin/sh


#%# family=auto

#%# capabilities=autoconf


GETNUM=`python /usr/local/bin/temp.py 22 4`


if [ "$1" = "autoconf" ]; then

        if [ -n ${GETNUM} ] ; then

                echo yes

                exit 0

        else

                echo no

                exit 0

        fi

fi


if [ "$1" = "config" ]; then

        echo 'graph_title temperature'

        echo 'graph_args -r --lower-limit 0'

        echo 'graph_vlabel C'

        echo 'graph_category Weather'

        echo 'total.label temperature'

        echo 'total.min 0'

        echo 'total.draw LINE2'

        echo 'total.type GAUGE'

        exit 0

fi


echo "total.value $GETNUM";

~                              






湿度についても、同様。

$ sudo vi /usr/share/munin/plugins/humid

#!/bin/sh


#%# family=auto

#%# capabilities=autoconf


GETNUM=`python /usr/local/bin/humid.py 22 4`


if [ "$1" = "autoconf" ]; then

        if [ -n ${GETNUM} ] ; then

                echo yes

                exit 0

        else

                echo no

                exit 0

        fi

fi


if [ "$1" = "config" ]; then

        echo 'graph_title humidity'

        echo 'graph_args -r --lower-limit 0'

        echo 'graph_vlabel %'

        echo 'graph_category Weather'

        echo 'total.label humidity'

        echo 'total.min 0'

        echo 'total.draw LINE2'

        echo 'total.type GAUGE'

        exit 0

fi


echo "total.value $GETNUM";








muninでグラフ化できるように、
/etc/munin/pluginsへシンボリックリンクを張る。

$ sudo ln -s /usr/share/munin/plugins/temp /etc/munin/plugins/temp
$ sudo ln -s /usr/share/munin/plugins/humid /etc/munin/plugins/humid






次に、ここで著者はかなりハマったが、
AM2302/DHT22への温湿度取得アクセスは、ルート権限でなければならない。

そこで、muninがルート権限で値を取得できるように
設定を入れる。

$ sudo vi /etc/munin/plugin-conf.d/temp

[temp]

user root

~            


$ sudo vi /etc/munin/plugin-conf.d/humid

[humid]

user root

~   





これでmuninの設定は完了だ。
後はmuninを再起動するだけ。

$ /etc/init.d/munin-node restart





あとは、muninで生成したhtmlをwebサーバで公開し、閲覧する。



温度変化グラフ

temp-day2.png





湿度変化グラフ

humid-day2.png






やはり、DHT11と比較し、AM2302/DHT22は精度が高い。
実際、加湿器の電源をONにした時のグラフ変化を見てみると、
DHT11では2%程度しかグラフに変化は現れなかったが、
AM2302/DHT22は10%程度グラフに変化が現れた。



これで、正確に温度・湿度を確認することができるようになった。
(空気清浄機の加湿器がきちんと動作しているか、監視できるようになった)







    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 
せっかくRaspberry Piを買ったので、GPIOを活用して
何かそれらしいこと(デバイス制御やらプログラミングやら)をやりたいと思っていた。

そこで、Raspberry Piと温湿度センサを活用して温度・湿度を測定し、グラフ表示することにした。
(たまたま空気清浄機を購入し、空気清浄機がちゃんと働いているのか確認したくなったので、湿度を監視することで、これを行うことにした)


まず、Raspberry Piにつながるセンサーだが、秋月電子で探してみたところ
DHT11という温湿度センサデバイスが500円で売られているのを見つけた。



DHT111.jpg


★DHT11の仕様
・電源電圧:3.5V~5.5V
・消費電流:0.3mA(測定時)、60μA(スタンバイ時)
・サンプリング間隔:2秒以上
・内部ADコンバータ:各16bit
・サイズ:12×15.5×5.5mm(ピン含まず)
◆湿度センサ部
・センサ:有機ポリマー
・精度:±5% RH(@25℃)
・繰り返し精度:±1% RH
・レスポンス:6秒以内(1/e (63%)、@25℃、風速1m/s)
◆温度センサ部
・センサ:NTCサーミスタ
・精度:±2℃(@25℃)
・繰り返し精度:±0.2℃
・レスポンス:10秒以内(1/e (63%))
◆シリアル通信部
・形式:単線バス(双方向)、シリアル40bit構成
・出力データ:湿度8bit(分解能:1%RH)、温度8bit(分解能:1℃)
・出力:オープンドレイン
・通信距離:20m max(@5.1kΩプルアップ)
※秋月電子から転載



温度精度が±2℃、湿度精度が±5% RHと、あまり精度は高くないが、
この価格なので許容範囲だろう。

Raspberry Piとの接続のために、ブレッドボード・ジャンパーコード(オス-メス)も合わせて購入した。


さて、Raspberry Piに接続。

DHT11_Raspi.jpg


ちなみに、購入したDHT11は基盤に実装されており、
センサ(青い四角)を上にし、端子(白)を下に見た状態で、
下記のピン配列となっている。

[DHT11 基板実装タイプピン配置]
左端子(緑線):DATA  → RaspberryPi GPIO4(7番端子)
中端子(赤線):VCC(3.3V or 5.5V)  → RaspberryPi 3V3(1番端子)or 5V(2番端子)
右端子(黒線):GND(0V)  → RaspberryPi Ground(6番端子等)


これらを、上記右に記載したRaspberryPiの端子に接続する。


Raspberry-Pi-GPIO-Layout-Revision-2.png






Raspi_GPIO.jpg







接続が完了したところで、いよいよDHT11から温度/湿度を取得する。


RaspberryPiからDHT11の温度/湿度を取得する為のプログラムが
Githubにあがっていたので、これを活用することにした。



まずは、pythonをインストール。

$ sudo apt-get update
$ sudo apt-get install build-essential python-dev


Adafruit_Python_DHTのソースコードを取得。

$ sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
$ cd Adafruit_Python_DHT



インストール。

sudo python setup.py install


動作確認を行う。

$ cd examples

sudo ./AdafruitDHT.py 11 4

Temp=19.0*C  Humidity=46.0%



このように、きちんと表示された。
(ルート権限でなければ値を取得できないので、注意)




次に、グラフ表示を行うための設定を行う。
グラフ表示は、監視ツールとして近頃一般的なmuninを使う。
温度/湿度をそれぞれ取得するために、
AdafruitDHT.pyを少し編集する。


$ cp AdafruitDHT.py temp.py
$ vi temp.py

import sys


import Adafruit_DHT



# Parse command line parameters.

sensor_args = { '11': Adafruit_DHT.DHT11,

                '22': Adafruit_DHT.DHT22,

                '2302': Adafruit_DHT.AM2302 }

if len(sys.argv) == 3 and sys.argv[1] in sensor_args:

    sensor = sensor_args[sys.argv[1]]

    pin = sys.argv[2]

else:

    print 'usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#'

    print 'example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4'

    sys.exit(1)


# Try to grab a sensor reading.  Use the read_retry method which will retry up

# to 15 times to get a sensor reading (waiting 2 seconds between each retry).

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


# Note that sometimes you won't get a reading and

# the results will be null (because Linux can't

# guarantee the timing of calls to read the sensor).  

# If this happens try again!

if humidity is not None and temperature is not None:

    print '{}'.format(temperature) #!!!!!!!←ここを左記のように編集!!!!!!!!


else:

    print 'Failed to get reading. Try again!'






同じく、湿度用も作成。
$ cp AdafruitDHT.py humid.py
$ vi humid.py

import sys


import Adafruit_DHT



# Parse command line parameters.

sensor_args = { '11': Adafruit_DHT.DHT11,

                '22': Adafruit_DHT.DHT22,

                '2302': Adafruit_DHT.AM2302 }

if len(sys.argv) == 3 and sys.argv[1] in sensor_args:

    sensor = sensor_args[sys.argv[1]]

    pin = sys.argv[2]

else:

    print 'usage: sudo ./Adafruit_DHT.py [11|22|2302] GPIOpin#'

    print 'example: sudo ./Adafruit_DHT.py 2302 4 - Read from an AM2302 connected to GPIO #4'

    sys.exit(1)


# Try to grab a sensor reading.  Use the read_retry method which will retry up

# to 15 times to get a sensor reading (waiting 2 seconds between each retry).

humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)


# Note that sometimes you won't get a reading and

# the results will be null (because Linux can't

# guarantee the timing of calls to read the sensor).  

# If this happens try again!

if humidity is not None and temperature is not None:

    print '{}'.format(humidity)  #!!!!!!!←ここを左記のように編集!!!!!!!!


else:

    print 'Failed to get reading. Try again!'




これらのスクリプトを、パスが通るところに移動する。
例えば下記のように。

$ sudo cp temp.py /usr/local/bin
$ sudo cp humid.py /usr/local/bin



次に、muninでグラフ表示を行うための設定を行う。
下記のように、temp ファイルを作成する。

$ sudo vi /usr/share/munin/plugins/temp

!/bin/sh


#%# family=auto

#%# capabilities=autoconf


GETNUM=`python /usr/local/bin/temp.py 11 4`


if [ "$1" = "autoconf" ]; then

        if [ -n ${GETNUM} ] ; then

                echo yes

                exit 0

        else

                echo no

                exit 0

        fi

fi


if [ "$1" = "config" ]; then

        echo 'graph_title temperature'

        echo 'graph_args -r --lower-limit 0'

        echo 'graph_vlabel C'

        echo 'graph_category Weather'

        echo 'total.label temperature'

        echo 'total.min 0'

        echo 'total.draw LINE2'

        echo 'total.type GAUGE'

        exit 0

fi


echo "total.value $GETNUM";

~                              






湿度についても、同様。

$ sudo vi /usr/share/munin/plugins/humid

#!/bin/sh


#%# family=auto

#%# capabilities=autoconf


GETNUM=`python /usr/local/bin/humid.py 11 4`


if [ "$1" = "autoconf" ]; then

        if [ -n ${GETNUM} ] ; then

                echo yes

                exit 0

        else

                echo no

                exit 0

        fi

fi


if [ "$1" = "config" ]; then

        echo 'graph_title humidity'

        echo 'graph_args -r --lower-limit 0'

        echo 'graph_vlabel %'

        echo 'graph_category Weather'

        echo 'total.label humidity'

        echo 'total.min 0'

        echo 'total.draw LINE2'

        echo 'total.type GAUGE'

        exit 0

fi


echo "total.value $GETNUM";








muninでグラフ化できるように、
/etc/munin/pluginsへシンボリックリンクを張る。

$ sudo ln -s /usr/share/munin/plugins/temp /etc/munin/plugins/temp
$ sudo ln -s /usr/share/munin/plugins/humid /etc/munin/plugins/humid






次に、ここで著者はかなりハマったが、
DHT11への温湿度取得アクセスは、ルート権限でなければならない。

そこで、muninがルート権限で値を取得できるように
設定を入れる。

$ sudo vi /etc/munin/plugin-conf.d/temp

[temp]

user root

~            


$ sudo vi /etc/munin/plugin-conf.d/humid

[humid]

user root

~   





これでmuninの設定は完了だ。
後はmuninを再起動するだけ。

$ /etc/init.d/munin-node restart





あとは、muninで生成したhtmlをwebサーバで公開し、閲覧する。


温度変化グラフ

temp-day.png




湿度変化グラフ

humid-day.png






このように、DHT11という温湿度センサにより取得したデータを
グラフ化することができた。


しばらく監視したが、どうもnanoeの空気清浄機はきちんと動作しているようで、
湿度は40%以下にはあまりならなかった。




    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 
私は古い一眼レフを使っている。
Cannon EOS Kiss Digital Nだ。

液晶サイズが小さく、撮った写真のピントが合っているか、いちいちCFカードをPCに読み取らせて確認する必要があり、たいへん不便だった。

最近は、FlashAirやEYE-FIのように、無線LAN機能付きのSDカードが出てきている。
Wifi経由でスマホとリンクして、撮ったその場でスマホから閲覧や編集ができるという優れものだ。

これを活用したいところだが、私の一眼レフは「CF(コンパクトフラッシュ)カード」にのみ対応で、SDカードは使えないので、無線LAN機能付きのSDカードはあきらめていた。


しかし、よく考えると、CFカードとSDカードを変換するアダプタが売られているので、
これを活用することで、CFカードの古い一眼レフで、無線LAN機能付きのSDカードが使えるのではないかと考えた。
トライしてみたので、レポする。


今回使ったCFカードとSDカードの変換アダプタはこちら。
1500円くらいだった。

CF_SD_Adaptor.jpg
※画像クリックで購入店へアクセス




そして、無線LAN機能付きSDカードは、評判の良いFlashAir。
16GBで3000円くらいだった。
FlashAir.jpg
※画像クリックで購入店へアクセス





総額5千円弱だ。
これを、KDN(EOS Kiss Digital N)に挿れてみた。

kdn.gif






問題なく認識し、Wifiの電波も飛んだ。

iPhoneにFlashAirアプリをインストールし、撮影した写真が見れるか確認してみた。



まずは、FlashAirのWifiが飛んでいることを確認。
(パスワードは 12345678 だ)



FlashAir_Wifi.png






次に、FlashAirのアプリを立ち上げる。
ちゃんと撮影した画像がサムネイル表示できる。


FlashAir_List.png







ちなみに、RAW(CR2)ファイルの表示はできなかった。

FlashAir_Files.png


このように、JPGファイルは画像が表示できるが、
RAW画像(CR2)は、表示できない。




JPGについては、iPhoneローカルに、画像を保存することができる。
Dropbox等へのアップロードも可能だ。


FlashAir_Save.png







このように、CFカードの一眼レフでも、CFカードとSDカードの変換アダプタをかませることで、問題なくFlashAirを使うことができる。


iPhoneの大きく高精細な画面で撮った写真を確認できるので、
出先でのピントボケの確認等がたいそう便利になった。

また、その場でiPhoneに転送し、Facebook等のSNSへの投稿や、友人への共有ができるようになった。

5千円程度費用がかかるが、たいへん便利なので、おすすめだ。




    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 
タイムズカーシェアリング(カープラス)は、ガソリン代が無料だ。
(12時間以上のパックは除く)


さらにお得なのが、ガソリンスタンドでガソリンを20リットル以上給油すると、
15分の料金が無料になる=給油割引を受けることができる。

さらに給油特典として、TCPプログラムの3ptがもらえる。


給油割引





タイムズのルールとして、
「燃料計が半分程度に減ったら、車内に設置している専用の給油カードにて給油をお願いいたします」
とのことなので、私は言葉通り半分程度減った時は給油することにしている。


今日も半分程度減っていたので、給油したが...
「17.63リットル」と、給油割引が適用される20リットルに満たなかった。


給油(ENEOS)





あと、2.37リットル分走れば、給油割引が適用されたのに...
と軽くショックを受けていたら...


なんと

給油割引適用




20リットルに満たなくても、給油割引が適用されたのである。
ラッキー!


ぴったり20リットルでなくても、およそ15リットル以上であれば、
給油割引は適用されるようだ。





タイムズカープラス 申し込みキャンペーン

今なら、下記紹介者コードを入力すると、60分間の無料チケットがもらえる。
(このブログのライターにも、60分の無料チケットが入ります)

紹介者コード: 0010-511586

    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks
 




RaspberryPiのサムネール画像のサムネール画像


MacBookをOS X10.10(Yosemite)にアップグレードした。

OS X10.10では、ファイル転送プロトコルとして、SMB3を利用するようになったとのこと。

そこで、Raspberry Piのファイルサーバ(Samba)を、ファイル転送が高速化されたというSMB3に対応したsamba4.2.0にアップグレードすることにした。


ちなみに、SMB1→SMB3では、ファイル転送速度に関わるところとして、
下記のアップデートがあった。

[SMB2]
・パイプライン機構によるパケット通信量の削減
 (複数の SMB 2 要求を 1 つのネットワーク要求として送信することによるオーバーヘッド削減)
・バッファサイズの拡大

[SMB2.1]
・MTUサイズの拡大(64KB→1MB)
 (一度に大きいパケットを送受できるので、パケットヘッダによるオーバーヘッドが減り、ギガビット転送効率の向上)
・スリープモード対応

[SMB3]
・SMBマルチチャネル(複数のNICを利用することで、転送効率向上)
・MTUサイズを1MBをデフォルトに
・SMBディレクトリ・リース(ディレクトリやファイルのメタデータ情報をローカルにキャッシュすることにより、特に、遅延時間の大きいブランチ・オフィスにおけるファイル・アクセスの応答時間が改善される)
・SMBダイレクト(RDMA対応NICを使った場合、CPUを使わずにファイル転送が可能)



また、Samba4.2からは、MacBook等のApple製品との互換性が強化された。
Apple製品との互換性も向上し、転送速度も向上するので、Sambaのバージョンを上げて損は無い。


さて、では、インストール方法だ。
Samba4.2のパッケージが、まだRaspberry Pi用に提供されていないので、
make、make installする必要がある。

まずは、Samba4.2のコンパイル&インストールに必要なパッケージをインストールしておく

$ sudo apt-get update
$ sudo apt-get upgrade

$ sudo apt-get install python-dev
$ sudo apt-get install libacl1-dev libblkid-dev
$ sudo apt-get install libgnutls28-dev
$ sudo apt-get install build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev libreadline-dev  python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr krb5-user  docbook-xsl



Samba4.2のソースコードを取得。

$ mkdir ~/src
$ cd ~/src
$ wget https://ftp.samba.org/pub/samba/samba-4.2.0.tar.gz

#ディレクトリやバージョン数は、適宜環境に合わせて変更してください


ダウンロードしたソースコードを解凍。

$ gzip -cd samba-4.2.0.tar.gz | tar xf -




自動設定し、makeする。

$ cd samba-4.2.0
$ ./configure  --enable-debug --enable-selftest
$ make

(4時間くらいかかるので、気長に待つ)


次に、インストール。

$ sudo make install


これでインストールは完了だ。
以降、設定していく。

まずは、DNSまわりの設定。
(Samba4から、Active Directoryが搭載されたため、DNS設定等が必要になる)

なお、DNSサーバは、bind9を運用しているため、「BIND9_DLZ」を指定した。
(DNSサーバを構築していない場合は、「SAMBA_INTERNAL」を指定する)

$ sudo /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive
Realm [raspberrypi.local]:
 Domain [local]:
 Server Role (dc, member, standalone) [dc]:
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: BIND9_DLZ
Administrator password:
Retype password:
Looking up IPv4 addresses
 
(中略)
 
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              r
NetBIOS Domain:        local
DNS Domain:            raspberrypi.local
DOMAIN SID:            S-x-x-xxxxxxxxxxxxx


DNS設定の続き。

 $ sudo vi /usr/local/samba/private/named.conf
dlz "AD DNS Zone" {
    # For BIND 9.8.0
    database "dlopen /usr/local/samba/lib/bind9/dlz_bind9.so";
# 動かしているbind9のバージョンに合わせて有効にする (コメントを削除する)
    # For BIND 9.9.0
    #database "dlopen /usr/local/samba/lib/bind9/dlz_bind9_9.so";  
};




bind9側の設定。

$ sudo vi /etc/bind/named.conf
// (下記一行を加える) 
// for samba4
include "/usr/local/samba/private/named.conf";



続き。

$ sudo vi /etc/bind/named.conf.options
options {
   //下記を書き加える    

   //for samba4

    tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";


}



keytabファイルのパーミッションを変更する。


$ sudo chgrp named /usr/local/samba/private/dns.keytab
$ sudo chmod g+r /usr/local/samba/private/dns.keytab



bind9のリスタート。

$ sudo /etc/init.d/bind9 restart



これで、bind9の設定は完了。

smb.confで基本設定を行う。

$ sudo vi /usr/local/samba/etc.smb.conf

[global]
    //下記を追記
    bind interfaces only = yes
    interfaces = 127.0.0.1/8 eth0

    //ログを残すために、下記を追記
    log file = /var/log/samba/log.%m
    log level = 1
    max log size = 1000


//共有ディレクトリの設定(通常のSamba設定)
[share]
comment = RaspberryPi File Server
path = /mnt/share
browsable = yes
writable = yes
read only = no
force create mode = 0666
force directory mode = 0777
create mask = 0777




デバッグモードで試運転してみる。

$ sudo /usr/local/samba/sbin/samba -i -M single
samba version 4.2.0 started.
Copyright Andrew Tridgell and the Samba Team 1992-2013
samba: using 'single' process model



エラーが吐かれなければOK。

Ctrl + C で一旦停止する。




自動起動するように、/etc/init.dにスクリプトを作成。



$ sudo wget "http://anonscm.debian.org/gitweb/?p=pkg-samba/samba.git;a=blob_plain;f=debian/samba.samba-ad-dc.init;h=3132d2e367675f822342a5b7bc2e50c046aa3b8f;hb=HEAD" -O /etc/init.d/samba-ad-dc

$ sudo sed -i 's|/usr/sbin|/usr/local/samba/sbin|g' /etc/init.d/samba-ad-dc

$ sudo chmod 755 /etc/init.d/samba-ad-dc
$ sudo update-rc.d samba-ad-dc defaults

$ sudo chkconfig --add samba-ad-dc
$ sudo chkconfig samba-ad-dc on
$ sudo /etc/init.d/samba-ad-dc start



以上で完了だ。


前回SMB2に対応させたが、さらに気持ち高速化されたように感じる。
時間がある時に、実際に転送速度を測定して比較したいと思う。

make と make install に少し時間はかかるが、
Sambaのバージョンをアップグレードすると、Apple製品との互換性が向上し、転送速度も向上するので、アップグレードしない手はない。

ぜひみなさんもお試しあれ。





    はてなブックマークに追加はてなブックマークユーザー数 Yahoo!ブックマークに登録 Google Bookmarks