1. はじめに
IoTの組み込みファームウェア開発に必要な知識とスキルは、プログラミングスキルだけではなく、使用するOSに関する知識、ハードウェアに関する知識 (デバイス、ドライバー)、通信に関する知識 (ネットワークスタック、RF制御、クラウドとの通信)、システムに関する知識、サーバーに関する知識、セキュリティに関する知識が必要です。
NEQTOでは、上記IoTで必要となる知識を極力不要とし、ユーザー様がアプリケーション開発に注力できるようデバイスとクラウドの運用・開発環境を提供しています。
またユーザー様のデバイス側のアプリケーションをJavaScript (neqto.js) で開発できる特徴があり、JavaScript言語での開発メリットについてもっと詳細に知りたい方は、以下リンク先をご確認ください。
資料ダウンロード
今回はneqto.jsの1つであるI2Cオブジェクトに焦点を当て、NEQTOから3軸加速度センサーをI2Cインターフェースで制御した例をご紹介します。
2. I2Cとは?
I2Cはクロックに同期させてデータの通信を行うシリアル通信のひとつです。
I2CはSDA、SCLの2本の信号線を用いて通信します。
SDAはデータの送受信を行うための信号線で、SCLはクロックのための信号線です。
通信を行う際はマスターとスレーブというように役割を分け、マスター側からスレーブ側に対して送信や受信の指示をします。また、クロックは必ずマスターから出力され入出力データはクロックに同期して行われます。(NEQTOはマスターモードのみ対応)
I2Cは使用する信号線が2本と少ないため、配線が容易です。また1つのマスターに複数のデバイスを接続することができます。例えば複数のセンサーを接続し、データを取得したい場合はI2Cが適しています。

neqto.jsでは、このI2Cに対応したI2Cオブジェクトを提供しています。
以下にI2Cオブジェクトの概要を示します。
Methods()/Properties | Summary |
---|---|
new I2C() | I2Cインスタンスを生成します。 |
Methods()/Properties | Summary |
---|---|
.open() | 通信を開始します。 |
.close() | 通信を終了します。 |
.write() | データを書き込みます。 |
.read() | データを読み込みます。 |
.writeRead() | データを書き込み後にデータを読み込みます。 |
3. 3軸加速度センサーを用いたデモ
それでは、I2Cインターフェースを使用した例として、3軸加速度センサーから重力加速度データを取得するデモを紹介します。3軸加速度センサーは、例えば衝撃・落下の検知や、機械や設備の故障検知などに利用できます。
今回使用する3軸加速度センサーはSTマイクロエレクトロニクス社のLIS2DW12アダプターボードです。
I2Cオブジェクトを使用して、LIS2DW12の「WHO_AM_I」レジスタをリードしてみます。
NEQTO Docsの「I2Cオブジェクトの使用例」に記載してあるSample1のコードを基に、スレーブアドレス0x18へ「WHO_AM_I」のレジスタ0x0fをセットし、その後スレーブアドレス0x18から1バイトリードするスクリプトを実行しました。

LIS2DW12の「WHO_AM_I」レジスタの値


I2Cオブジェクトを使用して「WHO_AM_I」レジスタの値をリードすることが出来ていることを確認しました。
次にI2Cオブジェクトを使用したLIS2DW12ライブラリーでX軸、Y軸、Z軸の重力加速度データを取得し、NEQTO Consoleへデータ送信します。
3.1 構成品
- STマイクロエレクトロニクス社STM32 Discovery Kit
- STマイクロエレクトロニクス社LIS2DW12アダプターボード

接続例

接続図
X軸、Y軸、Z軸の検出方向および極性は下図の通りです。

3.2 取得データ
下図がX軸、Y軸、Z軸の測定結果です。
測定は1秒周期で行っており、加速度センサーの傾き方によってX軸、Y軸、Z軸の重力加速度が変化している様子が確認できます。
X軸方向のみに重力加速度を加えた場合


X軸

Y軸

Z軸
Y軸方向のみに重力加速度を加えた場合


Y軸

X軸

Z軸
Z軸方向のみに重力加速度を加えた場合


Z軸

X軸

Y軸
4. おわりに
今回はneqto.jsの拡張オブジェクトのI2Cオブジェクトを用いた例として、3軸加速度センサーのレジスタリードとLIS2DW12ライブラリーを使用した3軸加速度センサーから重力加速度データを取得する方法をご紹介しました。今回ご紹介したデモは、neqto.jsを用いたアプリケーションの開発のみで行いました。
デモの動作は、JIG-SAWがNEQTOエンジンで提供するOS、デバイスドライバー、ネットワークスタック、RF制御、クラウドマネジメント、セキュリティのもとで動作しており、ユーザー様は意識する必要がありません。
neqto.jsでは他にもUART、SPIの様なシリアル通信や、HTTP、MQTTに対応した拡張オブジェクトが用意されており、用途に応じてご使用いただけます。
また、STM32 Discovery Kitはインターネットで購入が可能なため、ユーザー様はお気軽に利用することができます。
本記事がNEQTOをご利用いただけるきっかけになれば幸いです。
リンク
今回使用したデバイス
STM32L4+ Discovery kit IoT node [B-L4S5I-IOT01A]: STマイクロエレクトロニクス
3軸加速度センサー [MKI179V1]: STマイクロエレクトロニクス