I2C接続の超音波センサーである、SRF02のアドレス変更に挑戦してみました。
これまで、I2Cモジュールの接続は、あっけないほど簡単だったのですが・・・
今回のアドレス書き換えには苦労しました。
まず、ネットで書き換えのための説明を確認すると・・・
3つのコマンドを順番に送れば良いことが判りました。
0xA0,0xAA,0xA5
です。
その後に、新しいアドレスにしたい数値を送付します。
試しに・・・デフォルトの0xE0を0xF2に変えようと思って、以下のプログラムを実行してみます。 (以下は主要部分だけ)
Wire.beginTransmission(i2cAddress);
Wire.send(0xA0);
Wire.send(0xAA);
Wire.send(0xA5);
Wire.send(0xF2);
Wire.endTransmission();
さて、書き換わったかと思いきや・・・なにも変わっていません。
そうか、やっぱり先頭に Command の 0x00 を書かないとだめなのか・・・
Wire.beginTransmission(i2cAddress);
Wire.send(0x00);
Wire.send(0xA0);
Wire.send(0xAA);
Wire.send(0xA5);
Wire.send(0xF2);
Wire.endTransmission();
よし、これで・・・変わらない・・・
もう、いろいろやってみました。
でも・・・変わらない・・・
もう一回、冷静にネットでSRF02のアドレス書き換えについて書かれているページを検索して、英語を何度も読んでみたところ・・・
アドレス書き換えのためのコマンド1個1個を独立して送らなければならないようです。
ということで・・・
Wire.beginTransmission(i2cAddress);
Wire.send(0x00);
Wire.send(0xA0);
Wire.endTransmission();
Wire.beginTransmission(i2cAddress);
Wire.send(0x00);
Wire.send(0xAA);
Wire.endTransmission();
Wire.beginTransmission(i2cAddress);
Wire.send(0x00);
Wire.send(0xA5);
Wire.endTransmission();
Wire.beginTransmission(i2cAddress);
Wire.send(0x00);
Wire.send(0xF2);
Wire.endTransmission();
としてみたら・・・やっとアドレスが書き換わりました。
今回は長かった!
これで、やり方は理解できました。
(9.99GBPの出資がムダにならずに済んでほっとしてます。)
で、このSRF02の素晴しいところは・・・電源を入れると、設定されている自分のアドレスをLEDの点滅で表示してくれるんです。 これなら、アドレスを変更しても、判らなくなることがありません。
こんなに小さいのに素晴しい機能です。