LoginSignup
3
0

More than 3 years have passed since last update.

Azure Sphere で curl を使う

Last updated at Posted at 2019-08-30

 初めて投稿いたします!
 WEB~組み込みまで、ソフト系いろいろやっているエンジニア hasenagataです。

背景

 最近、業務やその他お試し/実験含めて Azure (特にIoT周り) を触る機会が多くなってきています。
 その流れで AzureSphere MT3620 Development Kit を使って色々開発しているのですが、下記の様な疑問を感じました。
 
   AzureSphere で既存サービスにデータ送るときはどうしたらいいの??

 AzureSphereからのデータ送信について、Azure IoTHub や IoTCentral等のPaasとの連携はサンプルも多いです。しかし、既存サービスに存在するAPI経由でデータを送る方法がいまいちわからずにいました。ただ、色々調べていくとAzureSphereでもcurlを使う事でHTTP/HTTPS経由でデータを送信できることがわかりました。今回はその内容を自分の備忘録も兼ねて記載します。

AzureSphere で curl を使う

 基本的には次のドキュメントを参考にしています。
 ・Connect to web services - AzureSphere

 下記の様にいくつか設定するだけでcurlを使う事ができます。

ヘッダファイルの変更

main.c
#include ・・・
#include <curl/curl.h>  // add to curl

上記の様に対象ソースに定義を追加します。

リンカの設定

tempsnip.png

VisualStudio ソリューションエクスプローラ > 対象のプロジェクトで右クリック し上記の様に「curl」の定義を追加します。

app_manifest.jsonの変更

app_manifest.json
  "Capabilities": {
    "AllowedConnections": [ "xxxxx.azurewebsites.net", "yyyyy.azurewebsites.net" ],
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false
  }

上記のとおりAllowedConnectionsに接続したサーバのホスト名を記述します。
記述したホスト以外に接続できませんので、注意が必要です。

curlの実行

main.c
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "http://xxxxx.azurewebsites.net/data/");
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, sendJson);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, buf);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ApibufferWriter);
rt = curl_easy_perform(curl);
curl_easy_cleanup(curl);

 あとはcurlを実行すればOKです。
 上記は sendJson に格納したJSON形式のデータをhttp://xxxxx.azurewebsites.net/data/にPOSTする際の例です。

まとめ

 上記の様にする事で既存のAPIに則ってHTTP/HTTPSでデータを送信することができました。私の場合は他の処理や割り込みを考慮して通信部処理にキューを使ったりもしていました。
 ただ、上記のやり方はAzureSphereの強力なセキュリティ機能や認証機能を使わずにデータを送信しています。ですので、基本的にはIoTHub等のAzure のPaaSと組み合わせて使うべきなんだろうなと個人的には思います。
 本来のAzureの機能をゴリゴリ使う部分は今後別途投稿していきます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0