バッテリー情報を取得する
前回からちょっと間が空きましたが(年末年始は忙しいねぇ)、今回はバッテリーの情報を取得してみます。
使用したモジュールはINA219(秋月電子で購入)です。
接続
INA219の電源電圧は3.3V〜5Vなので、ラズパイのGPIOに合わせて3.3Vで接続します。
ラズパイのGPIO、バッテリーとの接続は以下のとおりです。
INA219B | Raspberry Pi | バッテリー |
---|---|---|
1. VIN+ | + | |
2. VIN- | - | |
3. GND | 6. GND | |
4. VCC | 1. 3V3 power | |
5. SCL | 5. GPIO3(SCL) | |
6. SDA | 3. GPIO2(SDA) | |
7. A0 | NC | |
8. A1 | NC |
※前回の記事で、I2Cは有効にしているのでI2Cの設定は端折ります。
複数のI2Cデバイスを接続する場合の注意点
ラズパイ側のI2C1つに対して複数のデバイスを接続する場合、プログラム側の処理を正しく書かないとエラーが出ます。
当たり前といえばそうなのですが、それぞれのデバイス用にNodeを作って実行させると1つのデバイスの通信中に他のデバイスの通信処理が入って(バッティングして)エラーになるというわけです。
なので、複数のI2Cデバイスを繋いで処理させる場合は、1つのNode内でプログラムを書いて、pythonの場合だとthreading.Lock()を使って、個々のデバイス処理が終わるまで待機するようにするのが良いようです。
実際の処理コードについて、前回の記事で紹介したBNO055用のROS2パッケージにそのものズバリな処理が書かれていますので、ご参照ください。
※ようは、個々の処理をスレッドにして、それぞれのスレッドは他のスレッドが終わるまでロックして処理が走らないようにしているという仕組みです。
ドライバーのインストール
INA219はAdafruitからライブラリが出ていますので、以下のコマンドでライブラリをインストールします。
$ sudo apt update
$ sudo pip3 install adafruit-circuitpython-ina219
自分の環境(構成)の場合は、複数のI2Cデバイスがつながっているため、ROS2用のパッケージを自分で作る必要がありましたので、Gitにアップしました。
※BNO055 + INA219 の接続処理が書かれています。
Gitクローンして、ビルドして、ローンチファイルに追加してください。(だんだん説明が雑になっていく。。。)
Web側の処理
Web側は特に前回と処理自体は変わりません。
前回のJavascriptに + の行を以下のように追記します。
+ function ros_battery_topic_subscribe() {
+ battery_listener.subscribe(function(message) {
+ let voltage = message.voltage.toFixed(2);
+ let current = message.current.toFixed(2);+++
+ $('#rbBarText').html(voltage + 'V');
+ $('#rcBarText').html(current + 'A');
+ });
+ }
$('#start').on('click', function() {
ros_camera_topic_subscribe();
ros_imu_topic_subscribe();
+ ros_battery_topic_subscribe();
});
$('#stop').on('click', function() {
camera_listener.unsubscribe();
imu_listener.unsubscribe();
+ battery_listener.unsubscribe();
});
HTML側も追記します。
+ <div id="rbBarText"></div>
+ <div id="rcBarText"></div>
<div id="main-contents">
<img id="camera_view" src="">
<div id="camera_frame">
<img id="camera_roll" src="img/roll_white.svg">
<img id="camera_yaw" src="img/yaw_white.svg">
</div>
<div id="camera_pitch">
<img src="img/pitch_white.svg">
</div>
</div>
レイアウトは適当ですので、アレンジしてみてください。
動作確認
結構改良してしていますので、全然見た目は違いますが、今の感じはこんなのです。
バッテリー監視は、ラズパイ側バッテリーと、別電源の両方を監視。
また、温湿度センサーで外気温なども所得
スマホ側のカメラとラズパイ側のカメラの同時表示をしています。
ブラウザでスマホのカメラを使用する場合、SSL(HTTPS)接続が必須になるため、rosbridge_suiteの初期設定のままでは使用できません。(WSSで繋ぐ必要がある)
次回はそのあたりの記事を書こうかなと思います。
あ、ハードウェア編も書いていきたい。