Gemini API とモノのインターネット

2025年3月31日
Paul Ruiz Senior Developer Relations Engineer

人工知能があらゆるものに導入され、モノのインターネット(IoT)の領域は急速に変化しています。AI とクラウド サービスが進化したおかげで、標準センサーやアクチュエーターだけでなく、シンプルなマイクロコントローラをさまざまなものに組み込めるようになり、インタラクティブでインテリジェントなデバイスを作れるようになっています。この投稿では、IoT デベロッパーが Gemini REST API を使って、カスタム音声コマンドを理解して応答するデバイスを作る方法を説明します。デジタル世界と現実世界のギャップを埋め、以前は困難だった現実の問題を解決しましょう。

話を簡単にするため、この投稿では概念のみをお伝えします。ESP 32 マイクロコントローラの活用方法については、GitHub の完全なコード例とデバイスの回路図をご覧ください。


音声をアクションに: 音声認識とカスタム関数を活用する

これまでは IoT デバイス、特にメモリが限られたデバイスに音声認識を組み込むことは複雑な作業でした。マイクロコントローラ用 LiteRT のようなソリューションは、キーワードを認識する基本モデルを実行できます。しかし、人間の言語はそれよりもはるかに幅広く、微妙な意味合いを含む入力です。Gemini API を使えば、デベロッパーが言語を簡単に利用することができます。Gemini API は強力なクラウドベースのソリューションで、1 つのツールだけでさまざまな音声言語を理解できます。複数の異なる言語に対応することも、組み込みデバイスで実行するアクションをユーザーからの入力に基づいて決めることもできます。

こういった機能を実現するのが Gemini API です。Gemini API は、IoT デバイスから取得したオーディオ データを処理して解釈し、デバイスが取るべき次のステップを決定できます。これは次のプロセスに従って行われます。

1. オーディオ キャプチャ: マイク付きの IoT デバイスが音声をキャプチャします。

2. オーディオ エンコーディング: 音声をインターネット送信用の形式にエンコードします。前述の公式サンプルでは、アナログ信号を WAV 形式のオーディオに変換し、Gemini API 用に base64 エンコード文字列に変換します。

3. API リクエスト: REST API 呼び出しを行い、エンコードしたオーディオを Gemini API に送信します。この呼び出しには Gemini への指示を含めます。たとえば、音声コマンドのテキストを要求したり、あらかじめ定義されているカスタム関数(照明を付けるなど)を Gemini に選択させたりします。Gemini API の関数呼び出し機能を使う場合は、リクエスト JSON で、名前、説明、パラメータなどの関数を定義する必要があります。

4. 処理: Gemini API の AI モデルは、エンコードされたオーディオを分析し、適切な応答を決定します。

5. 応答: API から IoT デバイスにオーディオの文字起こし、呼び出すべき次の関数、追加の手順を含むテキスト応答などの情報が返されます。


たとえば、音声コマンドで LED を制御し、電源をオンまたはオフにしたり、色を変更したりすることを考えてみましょう。ここでは、2 つの機能を定義できます。1 つは LED のオンとオフを切り替える機能、もう 1 つは色を変える機能です。あらかじめ設定された色に限定するのではなく、0 から 255 までの任意の RGB 値を使えるようにすることで、1600 万色以上の組み合わせを実現できます。

次のリクエストは、その方法を示しています。このリクエストには、base64 でエンコードしたオーディオ文字列($DATA)が含まれています。

{
    "contents": [
        {
            "parts": [
                {
                    "text": "Trigger a function based on this audio input."
                },
                {
                    "inline_data": {
                        "mime_type": "audio/x-wav",
                        "data": "$DATA"
                    }
                }
            ]
        }
    ],
    "tools": [
        {
            "function_declarations": [
                {
                    "name": "changeColor",
                    "description": "Change the default color for the lights in an RGB format. Example: Green would be 0 255 0",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "red": {
                                "type": "integer",
                                "description": "A value from 0 to 255 for the color RED in an RGB color code"
                            },
                            "green": {
                                "type": "integer",
                                "description": "A value from 0 to 255 for the color GREEN in an RGB color code"
                            },
                            "blue": {
                                "type": "integer",
                                "description": "A value from 0 to 255 for the color BLUE in an RGB color code"
                            }
                        },
                        "required": [
                            "red",
                            "green",
                            "blue"
                        ]
                    }
                },
                {
                    "name": "toggleLights",
                    "description": "Turn on or off the lights",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "toggle": {
                                "type": "boolean",
                                "description": "Determine if the lights should be turned on or off."
                            }
                        },
                        "required": [
                            "toggle"
                        ]
                    }
                }
            ]
        }
    ]
}

とても簡単な例ですが、ここから IoT 開発の多くの実用的なメリットが明らかになります。

  • ユーザー エクスペリエンスの向上: 低メモリデバイスでも簡単に音声入力をサポートできるので、直感的で自然なインタラクションを実現できます。

  • シンプルなコマンド処理: この設定により、複雑な解析ロジック(音声コマンドを分解する、次に実行する機能を選んでもらうために複雑な手動入力を待機するなど)が不要になります。

  • 動的な関数実行: Gemini AI は、ユーザーの意図に基づいて適切なアクションをインテリジェントに選択してくれるので、デバイスがダイナミックになり、複雑な操作を実現できます。

  • 文脈理解: 古い音声認識パターンでは、「明かりをつける」や「明るさを 70% にセットする」のような構造が必要でした。しかし、Gemini API なら、「ここは暗い!」、「読書灯をお願い」、「暗くて不気味な感じにして」など、細かい指定をしなくても一般的な文を理解できるので、ユーザーに適切なソリューションを提供できます。

デベロッパーは、関数呼び出しやオーディオ入力を Gemini API と組み合わせることで、音声コマンドにインテリジェントに応答する IoT デバイスを作成できます。


アイデアを現実に変える

オーディオと関数呼び出しは、AI で IoT デバイスを拡張するために不可欠なツールです。しかし、驚くほど便利なインテリジェント デバイスを作成するために、さらにほかのものを使うこともできます。次のような領域を考えてみるとよいでしょう。

  • スマートホーム オートメーション: 音声コマンドで照明や家電などの機器を制御することで、利便性やアクセシビリティを向上させます。

  • ロボティクス: 音声コマンドでロボットに指示を出したり、画像や動画のストリームを Gemini API に送信したりすることで、ナビゲーション、タスク実行、インタラクションを実現します。反復タスクを自動化し、さまざまな設定に役立てることができます。

  • 産業用 IoT: 特殊な機械や装置を強化することで、生産性を向上させたり、それを使う人のリスクを軽減したりします。


次のステップ

Gemini API を使って開発したすばらしい作品を見るのがとても楽しみです。皆さんのアプリケーションは、私たちが周囲の世界と対話する方法を変え、AI の力で現実世界の問題を解決できます。LinkedIn の Google AI for DevelopersX の Google AI Developers で、ぜひプロジェクトを共有してください。