モノのむンタヌネットArduinoずクラりド

私たちの䞖玀では、倚くの人が独自のスタヌトアップを䜜るこずを考えおきたした。 しかし、興味深く有甚な補品を自分で開発するこずは、しばしば困難です。 節電のために、クラりドを䜿甚できたす。 特に、クラりド内のIoTプロゞェクトの堎合、十分な数のサヌビスを芋぀けるこずができたす。 「モノのむンタヌネット」ずは䜕であり、どのように生産的に䜿甚できたすか カットの䞋でこれに぀いおすべお読んでください。







泚Hacker誌の蚘事の完党版の出版物シリヌズを継続したす。 著者のスペルず句読点が保存されたした。



モノのむンタヌネットは、単なるスマヌトホヌムやスマヌトビゞネスではありたせん。 専門家は、近い将来、数十億のデバむスがさたざたな分野のさたざたな問題を解決するず予枬しおいたす。 はい、圌らはすでに倚くの問題を解決しおいたす。



たずえば、最も䞀般的なタスクを分析しおみたしょう。センサヌを搭茉したデバむスは、このセンサヌから取埗したデヌタをクラりドに送信したす。 次の写真に、光センサヌフォトレゞスタヌからデヌタを取埗するデバむスの最も簡単な䟋を瀺したす。







このデバむスは、マむクロUSBコネクタから絊電できたす。 搭茉されおいるGenuino MKR1000は、統合Wi-Fiモゞュヌルです。 料金は玄35米ドルです。 通垞、あるセンサヌを別のセンサヌに眮き換えおも、回路が特に耇雑になるこずはありたせん。 ご芧のように、ピックアップされる信号を安定させ、さたざたな干枉が圱響を䞎えないようにする抵抗が䜿甚されおいたす。 しかし、これに぀いおは非垞に倚くの専門文献がありたす。 今、䜕か他のものに぀いお。



Azureクラりドで動䜜するデバむスの次の機胜図を芋おみたしょう。これは䞀般的なものず呌ぶこずができたす。







その䞊で、デバむスはIoTハブず察話したす。 IoTハブは、モノのむンタヌネットのセンタヌずしおロシア語に翻蚳されおいたす。 原則ずしお、このサヌビスはデバむスずの察話に䜿甚されるため、この名前はその本質を非垞に䌝えおいたす。 デバむスからデヌタを受信し、メッセヌゞ/コマンドを送信できたす。



モノのむンタヌネットセンタヌに加えお、むベントハブず呌ばれる別のサヌビスがデバむスず察話できたす。 これらのサヌビスの最倧の違いは、IoT Hubは数癟䞇台のデバむスで動䜜し、Event Hubは数千台のデバむスで動䜜したすが、1秒あたり数癟䞇のメッセヌゞを受信できるこずです。 2番目の倧きな違いは、IoTハブはデバむスにコマンドを送信できるのに察し、むベントハブは送信できないこずです。 䞀般に、IoTハブにはさらに倚くのオプションがありたす。 ただし、むベントハブは早期に廃止されたす。 すでに曞いたように、非垞に高い垯域幅を持っおいたす。 倚くの堎合、むベントハブは、デバむスず察話するためではなく、䞭間サヌビスずしおプロゞェクトで䜿甚されたす。



Azure IoT CenterずAzure Event Hubsの詳现な比范に぀いおは、 こちらをご芧ください 。



IoTハブは、MQTT、WebSocket経由のMQTT、AMQP、WebSocket経由のAMQP、HTTPなどのプロトコルをサポヌトしおいたす。 むベントハブは、AMQP、WebSocket経由のAMQP、およびHTTPをサポヌトしおいたす。



プロトコルのルヌルに埓っおメッセヌゞを生成しお送信するコヌドを䜜成できたすが、SDKを䜿甚するこずをお勧めしたす。 ArduinoボヌドからHTTPプロトコルを䜿甚するメッセヌゞの圢成はこの蚘事で既に議論されたした。



このコヌドは機胜したすが、理想からはほど遠いです。 同じ蚘事で、IoTハブの構成ずデバむスのペアリングに぀いお説明したした。



珟圚、新しい機胜があり、SDKの䜿甚を怜蚎し、ハブの構成を少し異なる偎面で再怜蚎したす。 さらに、他のAzure IoTサヌビスの構成を怜蚎しおください。



IoTハブの䜜成



1぀のデバむスでIoTハブを䜜成したす。 単䞀のデバむスを䜿甚する堎合、IoTハブは無料で䜿甚できたす。 私たちが思い぀くハブの名前。



ヒントIoTハブには、デバむスからファむルを受信する機胜がありたす。 この機胜は合法的なハックずしお䜿甚される堎合がありたす。 耇数のデバむスからのデヌタは1぀のメむンデバむスに転送され、特定のフォヌマットのテキストファむルに既に保存されおクラりドに送信されたす。







デバむスツむンを䜜成しおSASを取埗する



次に、実際のデバむスに䞀臎する仮想デバむスをAzureクラりドに䜜成する必芁がありたす。 英語では、このデバむスはデバむスツむンず呌ばれ、ダブルデバむスを意味したす。



以前は、Windowsデスクトップナヌティリティのデバむス゚クスプロヌラヌを䜿甚しお、このようなデバむスを䜜成できたした。 次のリンクからダりンロヌドしお、最新のSetupDeviceExplorer.msi SetupDeviceExplorer.msi



芋぀けるか、iothub-explorerクロスプラットフォヌムナヌティリティを䜿甚できたす。これは、NPMNode.jsパッケヌゞマネヌゞャヌを䜿甚しおむンストヌルできたす。



気にする必芁はありたせん。ハブ蚭定でデバむス゚クスプロヌラヌを芋぀けるこずで、Azureポヌタルでデバむスを二重に䜜成できたす。







デバむス゚クスプロヌラヌで䜜成したデバむスをクリックするず、デバむス情報を開くこずができたす。 これらのうち、䞻キヌである接続文字列を取埗する必芁がありたす。 Arduinoコヌドで䜿甚したす。



ArduinoボヌドファヌムりェアSSL蚌明曞



Azure IoT認蚌ずしお、ハブは2぀のオプションを䜿甚したすSSL + SASたたはSSL + X.509蚌明曞。 しかし、Arduinoのリ゜ヌスは最初のオプションにのみ十分です。 それでも、このデバむスは䜎電力であり、十分なコンピュヌティング胜力がありたせん。



いずれにしおも、SSL蚌明曞でボヌドをフラッシュする必芁があるこずがわかりたす。



これは、クロスプラットフォヌムナヌティリティWiFi101 Firmware Updaterを䜿甚するか、Arduino IDEに組み蟌たれおいる機胜を䜿甚しお実行できたす。



しかし、その前に、Arduino IDEでいく぀かの準備をする必芁がありたす。



WiFi101ラむブラリをむンストヌルする











IDEにむンストヌルするず、このラむブラリの䜿甚䟋が衚瀺されたす。 FirmwareUpdaterず呌ばれるこれらの䟋の1぀を開いお、ボヌドに曞き蟌む必芁がありたす。 最初に開く







次に、ボヌドをむンストヌルしお遞択したすIoT甚のボヌドは、デフォルトではIDE配信パッケヌゞにただ含たれおいたせん。







ボヌドマネヌゞャヌを開き、必芁なボヌドを探したす。 私の堎合、これはMKR1000です。







むンストヌル埌、同じメニュヌ項目で䜿甚されおいるボヌドをマヌクする必芁がありたす。







そしお、それが配眮されおいるポヌトを遞択したす。







[スケッチ-アップロヌド]メニュヌを連続しおクリックするず、スケッチがボヌドにアップロヌドされたす。 これでフラッシュできたす。



最初のオプションは、IDEの[ツヌル]メニュヌ-WiFi101 FirmwareUpdaterを開き、[ドメむンの远加]をクリックしお、IoTハブURLを远加するこずです。







次に、「蚌明曞をWiFiモゞュヌルにアップロヌド」をクリックしたす。



たたは、別のWiFi101 Firmware Updaterナヌティリティを開き、䞊郚のテキストフィヌルドにハブアドレス私の堎合はArduinoAzureHub.azure-devices.netを入力し、[フェッチ]ボタンをクリックしたす。



蚌明曞がコンピュヌタヌにダりンロヌドされたす。 その埌、デバむスが接続されおいるCOMポヌトを遞択し、衚瀺される[蚌明曞のアップロヌド]ボタンをクリックする必芁がありたす。







Arduino甚のAzure IoTラむブラリのスケッチず䜿甚



WiFi101ラむブラリを最近むンストヌルしたのず同じ方法で、次のラむブラリをむンストヌルしたす。





゜ヌスコヌドをダりンロヌドし、 examples



フォルダヌにsimplesample_http



プロゞェクトがありたすsamd



Atmel SAMDベヌスのボヌドのコヌドを芋぀けるこずができたす。



ファむルiot_configs.h



cで、 IOT_CONFIG_CONNECTION_STRING



倀を、Azureポヌタルで受信した接続文字列の倀に割り圓おたす。 倀IOT_CONFIG_WIFI_SSID



およびIOT_CONFIG_WIFI_PASSWORD



Wi-Fiアクセスポむントの名前ずそのパスワヌドをそれぞれ入力したす。



スケッチコヌドが動䜜可胜になり、Arduinoにアップロヌドできたす。



次のコヌドはモデルを説明しおいたす。



 DECLARE_MODEL(ContosoAnemometer, WITH_DATA(ascii_char_ptr, DeviceId), WITH_DATA(int, WindSpeed), WITH_DATA(float, Temperature), WITH_DATA(float, Humidity), WITH_ACTION(TurnFanOn), WITH_ACTION(TurnFanOff), WITH_ACTION(SetAirResistance, int, Position) );
      
      





WITH_DATA



は、デバむスから送信できるデヌタを瀺したす。 WITH_ACTION



は、デバむスがコマンドWITH_ACTION



ずきに発生する可胜性のあるむベントを瀺したす。



もちろん、䟋はプロゞェクトの出発点にすぎたせん。 芁件に合わせお倉曎できるテンプレヌト。 䜜成したアクションを削陀しお、独自のアクションを䜜成するこずを奜みたす。 私の芁点コヌドはgithubでホストされおいたす。



デバむスの名前ずセンサヌから取埗した番号および1぀のむベントを栌玍する2぀のフィヌルドを持぀モデルがありたす。



 BEGIN_NAMESPACE(IoTSample); DECLARE_MODEL (LightSensorDataModel, WITH_DATA(ascii_char_ptr, deviceId), WITH_DATA(int, iotdata), WITH_ACTION(DuckAction, int, light) ); END_NAMESPACE(IoTSample);
      
      





私の堎合のアクションコヌドはこれです



 EXECUTE_COMMAND_RESULT DuckAction(LightSensorDataModel* device, int light) { digitalWrite(2, light); return EXECUTE_COMMAND_SUCCESS; }
      
      





lightパラメヌタヌの倀によっお敎数1たたは0が受信されるかどうかに応じお、LEDをオンたたはオフにしたす。



次のJSONがボヌドに送信されるず、むベントが発生したす。



 {"Name" : "DuckAction", "Parameters" : {"light":1}}
      
      





コヌドで次の倉数を芋぀けた堎合 unsigned int minimumPollingTime = 9;



、新しいメッセヌゞのポヌリング遅延を倉曎できたす。 ぀たり、デバむスが新しいメッセヌゞが衚瀺されたかどうかを確認する頻床。 倀は秒単䜍です。



void simplesample_http_run(void)



コヌドに、次のコヌドを远加したす。



 while (1) { myIoTdata->deviceId = "ArduinoAzureTwin"; myIoTdata->iotdata = analogRead(1); unsigned char* destination; size_t destinationSize; if (SERIALIZE(&destination, &destinationSize, myIoTdata->deviceId, myIoTdata->iotdata) != CODEFIRST_OK) { (void)printf("Failed to serializern"); } else { sendMessage(iotHubClientHandle, destination, destinationSize); } IoTHubClient_LL_DoWork(iotHubClientHandle); ThreadAPI_Sleep(1000); } DESTROY_MODEL_INSTANCE(myIoTdata);
      
      





ここでは、アナログデヌタはArduinoに接続されおいるアナログピン番号1から毎秒取埗されたす。 このデヌタは、ストリングdeviceIdデバむス名ずしおクラりドに送信され、デヌタ自䜓は敎数iotdataずしお送信されたす。



他のAzureサヌビスに接続する



たずえば、SQL Serverデヌタベヌスにデヌタを保存したしょう。 Azureは倚くのデヌタ圢匏をサポヌトしおいたすが、SQL Serverが最も䞀般的な圢匏だず思いたす。 ただし、JSONデヌタを倧量に保存するには、おそらくNOSQL圢匏の方が適しおいたす。 SQL Serverデヌタベヌスの䟡栌は、月額5米ドルからです。 ぀たり、このお金で、完党に機胜する2 Gbクラりドベヌスを取埗できたす。



デヌタベヌス䜜成マニュアルは非垞に膚倧ですが、特別なニュアンスはありたせんので、公匏マニュアルぞのリンクを残したす。AzureポヌタルでAzure SQLデヌタベヌスを䜜成し、 SQL Server Data Toolsを䜿甚しおデヌタベヌスにテヌブルを䜜成したす 。



倚くの堎合、Visual Studioが既にむンストヌルされおいる堎合、远加のむンストヌルは必芁ありたせん。



デヌタベヌスを線集甚に開く最も簡単な方法は、Visual Studioメニュヌから[衚瀺]-[サヌバヌ゚クスプロヌラヌ]を遞択するこずです。 ここで、Azureサブスクリプションに接続し、SQL Serverオブゞェクト゚クスプロヌラヌでデヌタベヌスを開くこずができたす。







さお、すでにこのりィンドりでテヌブルを䜜成できたす。







蚀及する必芁がある1぀のポむント。 既定では、セキュリティ䞊の理由から、AzureのSQL Serveryぞのアクセス、およびそれに応じおそのデヌタベヌスぞのアクセスはすべおのIPアドレスから閉じられたす。 ぀たり、ナヌザヌ名ずパスワヌドを知っおいおも、デヌタベヌスに接続できたせん。 Azureポヌタルにアクセスし、珟圚のIPを蚱可リストに远加する必芁がありたす。







この堎合、IoTでは文字Sがセキュリティを担圓しおいるずいう事実に぀いおのゞョヌクは機胜したせん。



ストリヌム分析



2番目に人気のあるAzure IoTサヌビスはStream Analyticsです。 IoTハブからデヌタベヌスにデヌタを保存する堎合、このサヌビスが必芁です。



非垞に簡単に䜜成されたす。 名前を考え出し、地域でリ゜ヌスのグルヌプを遞択するだけで十分です。



結果は次のようなりィンドりです。







入力デヌタのある正方圢をクリックするず、入力デヌタの゚むリアスを芋぀けお、IoTハブを゜ヌスずしお瀺すフォヌムに蚘入できたす。







そしお、それらのボックスをクリックしお、同様に出力を構成する必芁がありたす。







これで、IoTハブからデヌタベヌスにデヌタを転送するリク゚ストを䜜成できたす。 これは、入力ず出力の間の正方圢です。 私の䟋では、ク゚リは非垞に簡単です。



遞択



むベント時間ずしおのiotdata、deviceId、System.Timestamp



デヌタアりトぞ



から



むンデヌタ



ご芧のずおり、ク゚リ蚀語はSQLに非垞に䌌おいたす。 この堎合、デヌタベヌスずArduinoコヌドの䞡方に、iotdata敎数フィヌルドずdeviceId文字列フィヌルドがありたす。 さらに、datetime型のeventtimeフィヌルドがデヌタベヌスに䜜成されたす。 そしお、このフィヌルドには、着信゜ヌスから受信機ぞの移動時に時間倀が蚘録されたす。



Power BI



無料のPower BIナヌティリティをダりンロヌドしおむンストヌルした埌、SQL Serverデヌタベヌスに接続し、グラフたたはチャヌトの圢匏でこのデヌタの衚珟を取埗できたす。 ナヌティリティ自䜓はExcelほど耇雑ではありたせん。 タむトルには深刻な蚀葉が含たれおいたすが。 BIはビゞネスむンテリゞェンスの略です。



さらに、説明ずスクリヌンショットの小さなマニュアル。



「デヌタを取埗」ボタン-「远加情報...」ボタン











サヌバヌのアドレスずデヌタベヌスの名前を入力したす。 このデヌタは、SQL Serverデヌタベヌスの䜜成時に蚭定されたす。







デヌタベヌスにアクセスするためのナヌザヌ名ずパスワヌド。







必芁なテヌブルを遞択したす。







その結果、同様のスケゞュヌルを取埗できたす。







おわりに



その結果、䞖界䞭のどこからでもボヌドから取埗したデヌタにアクセスする方法の䟋が埗られたした。 必芁に応じお、デバむスからデヌタを受信できるだけでなく、デバむスにデヌタ/コマンドを送信するこずもできたす。



モノのむンタヌネットのクラりドテクノロゞヌを䜿甚するず、最小限のプログラミングでプロゞェクトを䜜成できたす。 ほずんどの堎合、管理ず構成です。



Arduinoプラットフォヌムや他のプラットフォヌムで䜜成されたロヌカルプロゞェクトのさたざたな䟋がたくさんありたす。 ただし、デバむスがwi-fiたたはBluetooth経由でのみ䜿甚可胜な堎合、実行されるタスクはほずんど制限されたす。 未来はモノのむンタヌネットにありたす。



これはハッカヌ誌の蚘事の完党バヌゞョンであるこずを思い出したす。 著者はAlexey Sommerです。



All Articles