Help us understand the problem. What is going on with this article?

Azure Sphere で curl を使う

More than 1 year has passed since last update.

 初めて投稿いたします!
 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の機能をゴリゴリ使う部分は今後別途投稿していきます。

hasenagata
ソフトウェアエンジニア 組み込み/業務システム/IoT
https://www.hokuryodenko.co.jp/
hokuryodenko
三菱電機の代理店として、FA機器等の電気・電子機械器具の販売から、各種制御シス テム・電子機械器具の開発・設計・製造、そして建設業設備工事まで幅広く事業を展開しております。近年は農業事業や、様々な産業向けIoTシステムも手掛けており、新規事業の立上げ や産学連携を通して、“総合技術商社”としてユーザーのあらゆる要望に最適なシステムで対応できる総合力を構築しています。
https://www.hokuryodenko.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした