本記事のポイント

IoT組込みエンジンNEQTOでは、汎用性の高いクラウド接続やセンサーなどに関するプログラムについて、ライブラリにて提供をしています。

本ブログでは、neqto.jsライブラリのご紹介と「実際にインターネットに接続されたデバイスから、クラウドアプリケーションやその他のデバイスに簡単かつ安全に通信するためのマネージドクラウドプラットフォーム」であるAWS IoT Coreへのデータ転送方法を説明しながら、neqto.jsライブラリについてご理解をいただくことを目的としています。



1. はじめに

皆様の中で外部クラウドとの通信やセンサー制御などIoTで必要なプログラム開発をしたいけれど、さまざまな理由で進められていない、または開発に苦労されているという方もいらっしゃるのではないでしょうか。弊社では、そのような方の技術サポートの一環として、ユーザー様の開発負荷を軽減するサービスの一つであるライブラリをご提供しています。

今回は、NEQTOで提供しているライブラリをご紹介します!

2. neqto.jsライブラリとは?

NEQTOでは、大量のデバイスの管理と操作が簡単に行えるNEQTO Console上のJavaScriptエディターにて、プログラム (以下、ユーザースクリプトコード) を開発します。neqto.jsライブラリをご利用いただく事には、以下のメリットがあります。

  • ユーザー様の設計が省略できる
  • ライブラリは弊社で動作確認済みのため、ユーザー様でのテストは不要

neqto.jsライブラリは、neqto.jsで開発された組み込みクラスです。NEQTOデバイスに接続されたセンサーやデバイスの制御、外部クラウドサービスへの接続、アルゴリズムなど、各種機能をライブラリとして提供しています。

neqto.jsライブラリには、ライブラリが追加設定されたユーザースクリプト上から直接アクセスすることができます。node.jsの"require"のように、ライブラリをインポートするメソッドをスクリプト上から呼び出す必要はありません。

3. neqto.jsライブラリの説明

それでは、neqto.jsライブラリについて、ご説明します。

ライブラリの使用要件には、「Type」,「Name」, 「Version」, 「Code size used」, 「Resources used」が存在します。

 
図1. ライブラリの使用要件  
 

 図1. ライブラリの使用要件  

Type

TypeはUART、 I2C、Utils、Integrationsの4つが存在します。UARTと I2Cはそれぞれインターフェースを使用するライブラリです。Integrationsは外部クラウドへ接続するためのライブラリで、現在 (2022.6.20現在) 、図1のAWS IoT CoreのほかにもAWS S3や Google のCloud IoT Coreと通信する機能を提供しています。Utilsは汎用機能ライブラリであり、上記インターフェースや外部クラウドへの接続以外のものが対象です。

Name

Nameは、ライブラリ名です。図1のAWS IoT Core v2の場合、AWS_IoT_Core_V2です。

Version

Versionはライブラリのバージョンを示しており、基本的に最新版をご利用いただくことを推奨します。図1のAWS IoT Core v2の場合、2020-11-04です。

Code size used

Code size usedは、ライブラリが使用するスクリプトコードサイズを示します。neqto.jsで開発頂くコードサイズには、以下のような最大コードサイズの制限があります。

最大コードサイズ

NEQTO対応ハードウェア 最大コードサイズ
SPRESENSE 約127KB
STM32 Discovery 約127KB
NEQTO Bridge 約127KB

例えばAWS IoT Core v2のライブラリの場合、ライブラリで使用するスクリプトサイズは2.3KBまでです。(図1を参照)最大コードサイズが127KBですので、ユーザースクリプトコードは124.7KB (127KB – 2.3KB)であることにご注意ください。

Resources used

Resources usedは、ライブラリで使用するリソースを示しています。ライブラリを使用する際、ライブラリで使用するリソースとライブラリ以外のリソースが競合しないようにご注意いただくための情報です。

例えば図1のAWS IoT Core v2では、Resources usedにHTTP x 1、MQTT x 1、Timers x 1の記載があります。STM32 Discoveryを例にしますと、HTTP、MQTT、Timersのオブジェクトの制限事項として以下の記載があります。

オブジェクト 制限事項
HTTP 同時に使用可能なHTTPセッションリソースは2本です。
MQTT 使用可能なMQTTセッションリソースは1本です。
Timers 同時に使用可能なタイマリソースは5本です。

つまり、ライブラリでそれぞれ1本使用していることから、ライブラリ以外で使用可能なリソースはHTTPでは1本、MQTTは0本、Timersは4本ということになります。

4. AWS IoT Coreへの簡単なデータ転送方法!

neqto.jsライブラリを使用してAWS IoT Coreへデータ転送する手順を説明します。

初めにNEQTO Console上でスクリプト登録を進めます。

① 「スクリプト登録」をクリックします。

図2. スクリプト登録

図2. スクリプト登録

② 「メタデータ」タブ内の名前にスクリプト名を入力します。

 
  図3. メタデータ  
 

 図3. メタデータ  

③ 「ライブラリ」タブ内を以下のように設定します。 種類:Integrations 名前:AWS_IoT_Core_V2 バージョン:latest

 
  図4. ライブラリ  
 

   図4. ライブラリ  

④ 「環境変数」タブ内を以下のように設定します。表示には☑が付いていることをご確認ください。

 
  図5. 環境変数  
 

 図5. 環境変数  

下図はAWS IoT Coreの「デバイスデータエンドポイント」、「証明書とキー」を示します。

図5の※1~4は、それぞれ以下の値をご入力ください。

 
  図6. AWS IoT Core デバイスデータエンドポイント  
 

図6. AWS IoT Core デバイスデータエンドポイント  

  
    図7. AWS IoT Core 証明書とキー   
  

  図7. AWS IoT Core 証明書とキー   

⑤ NEQTO Docsのneqto.js Library > Integration > AWS IoT Core v2内の以下のコードをコピーしてNEQTO Consoleのスクリプトエディタに貼り付け、以下のように変更します。

  
  図8. スクリプト (AWS IoT Core v2)   
  

  図8. スクリプト (AWS IoT Core v2)   

⑥ 「Sample 3:HTTPでデータを送信します」のコードをコピーして、 NEQTO Consoleのスクリプトエディタに先ほど貼り付けたコードの下に貼り付けます。

  
    図9. スクリプト (Sample3)   
  

  図9. スクリプト (Sample3)   

⑦ 完成したスクリプトは以下のようになります。

  // IMPORTED LIBRARIES
  // - AWS_IoT_Core_V2
  // Logging setup
  log.setLevel(0,2); //-1:NONE 0:ERROR 1:WARNING 2:DEBUG 3:TRACE, 0:DISABLE 1:LOG 2:CONSOLE 3:BOTH
  log.printLevel(2); //0:DISABLE 1:LOG 2:CONSOLE 3:BOTH
  // Device setup
  var config = {
      host: ENV["awsHost"],
      deviceCert: ENV["awsDeviceCert"],
      devicePrivKey: ENV["awsDevicePrivkey"],
      ca: ENV["awsCA"]
  }
  var iotCore = new AWS_IOT_CORE(config);
  if ('errors' in iotCore) {
      // TODO: handle errors
      throw 'Invalid configuration'
  }
  //Sample 3: HTTPでデータを送信します
  var body = JSON.stringify({
      "message": "HTTP post"
  });
  var headers = {
      "Content-Length": body.length.toString()
  }
  // A simple method that returns `body` once, then `null` all other times.
  var getBody = function() {
      var temp = body;
      body = null;
      return temp;
  }
  // A very simple callback to handle the HTTP response
  var callback = function(err, res) {
      if (err) print(JSON.stringify(err));
      if (res) print(JSON.stringify(res));
  }
  iotCore.httpPost("testtopic/shadowtopic/dummy", headers, getBody, callback);

図10. 完成したスクリプト

次に、AWS IoT Coreの設定を行います。テストアドバイザー > MQTTテストクライアントをクリックし、トピックフィルターにサブスクライブするトピックを入力します。

  
  図11. AWS IoT Coreの設定内容   
  

 図11. AWS IoT Coreの設定内容   

設定は以上です。

NEQTO対応ハードウエアの電源をオンにするとMQTTテストクライアントに以下表示がされ、正常にデータが転送されたことを確認できます。

  
  図12. AWS IoT Core上でのデータ転送確認   
 

 図12. AWS IoT Core上でのデータ転送確認  

5. 最後に

今回は、neqto.jsライブラリを使用した簡単にAWS IoT Coreへデータ転送する方法の説明と、neqto.jsライブラリをご紹介しました。

neqto.jsライブラリはユーザー様の設計負荷を軽減する設計サポート機能として準備しています。ぜひ一度NEQTOを使用していただき、IoT開発を容易に実現できることをご体感いただければ幸いです。