SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

.NET nanoFrameworkとESP32でIoTプログラミング

センサーデータをブロードキャストしよう! .NET nanoFrameworkとESP32でIoTプログラミング

.NET nanoFrameworkとESP32でIoTプログラミング 第7回

Wi-Fi経由でAmbientに送信する

 ESP32からWi-Fi経由でAmbientに送信する処理を紹介します。ただ、後述しますが、筆者の環境では、安定した動作は実現できていません。

Wi-FiでDHCPに接続する

 最初に必要なパッケージをNuGetパッケージマネージャなどでインストールしておきます。

  • nanoFramework.Device.Wifi
  • nanoFramework.Device.http

 Wi-Fi(802.11b/g/n)でのDHCPサーバーへの接続は、次のコードのみで可能です。

const string WIFI_SSID = "XXXXX";
const string WIFI_PASSWORD = "XXXXX";

// WifiNetworkHelperを使用して接続
bool success = WifiNetworkHelper.ConnectDhcp(
    WIFI_SSID,
    WIFI_PASSWORD,
    requiresDateTime: true,
    token: new CancellationTokenSource(60000).Token);

if (success)
{
    // 接続後の処理
}

 SSIDとパスワード(暗号化キー)を設定して、ConnectDhcpメソッドを実行します。CancellationTokenSourceは、接続のタイムアウトをミリ秒単位で指定するものです。ここでは60秒と設定しています。

Ambienに送信する

 IoTデーター可視化サービスのAmbientにデータを送信するには、Ambient APIに、HTTP POST送信を行います。HttpClientクラスを使えば、次のコードでPOSTできます。

const string ambientUrl = "http://ambidata.io/api/v2/channels";
const string apiKey = "XXXXX";
const int channelId = "XXXXX";

// HTTPクライアント
static HttpClient _client = new();

private static void SendSensorData(double temp, double humidity,
                                       double pressure, double gas)
{
  // HTTPリクエストとしてJSON文字列を組み立てる(気温と湿度)(1)
  var content = new StringContent(
    $"{{\"writeKey\":\"{apiKey}\", \"d1\":{temp:F2}, \"d2\":{humidity:F2}}}",
    Encoding.UTF8,"application/json");
    
    // AmbientにPOSTする(2)
    _client.Post($"{ambientUrl}/{channelId}/data", content);
}

 Ambientの詳細については公式サイトなどを参照してください。Ambientでは、デバイスから送信するデーターを「チャネル」という単位で管理します。ユーザー登録するとチャネルが作成でき、チャネルID、リードキー、ライトキーが取得できます。送信するには、このチャネルIDと、ライトキーを用います。

 このコードは、作成したチャネルに、気温と湿度のデータを作成し(1)、POSTするものです。定期的に測定して送信すると、Ambientのサイトで、次のグラフが自動的に作成されます。

観測値のグラフ表示
観測値のグラフ表示

問題

 筆者のESP32の問題かもしれませんが、しばらくPOST送信すると、nanoFramework内で例外が発生して、それ以降送信ができない状態となってしまいます。メモリリークなどが発生しているのかもしれません。実使用においてはご注意ください。

最後に

 今回は、主にESP32でBluetoothで定期的に測定値を送信するプログラムを作成しました。BLEのアドバタイズを使えば、比較的容易にデータを送信できます。

 次回は.NET MAUIを使って、環境センサーの値をモニタリングするAndroidアプリを作成します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
.NET nanoFrameworkとESP32でIoTプログラミング連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/21307 2025/04/14 11:00

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー