• I2Cインターフェースを簡単制御!neqto.jsのI2Cオブジェクトをご紹介

本記事のポイント

本記事ではIoT-CoreエンジンNEQTOの特徴の一つであるneqto.jsによるデバイスの開発について紹介していきます。

neqto.jsはNEQTO Engine上で動作するJavaScriptの開発環境です。
その中でも今回はNEQTO RTOS版のI2Cオブジェクトについて紹介していきます。



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が適しています。

I2Cの接続

neqto.jsでは、このI2Cに対応したI2Cオブジェクトを提供しています。
以下にI2Cオブジェクトの概要を示します。


Abstracts

Methods()/Properties Summary
new I2C() I2Cインスタンスを生成します。

{I2C}Instance

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バイトリードするスクリプトを実行しました。

「WHO_AM_I」レジスタ

LIS2DW12の「WHO_AM_I」レジスタの値

「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軸の検出方向および極性は下図の通りです。

X軸、Y軸、Z軸の検出方向および極性

3.2 取得データ

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


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

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

X軸のコンソール画面

X軸

Y軸のコンソール画面

Y軸

Z軸のコンソール画面

Z軸

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

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

Y軸のコンソール画面

Y軸

X軸のコンソール画面

X軸

Z軸のコンソール画面

Z軸

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

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

Z軸のコンソール画面

Z軸

X軸のコンソール画面

X軸

Y軸のコンソール画面

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マイクロエレクトロニクス