10_API_ChatGPT_SW

スイッチでChatGPT APIを呼び出す

スイッチを押したときにChatGPT APIへ質問を送信します。

スイッチモジュールWi-Fi通信
1

準備する

CherryIoTとモジュールを接続する

CherryIoTの指定コネクタに以下のモジュールを接続し、CherryIoTをPCのUSB-A挿入口に接続します。

スイッチモジュール

スイッチモジュール

接続先:A

Wi-Fiの情報を確認する

CherryIoTを接続する2.4GHz Wi-FiのSSID(ネットワーク名)とパスワードを確認します。Wi-Fiルーター本体のラベルや設定画面に記載されています。分からない場合は、ネットワークの管理者に確認してください。

OpenAI APIを使用する

はじめに「09_API_ChatGPT」で、OpenAI APIを使ってChatGPTへ質問を送る基本の流れを確認してください。このサンプルでは、その流れにスイッチ操作を組み合わせます。

2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

10_API_ChatGPT_SW.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

設定情報を書き換える

コード内の以下の箇所を、「1 準備する」で確認・取得した情報に 書き換えます。

コード内の項目入力する情報
ssid接続するWi-FiのSSID
passwordWi-Fiのパスワード
openaiKeyOpenAI APIのシークレットAPIキー
const char* ssid = "ここにSSIDを入力";const char* password = "ここにパスワードを入力";String openaiKey = "ここにAPIキーを入力";

コードの左側にある項目名や記号は残し、例を参考に値の部分だけを 書き換えます。値を囲む"、行末の;、 証明書の開始・終了行などは削除しません。書き換えたあと、xxxxxなどの仮の文字が残っていないことを確認してください。

Wi-Fiのパスワード、APIキー、トークン、証明書などを入力したコードは、 Webサイト、SNS、GitHubなどへ公開しないでください。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

シリアルモニターで確認する

スイッチの状態による回答を確認する

Arduino IDEの画面右上にあるシリアルモニターのアイコンをクリックします。スイッチの状態によって、ChatGPTから表示される回答が切り替わります。① スイッチを押しているときは、ギャル風の明るいキャラクターとしての回答が表示されます。② スイッチを押していないときは、「こんにちは、今日はいい天気ですね。」という質問に対する通常の回答が表示されます。回答の内容は実行するたびに異なる場合があります。

スイッチを押しているときと押していないときのChatGPTの回答をシリアルモニターで確認する画面

スイッチを押しているときと離しているときで、設定された内容に応じたChatGPTの回答がシリアルモニターに表示されるなら成功です。

5

コードの解説

スイッチ入力をきっかけにAPIリクエストを実行し、返ってきた回答を表示します。

10_API_ChatGPT_SW.ino
GitHubで開く
GitHubからコードを読み込んでいます...

Serial.begin(115200);シリアルモニターへ文字や測定値を表示するため、通信速度を115200bpsに設定します。

pinMode(swPin, INPUT);スイッチ端子を「入力」に設定します。

if (digitalRead(swPin) == HIGH) {スイッチが押されているかを確認します。

Serial.println(openAI_chat("あなたはギャル風の明るい弾けたキャラクターの女の子です。タメ口で話します。そのキャラクター設定で話してください。こんにちは、今日はいい天気ですね。"));押されているときはキャラクター設定を含む質問をOpenAI APIへ送り、回答を表示します。

delay(1000);1秒待ちます。

} else {ifの条件(スイッチが押されている)を満たさないとき、次の処理を実行します。

Serial.println(openAI_chat("こんにちは、今日はいい天気ですね。"));通常の質問をOpenAI APIへ送り、回答を表示します。

openAI_chat_reset();1回の質問が終わるたびに会話履歴を最初の状態へ戻します。

WiFi.begin(ssid, password);設定したSSIDとパスワードでWi-Fiへ接続します。

String openAI_chat(String message) {質問をOpenAI APIへ送り、返された回答文を呼び出し元へ返す処理を、openAI_chat関数にまとめます。

String request = "{\"model\":\""+model+"\",\"messages\":[" + historical_messages + "]}";モデル名と会話履歴をAPIへ送るJSON形式にまとめます。

if (client_tcp.connect("api.openai.com", 443)) {OpenAI APIへHTTPSで接続します。

client_tcp.println("Authorization: Bearer " + openaiKey);APIキーを認証ヘッダーへ追加します。

else if (c != '\r')受信文字が改行でも復帰文字でもないとき、応答確認用の文字列へ追加します。

} else if (getResponse.indexOf("\"")!=-1&&c == '\n'&&state==true) {回答の終端を示す引用符と改行を検出したとき、回答の読み取りを終了します。

return getResponse;APIから取り出した回答文を呼び出し元へ返します。

else return "Connection failed";最初のifの条件(OpenAI APIへ接続できた)を満たさないとき、「Connection failed」を返します。

historical_messages = system_content;会話履歴を役割設定だけの初期状態へ戻します。