秋月電子で売られていたI2C接続小型キャラクタLCDモジュール 8×2行について、RaspberryPiに直接つないでも表示されない旨がQ&Aにいつの間にか記載されていた。
以前の製品だと直接つないでも表示できたのだが、最近の物はそれができなくなった。
物によって表示できたりできなかったりしているのは知っていたので、改めてLCDモジュールを買って確かめてみた。
/RESET端子はいちいちプルアップ抵抗を準備するのも面倒なので、チップ抵抗を直接取り付けてみた。
そしてI2Cバスリピーター PCA9515ADの有無で動作を確認してみる。
root@rasapp:~# 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: -- -- -- -- -- -- -- -- root@rasapp:~#
PCA9515ADがない場合、確かに認識しない。
root@rasapp:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@rasapp:~# root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0x40 0x77 0x61 0x69 0x74 0x20 i root@rasapp:~#
今度はLCDを認識して文字を表示できる。
ところで、以前ApplePiを作った時に最初のinitLCD.shコマンドはほぼ失敗して2回目以降から成功すると書いたことがある。
ApplePiを取り付けた状態でi2csetコマンドを電源投入直後に打って確認してみる。
root@rasapp:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- pi@rasapp:~ $ pi@rasapp:~ $ pi@rasapp:~ $ i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i Error: Write failed pi@rasapp:~ $ pi@rasapp:~ $ i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i pi@rasapp:~ $ pi@rasapp:~ $ i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i pi@rasapp:~ $ pi@rasapp:~ $ i2cset -y 1 0x3e 0 0x01 i pi@rasapp:~ $ pi@rasapp:~ $ i2cset -y 1 0x3e 0x40 0x77 0x61 0x69 0x74 0x20 i pi@rasapp:~ $
1回目のi2csetコマンドでError: Write failedとなるが、2回目以降はコマンドは成功する。
しかし、今回秋月で買ったPCA9515AD(NXP製)を使ってLCD単体をつないだ時にエラーが発生したことがまったくない。
今のままでも動いているけど、毎回エラーが発生しているのも気持ちが悪いので、PCA9515を換装してみることにする。
しかし、PCA9515は温度/湿度/気圧センサの下に隠れている。
何とかセンサを取り外してTI製PCA9515AをNXP製PCA9515Aに交換する。
左の写真がTI製PCA9515Aで、右がNXP製PCA9515A。
100円ショップで買ったレンズをつけてスマホで写真撮ったけど、中心はきれいに取れても全体は歪んでしまうのな。
何とかしたいな。
取り外したTI製PCA9515Aは検証用にピッチ変換基板に取り付ける。
もう一つは、以前秋月で買って確認用に準備したもの。
しかしこの写真じゃどっちがどっちかわからないな。
TI製とNXP製の違いについてまずはLCDだけつないで確認してみる。
TI製PCA9515Aの場合
root@rasapp:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@rasapp:~# root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0x40 0x77 0x61 0x69 0x74 0x20 i root@rasapp:~#
NXP製PCA9515Aの場合
root@rasapp:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@rasapp:~# root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0x40 0x77 0x61 0x69 0x74 0x20 i root@rasapp:~#
電源を抜いてある程度時間をおいてから試験してみたけどやっぱりTI製でエラーが発生しない。
次にRTCをつないなどつないで確認してみる。
TI製PCA9515Aの場合
root@rasapp:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0x40 0x77 0x61 0x69 0x74 0x20 i root@rasapp:~# root@rasapp:~# root@rasapp:~# timedatectl status Local time: 日 2016-10-23 16:01:39 JST Universal time: 日 2016-10-23 07:01:39 UTC RTC time: 火 1965-07-20 06:36:28 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a root@rasapp:~#
NXP製PCA9515Aの場合
root@rasapp:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0x40 0x77 0x61 0x69 0x74 0x20 i root@rasapp:~# root@rasapp:~# root@rasapp:~# timedatectl status Local time: 日 2016-10-23 15:35:22 JST Universal time: 日 2016-10-23 06:35:22 UTC RTC time: 火 1965-07-20 06:36:28 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a root@rasapp:~#
やっぱりエラーは発生しない。
組み合わせの問題なのか、センサも必要なのかよくわからない。
結局何だったのだろうか。
それともかくRTCの試作基板は少し手直しした。
プルアップ抵抗のON/OFF用のディップスイッチを使っているが、1個分余っていたのでバックアップバッテリーのON/OFFにした。
リセットのためにいちいち電池を取り外したり取り付けたりが面倒だったため。
保管中もずっと動きっぱなしってのも気になったし。
また、公式LCD用に作ったスイッチ基板のLEDも3つにした。
とりあえず元の状態に戻して、しばらく時間をおいてから確認してみる。
root@rasapp:~# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x38 0x0c 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0 0x01 i root@rasapp:~# root@rasapp:~# i2cset -y 1 0x3e 0x40 0x77 0x61 0x69 0x74 0x20 i root@rasapp:~# root@rasapp:~# root@rasapp:~# timedatectl status Local time: 日 2016-10-23 16:46:01 JST Universal time: 日 2016-10-23 07:46:01 UTC RTC time: 火 1965-07-20 06:36:28 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a root@rasapp:~#
とりあえず時間をおいて起動してからLCDに対してi2csetコマンドを打ってみたけどエラーは発生しなくなった。とりあえず、これはこれでOKかな。
RTCは相変わらずだが。
さて、センサを取り外す際結構時間がかかってしまい長時間熱を加えてしまったので、センサが正しく動いているか確認してみる。
pi@rasapp:~/ApplePi $ ./getBME 28.54C 100732Pa 40.76% pi@rasapp:~/ApplePi $
温度高いなってちょっと待て。
部屋の温度は24℃ぐらいなのだが。
RaspberryPiを触ってみるとほんのり暖かい。
扇風機を使って放熱してみる。
pi@rasapp:~/ApplePi $ ./getBME 25.24C 100744Pa 47.11% pi@rasapp:~/ApplePi $
部屋の温度に限りなく近くなった。
次に扇風機を止めて30分以上放置してみた。
pi@rasapp:~/ApplePi $ ./getBME 32.50C 100795Pa 32.30% pi@rasapp:~/ApplePi $
温度上がりまくりだな。
トラ技の記事にも載っていたけど、センサを使うには延長するしかない。
センサ側にプルアップ用の抵抗が入っていて、それで全体をプルアップしている状態なのでややこしいことになっているのだろうな。
ちなみに、電源を切った状態で数時間放置後に再度電源を入れて温度を測る。
pi@rasapp:~/script/ApplePi# ./getBME 26.36C 100893Pa 47.50% pi@rasapp:~/script/ApplePi#
RaspberryPiがまだ温まり切ってないので室温に近い温度を示している。