
クルマの情報を取るためにiPhoneアプリを色々作ってきました。
こんなとこや
こんなとことか
こんなところでも…。
これらのアプリは、クルマの情報をマイコンで受けて、計算させて、BLE(Bluetooth規格)の無線で飛ばしてiPhoneに送って画面表示するような仕様になっています。
iPhoneと無線するにはBLE(Bluetooth Low Energy)に準拠したモジュールが必要となります。
世間では数種類個人でも買えるモジュールが存在しますが、5,000円近くするものも多く気軽に買えるものではありません。
今回Webで、Mpressionの「Koshian」(こしあん?)ってモジュールを見つけました。1,000円くらいの値段的にはお手頃なモジュールです。
この「Koshian」BLEモジュールは、ユカイ工学の「konashi」(こなし?)という小型化拡張ボード互換用のモジュールですので「Koshian on konashi base」で使用するのが通例のようです。
でも、koshianの内容を見ていたらなんとなくこれだけで繋がりそうなので1個買ってみました。
今回の目的は「KoshianだけでiPhoneと無線通信をする。」です…。
「Koshian」は、3.3V電源で駆動し、通信は「UART」「I2C」「SPI」が利用でき、「PIO0〜5」の6つのデジタルI/Oと「AIO0〜2」の3つのアナログポートを持っている。デジタルピンでPWMもできるみたいなので、任意のセンサーをくっつけてこのモジュールだけで色々制御ができそうです。
ただし、今回はKoshian単体で動かそうとしているのでちょっと工夫が必要。
Koshianについている端子は、ブレッドボードで使われている一般的な2.54mmピッチ
ではなく1.27mmピッチ幅となっています。
ブレッドボードでテストしようとすると、1つ飛ばしで端子をくっつけなければなんない…。しかも、1.27mmピッチのハンダ作業…。
んで…できた完成品が1枚目の写真…。
1つ飛びなので使用できる端子が限られます、使える端子から見ると外部との通信は「I2C」のみで、使える「I/O」は3つという仕様です。
で…。「I2C」が使えるようなので試しにPICマイコンとつなげてみます。
作った回路が下図。
今回の回路仕様…
①PICマイコンとKoshianはI2C通信。
②PICマイコン内で1秒刻みのタイマーを作る。
③PICマイコンのI/Oには1つの緑LEDをつけて信号で光るようにする。
④KoshianとiPhoneはBLE無線通信。
⑤iPhoneとKoshianが接続中は赤LEDを点灯させる。
回路仕様①の「I2C」接続については何回か作ったことがあるのでそんなに難しくないですが…。いままで作ってきたこととの相違点がいくつか…。
まずは、「I2C」通信は機器間で「マスター」と「スレーブ」がはっきり区切られています。マスターが通信の主導権を持っておりマスターが欲しい情報をスレーブに送信し、受信したスレーブがその情報を送信する形となります。
今回の回路においてはkoshianモジュールが「マスター」限定。PICマイコンPIC16F1705が「スレーブ」となります。マイコンがスレーブの振る舞いをするプログラムを作ればいいわけで、スレーブプログラムは初めてだけど、ここはマイコンのデータシートとにらめっこして理解済み。
あとは、Koshianの電源は3.3V。PICマイコンの電源は5.0VなのでI2Cを通信するには電圧のレベルシフトが必要になってきます。I2C通信を提唱しているPhilipsの仕様書ではFETを使ってレベルシフトをしていますが、今回はトランジスタを使ってレベルシフトをしています。普通に通信できているので良いのでしょう…w。回路中の2つのトランジスタがそれです。
回路仕様②〜③についてはマイコン内の「Timer0」と「Port」でちまちまプログラムをイジって作ってます。
回路仕様④については、要はiPhoneのアプリ作りになります。Mac上でXcodeでのコーディングとなります。
ユカイ工学の「konashi」小型化拡張ボード制御するために専用のSDKがネット上で公開されています。「Koshian」にもそのまま使用でき、これが秀作でとても使いやすい。I/OポートのON-OFFであったり、アナログポート通信の処理など全ての処理がSDKで公開されています。これを使えばXcode上で回路の制御プログラムができてしまします。
ただし、このSDKはレガシー言語である「Objective-C」で書かれています。現在のiPhoneアプリ作りの主流は「Swift」。Objective-Cで記述してもいいけどSwiftのほうがもう慣れちゃったんでなんとかSwiftで書いてみます。Objective-C言語とSwift言語の間をプログラムブリッジを使って混在させてSwiftメインで書く技法で作ってみました。
回路仕様⑤については、赤LEDをKoshianのI/Oモジュールにつけて、BLEの接続が成立したら点くようにアプリ側でコーディングしています。
できたアプリはテスト用のほんと、素っ気ない簡単なアプリです。
よかったら動きをみてください。
なんとか動いてるみたいです。今回のプログラムはクルマに使うことを想定してプログラムを作ってみました。いつでもクルマ用の回路に転用可能です。
このモジュールのSDKはiPhoneアプリで回路を制御できます。今まで作ってきた回路はマイコンをプログラムのメインとして通信をしていましたが、マイコンの狭いメモリ範囲でアセンブラやC言語でちまちま打つよりiPhoneの広大なメモリ内でSwiftでプログラムした方が圧倒的にできることの幅が広がります。
あとはこのモジュールが使用範囲で使えるモジュールかを確認するために、何かネタを探してまた何か作ってみます…。
ブログ一覧 |
電子回路 | 日記
Posted at
2017/09/24 20:37:00