AIスタックチャンミニマルとわたくし
https://scrapbox.io/files/674ba7035b658f39237ca597.svg
はじめに
AIスタックチャン - ミニマル
https://scrapbox.io/files/674ba7035b658f39237ca597.svg
AIスタックチャンミニマルの構成は図のようになります。この構成は、他の普通のAIスタックチャンと同じ構成になっており、同じようにAIすることができます。
公開後リンク追加
AIスタックチャンミニマルの標準的な構成では、以下のような部品が用いられます。これだけで、AI動作ができるスタックチャンを手に入れることができます。
ハードウエア構成は、以下の通りです。
SSD1306
ジャンパーケーブル
ソフトウエア/サービスの構成は以下の通りです。サービスによっては利用登録や課金が必要なので、注意してください。
むとうの構成では、上記の部品以外に以下のものを利用しています。
AIスタックチャンミニマル構成用(必須)
バッテリーとtoioとの接続
toio操作用
Joystick(以下のどれか)
Proto Kit版筐体
https://gyazo.com/852adc617c86cdaf1353a8eb7177632d
写真のように、簡単なハンダ付で、AIスタックチャンミニマルが構成できます。
https://gyazo.com/b49272c3fff521eebe385db38e684043
https://gyazo.com/0fedb39c6599eabcdb3088f17366c5f1
Atom Mate for toioはバッテリーを積んでいるのですが、Grove端子から5VとGNDを接続してあげることで、Atom Echoを動かすことができます。
手元では、Atom Mate for toioのバッテリーを使うと、90 mAh版では30分程度、160 mAh版では1時間程度、利用することができました。
toioとの連携
はじめにごめんなさいなのですが、ここで紹介する構成では、Atom Echoからtoioを操作しているわけではありません。他のM5Stackシリーズからtoioを操縦するという構成になっています。
https://www.youtube.com/watch?v=-lgxvZjHF7A
toio(スイッチサイエンス,¥7,128)は小型のロボットで、専用マットを使うと位置や向きをきっちりと決めたりすることができます。その他に、フルカラーLEDが光り、音も出せるようになっています。 toioには、toioDoと呼ばれるScratchのようなブロックプログラミング環境が提供されており、簡単にプログラムを作ることができます。toioDoでは、様々な拡張機能が利用できる仕組みが用意されており、ChatGPTやPoseNetなどの機能も利用可能になっています。 (2024/12/09追記):Joystick以外にも、M5Stackシリーズの中には加速度センサー(IMU)が付いたものがあるため、これで操縦することも可能です。
(2024/12/09追記):さらに、UIFlowから加速度センサーを使って操縦することも可能です。以下のコードを参照してください(動作の様子)。 https://gyazo.com/91b20c1a64aa37ee66617aebf21af851
Web質問インターフェース(テキストで会話)での応答表示
https://gyazo.com/b5665ecb98ef8b69979b39d49551117a
AIスタックチャンミニマルには、Webインターフェース(テキストで会話)が用意されており、ここから質問を入力することができるようになっています。話しかけて答えてもらうのは素敵なのですが、こちらも便利に利用することができます。
今回、むとうは、このUIに質問と答えの内容を表示するように改造してみました。
これで、スタックチャンの答えを聞き逃しても大丈夫です!!
Xのpostを呟いてもらう
X APIを使うと、JSONで特定のユーザーのPostを取得することが可能です。
このようにして取得したデータから、文章だけを取り出して、スタックチャンにしゃべってもらおうと思いました。
以下のようなコマンドで、ユーザー610tのPostを取得することができます。
<bearer>部分は、自分のBearer IDを使ってください。
取得したデータを整形すると、以下のようになります(✂️snip✂️部分で一部省略しています)。
code:tweet.json
{
"data": [
{
"id": "1863903391929561095",
"edit_history_tweet_ids": [
"1863903391929561095"
],
},
{
"id": "1863859092772806770",
"edit_history_tweet_ids": [
"1863859092772806770"
],
},
{
"id": "1863852363397943787",
"edit_history_tweet_ids": [
"1863852363397943787"
],
"text": "うーん、10個もいらんくて、1個だけPost取りたいんだけどなぁ。Free版の制限もあるし。\n\"The max_results query parameter value 1 is not between 10 and 100\"" },
=========✂️snip✂️==========
],
"meta": {
"newest_id": "1863903391929561095",
"oldest_id": "1863792245889269848",
"result_count": 10,
"next_token": "b26v89c19zqg8o3frr3s57s0qpdho0ajqobzedsu7c2v1"
}
}
以下のようなコードで、ランダムにPostを選んでスタックチャンに尋ねることができます。192.168.11.126部分はあなたのスタックチャンのIPアドレスに置き換えてください。
code:StackChan.py
# coding: utf-8
import random
import json
import requests
import time
IP = '192.168.11.126'
HEADER = {'Content-Type': 'text/plain;charset=UTF-8'}
file = open('tweet.json','r')
tweet = json.load(file)
while True:
pos = random.randrange(num)
print('msg:{}'.format(msg))
try:
requests.post(POST_URL, headers=HEADER, data=msg)
except requests.exceptions.RequestException:
print("Maybe Response Error.")
time.sleep(60)
おわりに
AIスタックチャンミニマルは、とてもちっさくてかわいく、その上AIを使って答えてくれる頭のかしこい、良い子です。
https://gyazo.com/c0fa36dc03725a67d110ad70be0b37be
むとうの机の上には、この子とBluetoothスピーカー版が鎮座し、癒しと驚きを与えてくれています。
みなさんも、AIスタックチャンミニマルしませんか?
Enjoy スタックチャン life with AIスタックチャンミニマル!!
謝辞
以下のプロジェクトを利用させていただいています。
ありがとうございました。