Inter-Integrated Circuit(IIC)通信という名を聞くのは、初めてという人も多いと思います。これは、表記上「I2C」と表記されることが多く「アイ・ツー・シー」とも呼ばれている通信形式です。
難しいことは他のページに任せるとして、このI2Cを使用することで、周辺に様々なセンサーやディスプレイなどを接続できるようになります。
端子を見ると、GND,5V、クロック信号SCL、データ信号SDAの4ピンが並んでいます。ただし、このピンの並びは特に規定がないので、製品によってまちまちです。
micro:bitでは、P19,P20がSCL,SDAに相当します。
iːoでは、下写真のように装置の右側にこの4ピンがあります。
ここから、I2Cを接続することができる製品を何点か紹介します。
LCDディスプレー
有名な16文字×2行のLCDディスプレー「LCD1602」を使って、文字や数字を表示できます。
iːoとLCDの間は、メスーメスのジャンバ線でつなげます。(※補足も参照のこと)
LCDディスプレーを使う際は、①iːoに乾電池をセットしてスイッチをONにする、②拡張機能から「LCD」を検索させて、ブロックを読み込むと使用できます。
初めてつなげた際は、裏の可変抵抗を回して見やすいように調整します。
バックライトもあって文字も大きいので、とても読みやすいです。
OLEDディスプレー
まずは、小型のOLEDディスプレーです。ちょうどピンの配列も同じなので、OLEDディスプレー側がメス型のソケットならば、次のようにそのまま気軽にさすことができます。(メスソケットは、部品として販売しています)(I2Cレベル変換を行う回路は不要 ※補足参照のこと)
micro:bitにも5×5のLEDで文字や数字を表せますが、OLEDディスプレーだとより多くの情報を表示できます。
ちなみに、このOLEDディスプレーを使う際は、①拡張ピンを使用する際は、iːoに乾電池をセットしてスイッチをONにする、②拡張機能から「OLED」を検索させてブロックを読み込むと使用できます。
気象センサーBME280
続いて、気象センサーBME280を紹介します。このセンサーは、気圧・湿度・気温を読むことができる優れものです。より安価なBMP280(気圧・気温)もあります。残念ながら、I2Cのピン配置が異なるので、コードを使って接続します。
こちらも、拡張機能から「BME280」と検索して読み込みます。
特に気圧センサーですが、Pa(パスカル 気象で一般に使っている単位は1/100のhPa(ヘクトパスカル))まで読み込むことが可能です。
下のグラフは、micro:bitのデーターをもとに、Excelでデーターを処理したものです。1Fから3Fまでの気圧変化を捉えたものです。地面から3Fまでに、約80Pa変化しています。
気象学的には1mで10Pa変化するそうなので、3Fまでの高さが8mとして80Paの変化になります。このセンサーを使うことで、中学校の気象の学習に利用できそうです。
ここまで精度がいいので、もしかしたらセンサーを持って立ったりしゃがんだりするだけで気圧の変化が分かると思いやってみました。下のビデオが、そのときのビデオです。山になったときがしゃがんだとき、谷になったときが立ち上がったときです。
約15Paの変化です。(1.5mの上下と言うことになります)立つ・しゃがむでも、気圧って変化するんですね!当たり前のようですが、日頃生活で感じられない気圧の変化をmicro:bitが正確に測定できるので、ビックリです!なんか、大気の重さを感じました。
補足
micro:bitは3.3Vで動作しています。周辺機器が5Vで動作している場合、通信が約3Vと5Vが混在することになり、短期間で問題なく動いていても長時間使用すると故障の原因になったり、通信がうまく行かなくなったりする場合が考えれます。そこで、I2Cレベル変換を行う回路を入れて接続するのが安全です。
また、周辺機器からmicro:bitへの一方通行の通信の場合は、抵抗を2つつないで中間の電圧を取り出すとレベルを合わせることができます。
・(5V)周辺機器→micro:bitへの一方向の通信の場合は、次のように分圧してレベルを合わせる。
(※micro:bit→(5V)周辺機器への通信は、そのままで普通問題ない。)
・I2Cのような双方向通信の場合は、次のような部品を使用してレベル変換する
考察
直接つないで電圧を合わせないとき、LCD1602やOLEDとの通信時の電圧はどうなっているのか調べてみました。縦軸1メモリは1Vになります。黄色SCL、水色SDAです。
micro:bitとLCD1602の通信
OLEDとの通信時
私は、micro:bitの3.3VとLCDの5V(電池から供給なので、約4.5V)が混在しながら通信すると予想していたのですが、LCD1602は3.5V、OLEDは3.3Vで通信が行われていました。特に、OLEDは正確に3.3の通信が行われていたので基板を確認したところ、内部で5V→3.3Vへの変換が行われているようでした。
OLEDの方は、内部で電圧変換が行われているので、全く問題ないことが分かりました。
LCD1602は3.5Vで通信が行われていて、約1V分はどこに行ったのか不思議です。micro:bitで使用しているMCP(MKL27Z256VFM4)のカタログ上の最大値が3.5Vということなので、ぎりぎりアウトぎみと言えるのでしょうか?詳しくないので、どなたかご存じの方は教えてください!