工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド

部品と材料

部品 数量 備考
Arduino UNO 1 メイン制御ボード
Espressif ESP8266 ESP-01 1 Wi-Fiモジュール、Arduinoとシリアル通信

アプリとオンラインサービス

プロジェクト概要

このプロジェクトでは、インターネットサービスとArduinoボードを接続し、音声コマンドでArduinoのI/Oピン、PWM、シリアルポート等を制御する方法を学びます。完了時には以下が可能になります:

GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド

GoogleアシスタントとIFTTTアプレット

GoogleアシスタントはAI搭載のバーチャルアシスタントで、自然な会話による双方向インタラクションが可能です。IFTTT(If This Then That)は「もし〜なら、それなら〜」という条件付きアクション(アプレット)を作成できる無料Webサービスで、Googleアシスタントを含む多数のサービスと連携できます。

GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド

WebhookとJSON

Webhook は、Webアプリケーションの振る舞いをカスタムコールバックで拡張する仕組みです。JSON (JavaScript Object Notation) は、属性-値ペアと配列でデータを表現する軽量フォーマットで、非同期通信の標準的なデータ形式として広く使われています。

GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド

GoogleアシスタントからArduinoへのデータフロー

  1. ユーザーがGoogleアシスタントに話しかける(例:「ピン9のPWMを255に設定」)
  2. IFTTTアプレットがトリガーされ、WebhookでサーバーへHTTP POSTリクエスト送信
  3. サーバーがデータをデータベースに保存
  4. ESP8266が定期的にサーバーをポーリングし、新しいコマンドを取得
  5. ESP8266がシリアル通信でArduinoへコマンド転送
  6. Arduinoがコマンドを解釈し、PWM出力等を実行
GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド

実装手順

1. IFTTTアプレット作成

  1. ifttt.com でアカウント作成・ログイン
  2. [My Applets] → [New Applet] → [THIS] で「Google Assistant」を選択
  3. 「Say a phrase with a number ingredient」(数値を含むフレーズ)を選択
  4. フレーズ設定例: Set PWM of pin 9 to # (# が数値プレースホルダー)
  5. 同義語も追加可能: PWM 9 to # 等
  6. 応答メッセージ設定例: The PWM is updated
  7. [Create Trigger] → [THAT] で「Webhooks」を選択 → [Make a web request]
  8. 設定:
    • URL: あなたのサーバーのエンドポイント(例: https://yourserver.com/api/Home/SetPWM)
    • Method: POST
    • Content Type: application/json
    • Body: {"Number": "{{NumberField}}"}
  9. [Create Action] で完了
GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド

2. サーバーとデータベース

IFTTTからのWebhookを受け取り、データベースに保存するサーバーサイドコードが必要です。サンプルコード(C#/ASP.NET)はプロジェクトページからダウンロード可能です。モデルを変更して用途に合わせて拡張できます。

3. ESP8266とArduinoのコード

前提: Arduino IDEのライブラリマネージャーで ArduinoJson をインストール済みであること(Sketch → Include Library → Manage Libraries → "ArduinoJson" で検索 → Install)。

GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド
ESP8266 (ESP-01) スケッチ - サーバーからコマンド取得・Arduinoへ転送
#include "ESP8266WiFi.h"
#include "ESP8266HTTPClient.h"
#include "ArduinoJson.h"

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting...");
  }
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin("https://yourip/api/Home/GetAllApp"); // あなたのAPIエンドポイント
    int httpCode = http.GET();
    if (httpCode > 0) {
      String payload = http.getString();
      Serial.println(payload); // Arduinoへ転送(JSON文字列のまま)
      // TODO: ここでJSONパースして必要な値のみ送信するのがベスト
    }
    http.end();
  }
  delay(3000); // 3秒ごとにポーリング
}
Arduino UNO スケッチ - ESP8266から受信しPWM制御実行
String inputString = "";
String buff;
bool stringComplete = false;
bool id;
int f, buf;
char x;

void setup() {
  Serial.begin(9600);
  inputString.reserve(200);
}

void loop() {
  if (stringComplete) {
    // 簡易パース: "id" と "number" フィールドを探す
    f = 0;
    while (f < 100) {
      if (inputString.substring(f, f+2) == "id") { id = true; break; }
      f++;
    }
    if (id) {
      x = inputString.charAt(f + 4);
    }
    if (x == '4') { // コマンドID 4 = PWM制御
      f = 0;
      while (f < 100) {
        if (inputString.substring(f, f+6) == "number") {
          f += 9; // "number": " の分をスキップ
          buff = "";
          for (int i = 0; i < 3; i++) {
            char c = inputString.charAt(f + i);
            if (c == '"') break;
            buff += c;
          }
          buf = buff.toInt();
          analogWrite(9, buf); // ピン9にPWM出力
          break;
        }
        f++;
      }
    }
    inputString = "";
    stringComplete = false;
  }
}

void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    inputString += inChar;
    if (inChar == '\n') stringComplete = true;
  }
}
GoogleアシスタントでArduinoを操作する - IFTTT・Webhook・ESP8266完全ガイド

今後の拡張アイデア

回路図

ESP-01のTX→Arduino RX (pin 0)、ESP-01のRX→Arduino TX (pin 1) でシリアル接続。ESP-01は3.3V駆動のため、レベルシフターまたは抵抗分圧で5V↔3.3V変換が必要です。電源は別系統またはArduino 3.3Vピン(電流容量注意)から供給。

製造プロセス

  1. QR・RFID・体温検知統合アクセス制御システム(Raspberry Piベース)
  2. Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
  3. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  4. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  5. Arduino Nanoとジョイスティックで2軸ステッピングモーターを制御:Visuinoで簡単プログラミング
  6. Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
  7. 音声で家電を操作:GoogleアシスタントとBluetoothでArduino家電制御
  8. u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
  9. Arduino Dueでマスターする音声認識と音声合成
  10. ThimbleKrox: Arduino MicroとMPU-6050を用いた指装着型マウス制御
  11. ArduinoとGoogleスプレッドシート連携 リアルタイムRFID勤怠管理システム