LoginSignup
11
12

More than 5 years have passed since last update.

IRKit のファームウェアをカスタマイズする

Posted at

IRKit といえば、スマフォから赤外線リモコンの学習リモコンとして使う一般的な用途はもちろんのこと、WiFi の httpd 経由で RESTful な API を通して赤外線を送受信できることから、開発者にとってハックしがいがあるデバイスである。

20151018-DSC04542.jpg

しかしながら、もう一つ IRKit は「オープンハードウェア」という視点からも非常にハックしがいがあるデバイスで、以下のデータが公開されている。

IRKit のファームウェアをカスタマイズする

前述の通り、IRKit は Arduino Leonardo との互換アーキテクチャを採用しており、その環境で開発することができる。

僕が大好き platformio を用いてファームウェアを書き込むには、firmware/src/platformio.ini を

[platformio]
src_dir = IRKit

[env:leonardo]
platform = atmelavr
framework = arduino
board = leonardo
# targets = upload

で用意し、あとは普通に

$ platformio run -t upload

で難なく書き込んで動かすことができる。かんたん!!!

また log.h を見るに、コンパイル時のビルドフラグでログ関係の物をいくつか定義すれば、シリアルコンソール経由でログが見れるのでセットしてみる。

[platformio]
src_dir = IRKit

[env:leonardo]
platform = atmelavr
framework = arduino
board = leonardo
# targets = upload
build_flags = -DMAINLOG -DGSLOG -DHTTPLOG -DHTTPLOG -DIRLOG -DKEYLOG

あとは再度書き込んで、シリアルコンソール経由で表示する

$ platformio run -t upload && platformio serialports monitor

これでログがいろいろと表示されるように。

CONNECT f
c< CONNECT f

OK
c< OK
c> AT+SSLOPEN=f,cacert

OK
c< OK

続いて正常接続時の LED の色を変えてみる。

diff --git a/firmware/src/IRKit/IRKit.ino b/firmware/src/IRKit/IRKit.ino
index 0a4c6a5..647131e 100644
--- a/firmware/src/IRKit/IRKit.ino
+++ b/firmware/src/IRKit/IRKit.ino
@@ -211,7 +211,7 @@ void process_commands() {
 }

 void on_irkit_ready() {
-    color.setLedColor( 0, 0, 1, false ); // blue: ready
+    color.setLedColor( 1, 1, 1, false ); // white: ready
 }

 void on_ir_receive() {

これで白に。本当は PWM で出力弱めたかったんだけど、LED 接続してるピンが1ピンしか対応してない && そのピンでも何故かうまくいかない(timer割り込み周り?)ので白にしてみた。

そのほかの見所

Arduino Leonardo にのってるチップ、ATmega32U4 はプログラム用メモリが 32KB (正確にはアップロードできる最大サイズは 28672 Byte) のため、できる限りプログラムサイズを小さくすべく、ライブラリをそのまんま使わず必要な箇所だけ実装したりしてる(それでも標準で約 26000 Byte使ってる)。

WiFi のアクセスポイント実装

IRKit は最初の設定時、ホストのアクセスポイントになり、そのAPを叩くことで家庭のアクセスポイントのSSID, password などを記録し、その後ふつうの挙動になる。という実装も GSwifi.* 等を見ると WiFI チップの GS1011MxxS とどう AT コマンド経由でやりとりしてるのか解る。

test いろいろ

テストが書けるような作りを意識していて、firmware/t 以下にテストが沢山ある!!!

普通に gcc でコンパイルして動かせるようなユニットテストから、実機にアップロードして結合テストまで、いろいろなテストがあって素晴らしいなぁ…。

また C/C++ で使える "yet another TAP library for C/C++" の nanotap を使ってる箇所が多い。tokuhirom 作なのかー、知らなかった。

データの保持

最初、学習データ自体を IRKit 本体に保存してるのかと思ったけど、学習データは保存してない(= スマフォなどアプリ側に保存してる)。ATmega32U4 の EEPROM だけだと 1KB しか保存できないので、そうですよね。

終わりに

まだまだいろいろなことができる余地があり、例えば冒頭の写真のようにケースを開けるとピンヘッダの空きポートがあり、自分でさらにセンサー等を追加することもできる。

そんなこんなで、IRKit は WiFi 赤外線リモコンという通常の使い方以外でも大変面白いので、みなさん触ってみると良いと思いました!

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12