【PR】この記事には広告が含まれています。
最近、ChatGPTをはじめとした人工知能(AI)の急速な進化が注目されています。ラズベリーパイのマイコンRaspberry Pi Pico WとChatGPT APIを使えば、電子工作にAIを組み込むことが可能です。
この記事では、プログラミング言語のMicroPythonでChatGPT APIを使う方法を解説します。Raspberry Pi Pico WとChatGPT APIを使って、自分だけのAIを組み込んだ作品に挑戦してみましょう。
本記事はRaspberry Pi Pico Wというマイコンを使用します。マイコンではなく普通のRaspberry PiでChatGPTを使う方法は以下の記事で解説しています。
≫ 次世代の電子工作!Raspberry PiとChatGPTのコラボ作品集
ChatGPTは文章生成AI
ChatGPTは人工知能(AI)の一種で、コンピューターが人間と同じように自然な文章を作成することができる技術です。例えば、何かしらの質問に答えたり、指示された文章を作成したりすることができます。
まるでロボットに話しかけているような感覚で、コンピューターと会話ができます。
APIを使えばプログラミングでChatGPTが利用可能
APIとは、Application Programming Interfaceの略称で、プログラムの機能を外部に公開するためのインターフェースのことです。
ChatGPT APIは、プログラムから文章を生成したり、文章を理解したりすることができます。これをMicroPythonで利用することにより、Raspberry Pi Pico WからChatGPTに質問を送り、応答を受け取ることが可能です。
ChatGPT APIは無料枠が使える
2023年3月時点でのChatGPT API使用料金は以下の通りです。トークンとは単語数を計測する単位のことで、日本語の場合1000トークンで約750文字となります。
モデル | 料金 | 備考 |
---|---|---|
GPT-4 8K context | 入力:$0.03 / 1000トークン 出力:$0.06 / 1000トークン | 8000トークンまで使えるプラン |
GPT-4 32K context | 入力:$0.06 / 1000トークン 出力:$0.12 / 1000トークン | 32000トークンまで使えるプラン |
gpt-3.5-turbo | $0.002 / 1000トークン | - |
Davinci | $0.0200 / 1000トークン | - |
ChatGPT APIは使用量に応じて、利用料金が発生します。利用料金の詳細はこちらのサイトで詳しく解説されています。
APIキーを発行する
ChatGPT APIを利用するにはAPIキーが必要です。APIキーはWeb APIを使用するために必要なパスワードのようなものです。
APIキーを発行する方法は以下のサイトが参考になります。
【画像付き】OpenAI(ChatGPT)のAPIキー取得手順
チェックポイント
APIキーの取り扱いには注意が必要です。第三者に悪用されると、課金額が増加する可能性があります。
ChatGPT APIを利用する方法
APIキーが発行できたら、プログラムを作成していきます。
開発環境
本記事では以下の開発環境を使用します。
- マイコン:Raspberry Pi Pico W(ピンヘッダー取り付け済)
- プログラミング言語:MicroPython
- IDE:Thonny
上記の開発環境を準備する方法は以下の記事で詳しく解説しています。
≫ Raspberry Pi Pico W 無線LAN機能の使い方完全ガイド
ChatGPT APIにアクセスするコード
以下のコードをPico Wに保存します。Wi-FiのSSIDとパスワードおよびAPIキーの部分をご自身のものに変更してください。
2023.4.1追記
以下のコードはセキュリティ的に脆弱性があることがわかりました。最悪の場合APIキーが漏洩するリスクがあります。対策としてCircuitPythonを使ったより安全なコードを記事の最後に記載しました。本記事内のコードの使用については自己責任でお願いします。
import urequests as requests
import network
import utime
import json
#自宅Wi-FiのSSIDとパスワードを入力
ssid = 'YOUR NETWORK SSID'
password = 'YOUR NETWORK PASSWORD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
utime.sleep(1)
# Define blinking function for onboard LED to indicate error codes
def blink_onboard_led(num_blinks):
led = machine.Pin('LED', machine.Pin.OUT)
for i in range(num_blinks):
led.on()
utime.sleep(.2)
led.off()
utime.sleep(.2)
# Handle connection error
# Error meanings
# 0 Link Down
# 1 Link Join
# 2 Link NoIp
# 3 Link Up
# -1 Link Fail
# -2 Link NoNet
# -3 Link BadAuth
wlan_status = wlan.status()
blink_onboard_led(wlan_status)
if wlan_status != 3:
raise RuntimeError('Wi-Fi connection failed')
else:
print('Connected')
status = wlan.ifconfig()
#print('ip = ' + status[0])
# OpenAI API key
openai_api_key = "YOUR OpenAI API key" # 前述で発行したAPIキーを入力
# OpenAI Chat Completion APIエンドポイントを設定
ENDPOINT = 'https://api.openai.com/v1/chat/completions'
# Chatbotの応答を取得する関数
def get_chat_response(prompt):
# APIリクエストヘッダーを設定
headers = {
'Content-Type': 'application/json; charset=utf-8',
'Authorization': 'Bearer ' + openai_api_key
}
# APIリクエストデータを設定
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': prompt }]
}
# APIリクエストを送信
json_data = json.dumps(data)
encoded_data = bytes(json_data, 'utf-8')
response = requests.post(ENDPOINT, headers=headers, data=encoded_data)
# API応答を解析
response_json = json.loads(response.text)
message = response_json['choices'][0]['message']['content'].strip()
return message
# Chatbotに挨拶する
prompt = "あなたは誰?"
print('User: ' + prompt)
# Chatbotの応答を取得
chat_response = get_chat_response(prompt)
print('Chatbot: ' + chat_response)
上記のコードをThonnyで実行すると、「あなたは誰?」という質問に対する返事が出力されます。
prompt = “あなたは誰?”のテキストを変更すれば、さまざまな質問や指示を出すことができます。
コードの解説
6~50行目はWi-Fiに接続するためのコードです。
# OpenAI API key
openai_api_key = "YOUR OpenAI API key" # 前述で発行したAPIを入力
# OpenAI Chat Completion APIエンドポイントを設定
ENDPOINT = 'https://api.openai.com/v1/chat/completions'
OpenAI APIキーとChat Completion APIエンドポイントを設定します。Chat Completion APIを使用して、Chatbotからの応答を取得します。
# Chatbotの応答を取得する関数
def get_chat_response(prompt):
# APIリクエストヘッダーを設定
headers = {
'Content-Type': 'application/json; charset=utf-8',
'Authorization': 'Bearer ' + openai_api_key
}
# APIリクエストデータを設定
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': prompt }]
}
# APIリクエストを送信
json_data = json.dumps(data)
encoded_data = bytes(json_data, 'utf-8')
response = requests.post(ENDPOINT, headers=headers, data=encoded_data)
# API応答を解析
response_json = json.loads(response.text)
message = response_json['choices'][0]['message']['content'].strip()
return message
‘get_chat_response’関数は、OpenAI Chatbotの応答を取得するために使用されます。この関数では、APIリクエストヘッダーとデータを設定し、OpenAI Chat Completion APIエンドポイントにPOSTリクエストを送信。API応答はJSON形式であり、このコードでは、JSONデータを処理するためにPythonの’json’モジュールを使用しています。
# Chatbotに挨拶する
prompt = "あなたは誰?"
print('User: ' + prompt)
# Chatbotの応答を取得
chat_response = get_chat_response(prompt)
print('Chatbot: ' + chat_response)
最後に、Chatbotに対する挨拶(prompt)を設定し、’get_chat_response’関数を使用してChatbotからの応答を取得。そして、応答をコンソールに表示します。
ChatGPTの応答を小型ディスプレイへ表示させる
ChatGPT APIの基本的な使い方をマスターしたら、次はチャットの応答をディスプレイに表示してみましょう。
Picoで使用できるディスプレイは多数販売されていますが今回は0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色を使用します。
Picoとディスプレイは以下のように接続します。
ライブラリーのインストール
Picoでディスプレイを制御するためにssd1306というライブラリーをインストールします。ライブラリーのインストール方法は以下のサイトがとてもわかりやすいため参考にしてください。
【Raspberry Pi Pico】OLEDディスプレイ(I2C)に文字を描画する方法【MicroPython】
日本語フォントを使えるようにする
今回はRaspberry Pi Pico MicroPython用美咲フォントライブラリというものを使わせていただきます。以下のようにmisakifontという名前のフォルダーを作成して、その中に4つのファイルを配置します。
日本語フォントの表示を確認する
import machine
import ssd1306
from misakifont import MisakiFont
import time
"""
美咲フォントのビットマップ表示
"""
def show_bitmap(oled, fd, x, y, color, size):
for row in range(0, 7):
for col in range(0, 7):
if (0x80 >> col) & fd[row]:
oled.fill_rect(int(x + col * size), int(y + row * size), size, size, color)
oled.show()
sda = machine.Pin(0)
scl = machine.Pin(1)
i2c = machine.I2C(0, sda=sda, scl=scl, freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
oled.fill(0)
mf = MisakiFont()
str = "私はChatGPTと呼ばれる人工知能の一種です。"
color = 1
size = 2 # フォントサイズを2倍にする
x = 0
y = 0
for c in str:
d = mf.font(ord(c))
show_bitmap(oled, d, x, y, color, size)
x += 8 * size
if x >= 128:
x = 0
y += 8 * size
if y >= 64:
y = 0
time.sleep(0.02)
上記のコードを実行すると、以下のようにテキストが表示されます。
ChatGPTの応答を小型ディスプレイへ表示させるコード
import urequests as requests
import network
import utime
import json
import machine
import ssd1306
from misakifont import MisakiFont
import time
"""
美咲フォントのビットマップ表示
"""
def show_bitmap(oled, fd, x, y, color, size):
for row in range(0, 7):
for col in range(0, 7):
if (0x80 >> col) & fd[row]:
oled.fill_rect(int(x + col * size), int(y + row * size), size, size, color)
oled.show()
sda = machine.Pin(0)
scl = machine.Pin(1)
i2c = machine.I2C(0, sda=sda, scl=scl, freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
oled.fill(0)
mf = MisakiFont()
#自宅Wi-FiのSSIDとパスワードを入力
ssid = 'YOUR NETWORK SSID'
password = 'YOUR NETWORK PASSWORD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
utime.sleep(1)
# Define blinking function for onboard LED to indicate error codes
def blink_onboard_led(num_blinks):
led = machine.Pin('LED', machine.Pin.OUT)
for i in range(num_blinks):
led.on()
utime.sleep(.2)
led.off()
utime.sleep(.2)
# Handle connection error
# Error meanings
# 0 Link Down
# 1 Link Join
# 2 Link NoIp
# 3 Link Up
# -1 Link Fail
# -2 Link NoNet
# -3 Link BadAuth
wlan_status = wlan.status()
blink_onboard_led(wlan_status)
if wlan_status != 3:
raise RuntimeError('Wi-Fi connection failed')
else:
print('Connected')
status = wlan.ifconfig()
#print('ip = ' + status[0])
# OpenAI API key
openai_api_key = "YOUR OpenAI API key" # 前述で発行したAPIを入力
# OpenAI Chat Completion APIエンドポイントを設定
ENDPOINT = 'https://api.openai.com/v1/chat/completions'
# Chatbotの応答を取得する関数
def get_chat_response(prompt):
# APIリクエストヘッダーを設定
headers = {
'Content-Type': 'application/json; charset=utf-8',
'Authorization': 'Bearer ' + openai_api_key
}
# APIリクエストデータを設定
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': prompt }]
}
# APIリクエストを送信
json_data = json.dumps(data)
encoded_data = bytes(json_data, 'utf-8')
response = requests.post(ENDPOINT, headers=headers, data=encoded_data)
# API応答を解析
response_json = json.loads(response.text)
#print(response_json)
#response = response_json.json()
message = response_json['choices'][0]['message']['content'].strip()
#print(message)
return message
# Chatbotに挨拶する
prompt = "こんにちは!元気?"
print('User: ' + prompt)
# Chatbotの応答を取得
chat_response = get_chat_response(prompt)
print('Chatbot: ' + chat_response)
oled.fill(0)
str = chat_response
x = 0
y = 0
color = 1
size = 2 # フォントサイズを2倍にする
for c in str:
d = mf.font(ord(c))
show_bitmap(oled, d, x, y, color, size)
x += 8 * size
if x >= 128:
x = 0
y += 8 * size
if y >= 64: # y座標が64を超えたら
oled.scroll(0, -8 * size) # 画面を上にスクロール
y -= 8 * size # y座標を1行分戻す
oled.fill_rect(0, y, 128, 8 * size, 0) # 新しい行をクリア
time.sleep(0.05)
上記のコードを実行すると、以下のようにChatbotの応答が表示されます。
応用編
ChatGPT APIを使ってプログラムからAIに生成させたテキストを表示する方法を解説しました。この方法を応用して、さらに面白いものを作ることが可能です。
ここからは僕の作った作例を紹介します。作成方法の詳細は省略しますが、ご自身の作品制作のアイデアに役立てていただけると嬉しいです。
人感センサーが反応したときに挨拶をする装置
人感センサーはAmazonで購入したものを使いました。
コードは以下のものを使用しています。
import urequests as requests
import network
import utime
import json
import machine
import ssd1306
from misakifont import MisakiFont
from machine import Pin
import time
import ntptime
# Chatbotの応答を取得する関数
def get_chat_response(prompt):
# APIリクエストヘッダーを設定
headers = {
'Content-Type': 'application/json; charset=utf-8',
'Authorization': 'Bearer ' + openai_api_key
}
# APIリクエストデータを設定
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': prompt }]
}
# APIリクエストを送信
json_data = json.dumps(data)
encoded_data = bytes(json_data, 'utf-8')
response = requests.post(ENDPOINT, headers=headers, data=encoded_data)
# API応答を解析
response_json = json.loads(response.text)
message = response_json['choices'][0]['message']['content'].strip()
return message
"""
美咲フォントのビットマップ表示
"""
def show_bitmap(oled, fd, x, y, color, size):
for row in range(0, 7):
for col in range(0, 7):
if (0x80 >> col) & fd[row]:
oled.fill_rect(int(x + col * size), int(y + row * size), size, size, color)
oled.show()
sda = machine.Pin(0)
scl = machine.Pin(1)
i2c = machine.I2C(0, sda=sda, scl=scl, freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
oled.fill(0)
mf = MisakiFont()
str = "私はChatGPTです。だれか来ないかな?"
x = 0
y = 0
color = 1
size = 2 # フォントサイズを2倍にする
for c in str:
d = mf.font(ord(c))
show_bitmap(oled, d, x, y, color, size)
x += 8 * size
if x >= 128:
x = 0
y += 8 * size
if y >= 64:
y = 0
time.sleep(0.02)
#自宅Wi-FiのSSIDとパスワードを入力
ssid = 'YOUR NETWORK SSID'
password = 'YOUR NETWORK PASSWORD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
utime.sleep(1)
# Define blinking function for onboard LED to indicate error codes
def blink_onboard_led(num_blinks):
led = machine.Pin('LED', machine.Pin.OUT)
for i in range(num_blinks):
led.on()
utime.sleep(.2)
led.off()
utime.sleep(.2)
# Handle connection error
# Error meanings
# 0 Link Down
# 1 Link Join
# 2 Link NoIp
# 3 Link Up
# -1 Link Fail
# -2 Link NoNet
# -3 Link BadAuth
wlan_status = wlan.status()
blink_onboard_led(wlan_status)
if wlan_status != 3:
raise RuntimeError('Wi-Fi connection failed')
else:
print('Connected')
status = wlan.ifconfig()
#print('ip = ' + status[0])
# gpio 設定
pir = Pin(2, Pin.IN, Pin.PULL_DOWN)
led = machine.Pin("LED", machine.Pin.OUT)
led.value(0)
utime.sleep(1)
# 監視の開始
while True:
print(pir.value())
if pir.value() == 0:
led.value(0)
utime.sleep(1)
else:
led.value(1)
oled.fill(0)
str = "!"
x = 50
y = 15
color = 1
size = 4 # フォントサイズを2倍にする
for c in str:
d = mf.font(ord(c))
show_bitmap(oled, d, x, y, color, size)
x += 8 * size
if x >= 128:
x = 0
y += 8 * size
if y >= 64:
y = 0
time.sleep(0.02)
timZone = 9
ntptime.host = "ntp.nict.jp"
ntptime.settime()
t0 = machine.RTC().datetime()
hour = t0[4] + timZone
# 24時を超えた場合、時間を-24する
if hour >= 24:
hour -= 24
minute = t0[5]
current_time = "{0:02d}:{1:02d}".format(hour, minute)
print(current_time)
# OpenAI API key
openai_api_key = "YOUR OpenAI API key" # 前述で発行したAPIを入力
# OpenAI Chat Completion APIエンドポイントを設定
ENDPOINT = 'https://api.openai.com/v1/chat/completions'
prompt = "現在時刻は"+current_time+"だよ。\
時刻に合った声かけをして。時刻は書かないでね。\
返事は20文字から30文字で書いてね。\
漢字をできるだけ使わないでね。\
文字数は書かないでね。"
print('User: ' + prompt)
# Chatbotの応答を取得
chat_response = get_chat_response(prompt)
print('Chatbot: ' + chat_response)
oled.fill(0)
str = chat_response
x = 0
y = 0
color = 1
size = 2 # フォントサイズを2倍にする
for c in str:
d = mf.font(ord(c))
show_bitmap(oled, d, x, y, color, size)
x += 8 * size
if x >= 128:
x = 0
y += 8 * size
if y >= 64: # y座標が64を超えたら
oled.scroll(0, -8 * size) # 画面を上にスクロール
y -= 8 * size # y座標を1行分戻す
oled.fill_rect(0, y, 128, 8 * size, 0) # 新しい行をクリア
time.sleep(0.05)
break
プロンプトは以下のものを使っています。指示をできるだけ詳細に書くのがコツです。
プロンプトに「あなたはペットの猫です」を追加すれば、猫になりきっておしゃべりしてくれます。
AIにスタイリストをしてもらう装置
プロンプトは以下のものを使っています。最低気温などは、あらかじめスクレイピングした数値をmin_tempといった変数に格納して渡しています。
天気情報の取得には、天気予報 API(livedoor 天気互換)という無料で使えるAPIを利用しました。
AIのAPIが電子工作に革命をもたらす
ChatGPT APIは、電子工作に革命をもたらす可能性があります。ChatGPTは自然言語処理分野において高い評価を得ており、電子工作の分野でもその応用範囲は拡大していくことが期待されるからです。
僕自身、低コストなマイコンで高性能なAIを扱えることに感動しています。
あなたはAIをを使ってどんな作品を作りますか?
【追記】より安全なコード(CircuitPython版)
前項までのMicroPythonのコードではHTTPS接続ができないため、APIリクエストが暗号化されず第三者に傍受される可能性があります。
これから解説するCircuitPythonのコードでは、adafruit_requestsライブラリを使用しており、HTTPS接続をサポートしています。これにより、APIリクエストが暗号化され第三者による傍受を防ぐことが可能です。
チェックポイント
CircuitPythonはプログラミング言語Pythonをベースにした、マイクロコントローラ向けの軽量で使いやすいオープンソースのプログラミング環境です。
CircuitPythonの環境を作る
CircuitPythonを使うには以下の準備が必要です。
- CircuitPythonのUF2ファイルをダウンロードする。
- CircuitPythonのライブラリー(adafruit_requests)をインストールする。
ファームウェアの準備
CircuitPythonのUF2ファイルはこちらからダウンロードできます。
ダウンロードしたuf2ファイルをRPI-RP2(D:)にドラッグアンドドロップします。
CircuitPythonはThonnyを使って開発することができます。
ライブラリのインストール
「adafruit_requests」と「adafruit_connection_manager」というライブラリをPico Wにインストールする必要があります。手順は以下の通りです。
- CircuitPythonのライブラリをまとめてパソコンへダウンロードする
- 必要なライブラリ(adafruit_requests、adafruit_connection_manager)をPico Wのlibフォルダーへコピーする
ライブラリのインストール方法は以下のサイトで、とても詳しく解説されています。
ラズパイPicoの使い方 CircuitPython&開発環境Thonny
uf2ファイルとライブラリのバージョンが一致していないと、エラーが出ることがあります。インストール時には、それぞれのバージョンを確認してください。
ChatGPT APIにアクセスするコード(CircuitPython版)
import board
import wifi
import socketpool
import ssl
import json
import time
from adafruit_requests import Session
# 自宅Wi-FiのSSIDとパスワードを入力
ssid = 'YOUR NETWORK SSID'
password = 'YOUR NETWORK PASSWORD'
# Wi-Fiに接続
print("Connecting to Wi-Fi...")
wifi.radio.connect(ssid, password)
print("Connected!")
# socketpoolとrequestsライブラリを使用するための設定
pool = socketpool.SocketPool(wifi.radio)
requests = Session(pool, ssl.create_default_context())
# OpenAI API key
openai_api_key = "YOUR OpenAI API key" # 前述で発行したAPIキーを入力
# OpenAI Chat Completion APIエンドポイントを設定
ENDPOINT = 'https://api.openai.com/v1/chat/completions'
# Chatbotの応答を取得する関数
def get_chat_response(prompt):
# APIリクエストヘッダーを設定
headers = {
'Content-Type': 'application/json; charset=utf-8',
'Authorization': 'Bearer ' + openai_api_key
}
# APIリクエストデータを設定
data = {
'model': 'gpt-3.5-turbo',
'messages': [{'role': 'user', 'content': prompt }]
}
# APIリクエストを送信
response = requests.post(ENDPOINT, headers=headers, json=data, timeout=60)
# API応答を解析
response_json = response.json()
message = response_json['choices'][0]['message']['content'].strip()
return message
# Chatbotに挨拶する
prompt = "あなたは誰?"
print('User: ' + prompt)
# Chatbotの応答を取得
chat_response = get_chat_response(prompt)
print('Chatbot: ' + chat_response)
上記の20行目で、ssl.create_default_context()を使用してデフォルトのSSLコンテキストを作成しています。これによりCA証明書の検証が行われ、中間者攻撃(MITM)を防ぐことができます。
コメント一覧
楽しい記事と詳しい解説ありがとうございます。
影響受けて最近PicoWとCircuit Pythonを始めた物です。
adafruit_httpserverを使った遠隔操作&表示のサンプルプログラムは動作するので楽しんでます。
adafruit_requestsを使ったChatGPT APIを使用するサンプルがエラーになります。
トレースバック(最新の呼び出しが末尾):
ファイル “code.py”, 行 7 内の
ValueError: incompatible .mpy file
Adafruit CircuitPython 9.0.2でライブラリ9.x環境のせいかなと思ってますが
初心者の為回避策がわかりません。
9.x環境でも動作しますでしょうか?
もし変更点あれば9.x環境でのサンプルと記事も検討いただければ幸いです。
ブログを読んでいただきありがとうございます。
また、情報が更新されておらず、ご迷惑をおかけしております。
adafruit_requestsを使ったChatGPT APIを使用するコードの動作の確認をしましたので
ポイントを説明します。
・UF2ファイルは最新のCircuitPython 9.0.3を使用
・ライブラリは、Bundle for Version 9.xのadafruit_requests.mpyとadafruit_connection_manager.mpyをインストール
・ChatGPT APIにアクセスするコード(CircuitPython版)の7行目をfrom adafruit_requests import Sessionに変更
ご質問にありました「ValueError: incompatible .mpy file」は
Pico Wで使用している .mpy ファイル(ライブラリ)が、ファームウェア(UF2ファイル)のバージョンと互換性がないことを示しています。
今一度、バージョンの確認および再インストールを試してみてください。
また何かありましたら、お気軽にご連絡ください。
よろしくお願いいたします。
ご回答いただきありがとうございます
アドバイスいただきましたファイルのバージョン確認と
再インストールでエラーが出なくなりました。
迅速なお返事、感謝いたします。
UF2ファイルを最新のCircuitPython9.0.3にして
ライブラリbundle-9.x-mpy-20240402を再度コピーしました。
無線LAN機能の使い方完全ガイドも楽しい記事が多く試してみたいのですが
MicroPythonも使うか悩んでます
どちらにも詳しいそぞらさんが
CircuitPythonとの比較や移植のポイントをまとめた記事を期待いたします。
ライブラリが違いすぎて初心者には荷が重い。。
今後も楽しい記事を楽しみにしています。
面白い記事ありがとうございます。
上記実行してみたところ下記のエラーになります。
原因わかれば教えていただきたいです。
Connecting to Wi-Fi…
Connected!
User: あなたは誰?
トレースバック(最新の呼び出しが末尾):
ファイル “”, 行 54, in
ファイル “”, 行 46, in get_chat_response
KeyError: choices
]0;🐍192.168.0.23 | REPL | 8.0.5\
Adafruit CircuitPython 8.0.5 on 2023-03-31; Raspberry Pi Pico W with rp2040
ブログを読んでいただき、ありがとうございます。
エラー原因につきまして、
APIキーが間違っていたり無効になっている可能性が考えられます。
試しに自分の環境でAPIキーを1字変更して
実行したところ、全く同じエラーが出ました。
ご回答ありがとうございました。
理由はよくわかりませんが、突然APIの返答が来て動きました。
キーは問題なかったようです。
カード登録して、ChatGPT に質問していたら、知らないうちに動くようになりました。
登録して、キーをもらうだけでは動かないのかもしれません。
ちなみに挨拶は英語にしましたが、下記のとおりレスポンスがありました。
結局原因はよくわからんです。
Connecting to Wi-Fi…
Connected!
User: Hello!
Chatbot: Hello! How can I assist you today?
教えていただいたプログラムをベースにもう少し遊んでみます。
いろいろなことができそうで、わくわくしますね。
ありがとうございました。
今後もブログ更新たのしみにしています。