https://d226lax1qjow5r.cloudfront.net/blog/blogposts/home-automation-using-esp32-and-vonage-sms-api/home-automation_vonagesms.png

ESP32とVonage SMS APIを使用したホームオートメーション

最終更新日 August 24, 2023

所要時間:1 分

はじめに

近年、モノのインターネット(IoT)はますます普及しており、インテリジェントなデバイスによって、個人が自宅の様々な側面を遠隔操作できるようになっています。Vonageはクラウドコミュニケーションプラットフォームで、SMS、ボイス、メッセージングアプリを介してビジネスが顧客とつながることを可能にします。

この記事では、ESP32マイクロコントローラーを使用してホームオートメーションにVonage SMSを使用する方法を探ります。システムをセットアップする手順を説明し、どのように動作するかを説明します。目標は、Vonage SMS APIを使用して携帯電話に送信されるSMSでESP32を使用してホームデバイスを制御することです。

前提条件

アプリの技術的概要

Vonage SMS APIはWebhookを使用してESP32と通信します。VonageがSMSを受信すると、VonageはWebhookを介してESP32のエンドポイントにPOSTリクエストを送信します。

その後、ESP32はJSONペイロードを解析し、関数を実行します。 digitalWrite()関数を実行し、Vonage SMS API に操作の状態(成功/失敗)と共に POST リクエストを返し、エンドユーザーに何が起こったかを知らせます。

A diagram showing the process: Vonage SMS API sends a request to Ngrok - Ngrok sends it to ESP32, and ESP32 sends it back to Vonageapplication-overview-diagram.png

ステップ1:ESP32リクエストハンドラのセットアップ方法

をインストールする必要があります。 ArudinoJsonESPAsyncWebSrvライブラリをインストールする必要があります。これらのライブラリを使うことで、Vonage SMS APIからのリクエストを処理できるようになります。

  1. Arduino IDEを開く

  2. 左のパネルから Library Managerを左のパネルから開きます。

  3. 検索 ArduinoJson

Showing ArduinoJson in the Arduino IDEarduinojson-arduino-ide.png

  1. プレス Install

  2. 検索 ESPAsyncWebSrv

Showing ESPAsyncWebSrv in the Arduino IDEespasyncwebsrv-arduino-ide.png

  1. プレス Install

ライブラリをインストールしたら、WiFiとリクエストハンドラをセットアップする。リクエスト・ハンドラは入ってきたリクエストを処理し、適切な関数にルーティングする。

新しいファイル(スケッチ)を作成する。 File > New Sketch.次に、以下のすべてのライブラリを含めます。

#include "AsyncJson.h"
#include "ArduinoJson.h"
#include "ESPAsyncWebSrv.h"

次に、ウェブサーバーを初期化する。

AsyncWebServer server(80);

WiFi認証情報を追加します。

const char *ssid = "Your WiFi name here";
const char *password = "Your WiFi password here";

を処理するフォールバック関数を追加する。 404リクエストを処理するフォールバック関数を追加する。

void onRequest(AsyncWebServerRequest *request) {
    request->send(404);
}

次に setup()関数を追加する。

void setup() {
    // Start a serial connection at a 115200 baud rate
    Serial.begin(115200);
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    if (WiFi.waitForConnectResult() != WL_CONNECTED) {
        Serial.printf("WiFi Failed!\n");
        return;
    }
    Serial.println(WiFi.localIP());
    WiFiClient client;
    HTTPClient http;
}

次に setup()関数の中で、Vonage からの JSON を処理するエンドポイントを作成します。

AsyncCallbackJsonWebHandler *handler = new AsyncCallbackJsonWebHandler("/inbound", [](AsyncWebServerRequest *request, JsonVariant &json) {

動的なJSONドキュメントの作成を *handler.

DynamicJsonDocument doc(2048)

次に、デシリアライズ・エラーをチェックする。エラーは起こらないはずだが、ESP32のコアがパニックにならないように対処しなければならない。

DeserializationError error = deserializeJson(doc, json); if (error) {
    // Handle the error
    Serial.println(error.c_str()); request->send(400, "text/plain", "Invalid JSON payload"); return;
}

JSONオブジェクトの作成を続ける。

JsonObject jsonObj = doc.as();

物事をシンプルにするために、ペイロードからパースするのは textキーだけを解析する。

String text = jsonObj["text"].as();

JSON処理部分は以上である。デジタルピンを制御するには、テキストの内容に応じてVonageにリクエストを送信する条件付きロジックを追加します。例えば、ユーザーが "ON "を送信すると、リクエストハンドラは "Turned ON!"メッセージをVonageに送信します。

ESP32 のデジタルピンは、2 つの状態のいずれかに設定できるピンです:HIGH(1)またはLOW(0)です。センサーの状態を読み取ったり(デジタル入力)、アクチュエーターの状態を制御したり(デジタル出力)など、さまざまな用途に使用できます。

if (text == "ON") {
    digitalWrite(controlPin, HIGH);
    request->send(200, "text/plain", "Turned ON!");
} else {
    digitalWrite(controlPin, LOW);
    request->send(200, "text/plain", "Turned OFF!");
}

最後のサーバー・ハンドラを *handlerを追加する。

server.addHandler(onBody);
server.addHandler(handler);
server.onNotFound(onRequest);
server.begin();

これを動作させるには、このデジタル・ピンを定義する必要があります。これは、コードの最初にライブラリをインクルードした後で行います。

#include "AsyncJson.h"
#include "ArduinoJson.h"
#include "ESPAsyncWebSrv.h"
#define controlPin 13

ステップ 2: ESP32 リクエスト・センダーの設定方法

リクエスト・ハンドラをセットアップしたので、ピンが更新されたら、Vonage SMS APIに動作状態(成功/失敗)をリクエストできる。コードの最初に以下の設定を追加する。

const char *ssid = "Your WiFi name here";
const char *password = "Your WiFi password here";
#define API_ENDPOINT = "https://rest.nexmo.com/sms/json"
#define FROM = "$VONAGE_BRAND_NAME"
#define TO = "Your phone number"
#define API_KEY = "$VONAGE_API_KEY"
#define API_SECRET = "$VONAGE_API_SECRET"

Vonageにリクエストを送信する新しい関数を作成する。

bool requestSender (String state) {
    http.begin(client, API_ENDPOINT.c_str());
    http.addHeader('Content-Type', 'application/json');
    String httpRequestData = "{\"from\":\"" + FROM.c_str() + "\",\"text\":\"," + state.c_str() + "\"\"to\":\"" + TO.c_str() + "\",\"api_key\":\"" + API_KEY.c_str() + "\",\"api_secret\":\"" + API_SECRET.c_str();
    int httpResponseCode = http.POST(httpRequestData);
    http.end();
    if (httpResponseCode == 200) return true;
    return false;
}

リクエストをハングさせないために、単純なステートベースの関数を追加する。

void manageState (bool state, AsyncWebServerRequest *request) {
    if (state) {
        request->send(200, "text/plain", stateText);
        return;
    }
    request->send(200, "text/plain", "Something went wrong");
    return;
    }

このすべてを *handlerに組み込む。

bool state = false;
String stateText = "";
if (text == "ON") {
    digitalWrite(controlPin, HIGH);
    stateText = "Turned ON!";
    Serial.println(stateText);
    state = requestSender(stateText);
    manageState(state);
} else {
    digitalWrite(controlPin, LOW);
    stateText = "Turned OFF!";
    Serial.println(stateText);
    state = requestSender(stateText);
    manageState(state);
}

ステップ3:ESP32でNgrokをセットアップする方法

ローカルでウェブフックをテストするには ngrok.Ngrok を使用すると、ローカルのエンドポイントをインターネットに公開し、Vonage SMS API からの受信リクエストを受け取ることができます。

ngrok はコンピュータにローカルにインストールして実行できます。ngrokをインストールするには ngrokのダウンロードページ.ngrok が提供するオペレーティングシステム固有の指示に従います。

ngrok Download Pagengrok-download-page.png

次に、ESP32の電源を入れ、ネットワークに接続するまで待ちます。コンピューターのUSBポートに接続し、Arduino IDEでシリアルモニターを開きます。

シリアルモニターから、起動時に表示されるESP32のIPアドレスをコピーします。

ESP32's Local IP Address shown inside Arduino IDE's Serial Monitoresp32-local-ip-arduino-ide.png

コンピュータで新しいターミナル・ウィンドウを開く。実行する ngrok http <esp32-ip-address>:80.を実行します。 <esp32-ip-address>をESP32のローカルIPアドレスに置き換えてください。

例えば ngrok http 10.10.1.10:80ngrokはあなたのESP32に一般からアクセス可能なトンネルを開きます。

ngrok CLI Tunnel information shown inside a terminal windowngrok-cli-output-terminal.png

ステップ4: Vonage Webhookのセットアップ方法

ESP32とngrokトンネルをセットアップしたので、Vonage webhookをセットアップすることができます。Webhookは受信SMSメッセージをngrokトンネルに送信し、ngrokトンネルはそれをESP32に転送する。

Vonageアカウントのダッシュボードで、ngrokトンネルのURLを指定してウェブフックを設定できます。に移動します。 Vonage設定.API Keysタブで、SMS settingsを見つけます。SMS設定の下にある SMS APIとウェブフック形式を POST-JSON.

ターミナル・ウィンドウに戻って ForwardingURLをコピーする。

ngrok Forwarding URL shown inside a terminal windowngrok-forwarding-url-terminal.png

Vonage Settingsに以下を貼り付けます: /rest/endpointをInbound SMS webhooksの下に貼り付けます。例えば https://b462-31-223-156-70.ngrok-free.app/rest/endpoint.

右上の変更を保存を押して、ウェブフックを保存します。

ステップ5:アプリのテスト

を含むSMSを送信する。 ONまたは OFFを含むSMSを送信する。 Vonage番号.

Vonageがリクエストの処理を終えると、制御しているデバイス(電球など)に変化が現れ、Arduino IDEのシリアルモニターにそれぞれの出力が表示されるはずです。

Serial output from ESP32 shown in the Arduino IDEserial-out-esp32-in-ide.png

その後、操作の状態について確認のSMSが返信されるはずです。

次のステップとリソース

ESP32とVonage SMS APIを使用して、より高度なホームオートメーションシステムを探求することができます。また Vonage開発者向けドキュメントを参照してください。

ESP32の詳細については、公式の ESP-IDFドキュメント.

結論

ESP32マイクロコントローラーを使用したホームオートメーションにVonage SMSを使用することで、自宅の様々な面を遠隔操作できる強力で便利な方法です。このチュートリアルで説明する手順に従って、基本的なシステムをセットアップし、ニーズに合わせて拡張することができます。

ご質問やフィードバックがありましたら Vonage開発者向けSlackに参加するか ツイッターをお送りください。また次回もお楽しみに!

シェア:

https://a.storyblok.com/f/270183/398x400/d25c3f913d/dejan-lukic.jpg
Dejan Lukićゲスト執筆者

バックエンド開発者、テクニカルライターから起業家に転身し、約10年の経験を持つ。13歳でキューブサット衛星を開発し、16歳で起業のため海外に移住。現在はテクニカル・コンテンツ・エージェンシーNXNEを経営。LinkedInで最もアクティブに活動し、時折Twitterも利用する。