SPRESENSEが得意とする「マルチコアによる高速エッジコンピューティング」。AI機能も搭載できるため単体でも様々なサービスを実現可能ですが、広域ネットワークへと接続しWEB APIやクラウドと連携することで、より優れたインテリジェントなサービスを設計・構築・運用することができます。
今回の初心者講座マルチコア編では、広域通信網へ接続できるLTEを紹介いたします。SPRESENSEは、2019年12月に発売されたSPRESENSE用の「SPRESENSE LTE Board」により、広域通信網と接続可能(ゲートウェイが不要、またはゲートウェイ化として振る舞えることが可能)となり、WEBサービスやクラウドとの統合が可能となりました。そこで、本記事ではSPRESENSEを題材として、広域通信網に接続できるメリットや、マルチコアの活かし方、具体的な操作方法などを文章と動画を交えて紹介いたします。
利用する機材
SPRESENSE LTE Board
今回はSPRESENSE Main Boardに、スマートフォン等で馴染みのあるLTE (Long Term Evalution)通信機能を付加できる「SPRESENSE LTE Board」を利用します(図1)。
SPRESENSEハードウェアドキュメント|ハードウェアガイド(LTE拡張ボード)
SPRESENSE LTE Boardは、IoT向けのLTE-M(LTE Cat.M1)通信機能を提供する拡張ボードです。LTE-Mは、低消費電力でありながら広域通信網を介して世界中のサーバと接続可能なLPWA(Low Power, Wide Area)の一種です。SPRESENSE LTE Boardの基板背面には、通信利用者の情報を記録したSIMカードを挿入するためのSIMスロットに加え、通信に不可欠なアンテナをコンパクトに搭載。さらに、収集したデータや送出予定のデータをストアする為のmicro SDカードなどが搭載されています(図2)。表面にはLTEの通信状態を示すインジケータLEDが搭載されています(図3)。
SIMカード
IoT向け広域通信の通信費は、通信量に応じた従量課金制が一般的です。回線利用者の情報はnano SIMカードへ記録され、SIMカードの情報をアクセスポイントが認証することにより通信が開始されます。SPRESENSEに対応したnano SIMカードは下記サイトに掲載されている接続事業者(キャリア)より入手することができます。今回は「IIJmio IoTサービス(個人向け)」を利用しました(図4)。
なお、通信設定方法は接続事業者のWEBサイトから確認することができます。SPRESENSEでLTE通信をする際には、SDKコンフィグにアクセスポイント名(APN:Access Point Name)やパスワードを入力する必要があります。事前に控えておきましょう(図5)。
IIJmio|SIMカードがお手元に届いたら|STEP3 初期設定
ASMPアーキテクチャと通信機能
初心者講座マルチコア編はこれまで、SPRESENSEに搭載された6個のCortex-M4から構成されたASMPアーキテクチャが、様々なデータを高速に解析できることを紹介してきました。LTE通信についても、ASMPアーキテクチャは柔軟に対応し、簡単にシステムを高速化することができます。
通信機能を備えるエッジにASMPアーキテクチャを採用するメリット
LTEはネットワーク通信であることから、リクエストを送出し、レスポンスを受信するまである程度の時間がかかります。ASMPアーキテクチャでは演算コア(サブコア)とメインコアが独立しているため、メインコアがLTE通信制御に注力している間も、途切れることなくサブコアでの演算が継続可能です(図6)。
なお、汎用PCのCPUやRaspberry PiのCortex-AシリーズといったLinuxなどリッチなOSの搭載を前提とするシステムでは、通信中の空き時間の活用方法をOSのスケジューラが決定します。OSスケジューラは、タスクリストの中から実行可能なタスクを選出し、通信タスクから演算タスクへとコンテキストスイッチ、演算処理を開始します。そしてネットワークからのレスポンスを受信した後、再度OSスケジューラが起動し、演算タスクから通信タスクへとコンテキストスイッチし、ネットワーク処理へと戻します。このように実行時にタスクが決定するスケジューリング方式を「動的スケジューリング」と呼びます。
動的スケジューリングは実装コストを削減できますが、IoTのエッジに代表される組み込みシステムでは「確実に製品を評価するため静的なタスクスケジューリングが欲しい」、「プロセッサの演算能力を、スケジューリングなどアプリケーション本来の目的以外の消費したくない」といった理由から、採用できないシステムが多くあります。また、動的スケジューリングのシステム上に独自のスケジューリング機構を実装しようとすると、大きな実装コストや検証コストが発生します。そのため、SPRESENSEが採用するASMPアーキテクチャは、どのタスクを、どのコアで、どの順番によって実行するかを事前に決められるため、組み込みシステムに最適化されたプラットフォームと言えるでしょう。
SPRESENSEの暗号化機能(TLS/SSL)
広域通信網を利用する際には、情報を悪意ある第三者に取得される盗聴や、第三者に書き換えられる改竄のリスクへの対処が不可欠です。そのため、エッジを開発するエンジニアは広域通信網との通信を、暗号化技術により適切に保護しなければなりません。また、現在数多くのWEBサービスは暗号化通信以外を拒否するよう設計されていることから、暗号化技術習得なしにはWEBサービスへの接続すらできない、という開発の場面が増えてきました。
SPRESENSE SDKはLTE通信を保護する通信規約(プロトコル)としてTLS(Transport Layer Security:前世代のSSLが有名)を採用しています。TLSを活用した代表的な通信規約としてHTTPSなどがあげられます。図7に、暗号化していないHTTPの通信(上)とTLSにより保護されたHTTPSの通信(下)のパケットキャプチャ(エッジとクラウド間の通信を盗聴した内容)を示します。この比較からわかるように、HTTP通信は平文として取得・改竄できるのに対して、HTTPS通信は完全な保護を実現しています。
mbedTLS(ソフトウェア実装)とデバイス内蔵TLS(ハードウェア実装)
SPRESENSE SDKは2種類のTLS実装を提供しています。ポータビリティの高いソフトウェア実装の『mbedTLS』と、SPRESENSE LTE Board上に搭載されたTLS専用のハードウェアエンジンを活用できる『mbedTLSスタブ』です。いずれもArm mbedの定めるAPIに準拠しているため、使い勝手は同等です。選定するハードウェアや、プロセッサコアの空き具合などから、自身のサービスに最適な構成を選択することができます。なお、mbedTLSとmbedTLSスタブを同時に使うことはできません(ソフトウェア・インタフェースが衝突するためです)。
SPRESENSE SDKでは、ソフトウェア実装のmbedTLSを使うサンプルアプリケーションとして「lte_http_get」を、ハードウェア実装のmbedTLS(LTEモジュールに内蔵されたTLSハードウェア)を使うサンプルアプリケーションとして「lte_tls」を提供しています。スタブはSDKコンフィグの「LTE_NET_MBEDTLS」のビルドスイッチにて有効化します。
SPRESENSE SDK開発ガイド|モデムのTLSプロトコルを使用する
SPRESENSEのLTE機能を使ってWEBサービスへアクセスしよう
それでは実際に、SPRESENSE上のソフトウェアからLTE通信機能を制御し、WEBサービスへデータを送出、WEBサービス(サーバー)からの応答データを取得する、一連の流れを実行していきましょう。なお、実際のIoTエッジに求められる機能は通信機能だけではなく、当たり前のように、センシングとその解析が不可欠です。そのため、今回の動画ではソフトウェアのビルドに加速度・ジャイロ・大気圧センサーの制御機能(※1)、GNSS機能、オーディオ機能、カメラ機能を含めています。(図8)。
SPRESENSE SDKチュートリアル|LTEチュートリアル
※1:Bosch社製のBMI160/BMP280搭載のIMUを利用。Rohm社製IMUを利用する場合はSDKコンフィグにてドライバの差し替えが必要です。
GNSS機能(第11回)
カメラ機能(第11回)
カーネルコンフィグとSDKコンフィグ
カーネルコンフィグは通常通りReleaseを選択し、SDKコンフィグにてLTEの設定をします。LTEの設定のうち、特にポイントとなるのが「Access Point/APNの設定」「mbedTLS実装方式の選択」「証明書の格納先」です。
Access Point/APNの設定
SDKコンフィグにて、Access Pointの情報を入力します(図5の内容に基づいて、図9のように設定する)。
EXAMPLES_LTE_HTTP_GET_APN_NAME
EXAMPLES_LTE_HTTP_GET_APN_IPTYPE_IP
EXAMPLES_LTE_HTTP_GET_APN_AUTHTYPE_PAP
EXAMPLES_LTE_HTTP_GET_APN_USERNAME
EXAMPLES_LTE_HTTP_GET_APN_PASSWD
mbedTLS実装方法の選択
サンプルアプリケーション「lte_http_get」を利用する場合は、ソフトウェア実装のmbedTLSを利用します。以下を選択してください。
EXTERNALS_MBEDTLS
証明書格納先ディレクトリの選択
TLS通信では、通信相手が正当なサーバである(悪意ある第三者がサービスを偽装していない)ことを検証する「証明書」を利用しセキュアな通信を確立します。TLSでは、段階的に正当性を保証します。まずWEB上で最も信頼できる「ルート認証局」がドメイン管理団体を、次に「ドメイン管理団体」が各WEBサイトを、そして「WEBサイト」がこれらの承認を得ている旨の証明書を開示し、WEBサイトに改竄がないことを提示します。SPRESENSEがHTTPS通信を開始する場合も「ルート認証局の証明書」が必要となります。段階的に検証させるためルート認証局の証明書のみで構いません。
SDKコンフィグでは、証明書の格納先を以下の項目で設定します。下記の「証明書をSPRESENSEへ格納する」手順にて証明書を「/mnt/spif
」へと格納するため、このパスを設定してください(SPRESESE Main Boardに搭載されたSPIフラッシュを示します)。
NETUTILS_WEBCLIENT_TLS_CERTS_PATH
EXAMPLES_LTE_TLE_CERTS_PATH
(lte_tlsを使うときのみ有効です)
証明書をSPRESENSEへ格納する
TLS通信に使う証明書を格納する方法を、動画および図10で解説いたします。本手順では開発にLinuxが必要となります(SPRESENSEの公式ドキュメントにて推奨されているターミナルソフトがminicomであるためです)。Linuxマシンを新規に構築することは手間であることから、今回はRaspberry Pi 3 Model B+×Raspbianを開発に利用しました。
まず、 「SPRESENSE Arduino チュートリアル|ルート証明書のエクスポート手順」に従って、ルート証明書をダウンロードします。今回は下記の証明書を取得しました。
- https://docs.postman-echo.com/
エッジからサーバへ送出したデータを、サーバがそのまま返送するサービス(到達確認ができる)
- https://httpbin.org/
エッジからサーバへ送出したデータを、サーバがそのまま返送するサービス(到達確認ができる)
- https://www.aps-web.jp/
本WEBサイト
続いて、開発用PC上でzmodem受信機能を持ったSPRESENSEのファームウェアを作成し、SPRESENSEへ書き込みます。Windowsの場合はMSYS、macOS/Linuxの場合はターミナル上で テキスト「SPRESENSE SDK チュートリアル|Zmodem を使ったファイル転送」の手順を実行してください。
証明書をSPRESENSEへ転送するにはLinux上のminicomを使うことが推奨されています。入手したルート証明書をLinux上へコピーし テキスト「Zmodemを使ったファイル転送|動作手順」を実行してください。本手順により、証明書がSPRESENSEの/mnt/spif
へと格納されます。
LTEを通してWEBと通信する
以上で通信の準備が整いました。早速lte_http_get
コマンドを実行してみましょう。動作確認にはエッジから送出したデータを、そのまま返送する下記のWEBサービスを利用します。
http://postman-echo.com/get?param1=arg1
http://httpbin.org/get?param1=arg1
これらのWEBサービスは、エッジから送出された情報を、サーバ上でJSON形式に変換、エッジへと返送するサービスです。つまり、LTE通信網上で、エッジから正しくデータを送り届けることができているか、サーバからの応答を正しく取得できているか、を検証することができます。実際にSPRESENSEとWEBサービス間で共有したデータを示します(図11)。「”param1”:”arg1”
」の部分がエッジとクラウドで共有できた情報です。
なお、SPRESENSEは、HTTPS通信のGETメソッド(URLでパラメータを渡す方式)のインタフェース(wget
関数)の他、POSTメソッド(サーバに送出するHTTPリクエストの本文に引数を格納する方式)のインタフェース「wget_post
関数」も提供しているため、様々なWEBサービスと連携することができます。
実際の通信量
LTS×TLSの通信費用は、エッジとクラウド間で交換したデータサイズでなく、再送や暗号化に伴う追加情報をすべて含めたデータ量に基づいて計上されます(図12)。なお、通信残量がない場合はLTE通信の確立に失敗します。容量超過が問題となるケースとしては、センシング等のイベント起因でパケットを送出するエッジを開発した場合、異常ケースが発生し続け、異常を通知するパケットを送出し続けた結果、作業員が現場に到着する前に通信が切れてしまう、といった状況などが想定されます。
本記事で扱ったHTTPS通信は、様々なサービスに接続できる一方で、通信オーバーヘッドが比較的大きいとされるプロトコルです。オーバーヘッドの課題に対して、SPRESENSE SDKでは、プロトコルを見直し通信量を最適化したMQTT通信方式や、AWSとの連携に特化した通信方式についてのサンプルアプリケーションを同梱しています。そのため、はじめに最も評価のしやすいHTTPSでLTE通信を動作確認した後、サービスに最適なプロトコルへと切り替えていく開発も可能です。是非お試しください。
まとめ
今回紹介したLTEをはじめ、多種多様なネットワークへと対応できるSPRESENSE。ネットワーク接続機能を活用することにより、これまで本講座で紹介した様々なエッジの機能をクラウドに統合させることができます。GNSSによるエッジの位置特定、IMU、カメラ、オーディオ入出力によりパッシブ/アクティブなセンシング、マルチコアによるデータ解析機能を活用することにより、より魅力的なIoTサービスを構築できるでしょう。
次回以降も、SPRESENSEを題材にマルチコアの活用方法をはじめ、エッジコンピューティングの高度化を実現する技術に迫ります。ご期待ください。
SONY SPRESENSE
SPRESENSEは、Arm Cortex-M4コア(FPU機能搭載)を6コア搭載したシングルボードコンピュータです。マルチコアによる豊富な演算能力をはじめ、魅力的なペリフェラルを多数搭載しながら、電池のみでも駆動できる超低消費電力な製品です。本格的なエッジコンピューティングを是非ご体験ください。システムの試作はもちろん、PoC、製品化にもご活用いただけます。
開発者向けサイトを見る Switch-Scienceで購入する
APS学習ボード(SPRESENSE™ Extension Board用)
APS学習ボード(SPRESENSE™ Extension Board用)は、初心者講座の内容をはじめ、SPRESENSE SDKの提供するオーディオ入力機能やLCDドライバをはじめとする各種機能を、回路設計をすることなく簡単にお試しいただけるよう開発したAPSオリジナルの評価基板です。Web記事と併せてお楽しみください。
取扱説明書|APS学習ボード Switch-Scienceで購入する(ボード単体)
Switch-Scienceで購入する(部品キット)
こちらも是非
“もっと見る” マルチコア|SPRESENSE編
SPRESENSE×Neural Network Console:第4回|推論モデルを最適化し、エッジAIによるオリジナルの音声識別システムを構築する
今回の初心者講座では、SPRESENSEの「ハイレゾオーディオ入力」と「DNNRT機能」により「Neural Network Console」で生成したディープニューラルネットワーク(DNN)の推論モデルを統合。エッジ単体で完結するオリジナルの音声識別システムを構築する技法を解説いたします。
SPRESENSE×Neural Network Console:第3回|オーディオ解析に必要な学習用データを採取し、PC上で学習・推論を実行する
今回の初心者講座では、SPRESENSEに搭載されたハイレゾオーディオ入力を活用し、環境音を録音し、ディープニューラルネットワークによる音声分類に不可欠な学習用データと検証用データを生成する方法について解説します。また、PC上で動作するNeural Network Consoleによって生成した推論モデルをエッジ・デバイスへ統合するために解決すべき課題を紹介します。
SPRESENSE×Neural Network Console:第2回|異常検知に活用できるニューラルネットワークで波形の扱い方を学ぶ
SPRESENSEのDNNRT機能が扱うことのできるデータは画像だけでなく、産業分野を中心に人気が高まっている「異常検知・故障予知」に活用できる加速度センサーや大気圧センサーなどから収集した波形データも解析することができます。さらにSPRESENSEに内蔵されたハイレゾオーディオ録音機能も周辺環境を可聴域の波形データとして記録することができる優れたセンサーとして利用可能です。そこで、今回の初心者講座では、まず簡単な波形データの解析方法を例に、DNNRT機能から波形データを扱うシステムの構築方法について解説。DNNRT機能を活用した製品開発に必要となる技術を紹介いたします。