KittenBot KOI - AIモジュールと Kittenblock で IoT！（MQTT を使う）

表題の内容のとおりです。

## KittenBot KOI - AIモジュールについて
[KittenBot KOI - AIモジュール（以下、本文では KOI と記載）](https://www.kittenbot.cc/products/kittenbot-koi-artificaial-intelligence-module) は、以下の機能などを搭載したデバイスです。
　・カメラ　　　・マイク
　・スピーカー　・Wi-Fi
　・IPSスクリーン
実現できる内容として、以下の内容などがあるようです。
　・画像分類　・顔認識
　・音声認識　・音声合成
MCU は K210 です。

ちなみに、自分は以下のスイッチサイエンスさんのページから購入しました（ずいぶん前に...）。
　●KittenBot KOI - AIモジュール - スイッチサイエンス
　　https://www.switch-science.com/catalog/6359/

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">とりあえず月曜までは封印しておかないと。<br><br>会社帰りに近所のコンビニ（略 <a href="https://t.co/9G7FJ6lEtp">pic.twitter.com/9G7FJ6lEtp</a></p>&mdash; you (@youtoy) <a href="https://twitter.com/youtoy/status/1311643243365330945?ref_src=twsrc%5Etfw">October 1, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

公式サイトの説明・写真によると、様々なデバイスと組み合わせることができるようです。
![組み合わせられそうなデバイス.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/46d6f3ba-dd65-d441-0adf-ebe3b3a6c1d4.jpeg)

また、開発環境は以下が利用できるようです。
![開発環境.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6f4d9a37-e7da-e3d2-c510-449b4daeb10e.jpeg)
今回は、この中の 1つである「Kittenblock」を使います。

## Kittenblock について
Kittenblock は Scratch 3.0 ベースに開発されたと思われるビジュアルプログラミング環境です。
![Kittenblockの画面.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/565151dd-1392-0dac-b996-66526f0f5f5c.jpeg)

以下のサイトからダウンロードできて、Windows版と Mac版があるようなのですが、記事執筆時点では Mac版のアプリはダウンロード用ボタンを押しても、ダウンロードができませんでした。
　●Software – KittenBot
　　https://www.kittenbot.cc/pages/software

拡張ブロックを見てみると、Scratch 3．0 で標準で使えるものも並んでいましたが、それ以外に主にデバイス系の拡張がたくさん並んでいました。
![拡張機能.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a228eb3b-db0a-6672-1f4d-46cde195b578.jpeg)

## ドキュメントについて
ググってみてドキュメント等を探したのですが、この記事の執筆時点では、以下の中国語のものしか見つからなそうでした。

●Kittenblock中编程 · 语雀
　https://www.yuque.com/kittenbot/hardwares/koi-kittenblock

あと、Twitter上で検索したらこんなツイートが出てきたりしました。
「クリスマスにゲットしたら、中国語以外のドキュメントを見つけられないガジェットだった！」とか書いてあります。そして、この方は micro:bit と連携させる形で動かしたようです。

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Asked for a KittenBot Koi for x-mas, today I received it (Brexit mail issues), to then notice I barely find any non-Chinese documentation on this gadget. Omg 💀 I finally got it up and running though (a Hello World at least) 😄 <a href="https://t.co/CvQj7ugBun">pic.twitter.com/CvQj7ugBun</a></p>&mdash; valies (@da_valies) <a href="https://twitter.com/da_valies/status/1352394413247488004?ref_src=twsrc%5Etfw">January 21, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 実際に試してみる（簡単な動作確認から MQTT の利用まで）
簡単に動かす程度なら、ドキュメントなしでもできそうな気がしたので、実際に動かしてみながら使い方を探っていきました。

### デバイスとの接続
Kittenblock を起動して、まずは KOI との接続を行っていきます。
接続に関して、Kittenblock をインストールした PC と KOI を USBケーブルで接続します。

その後、アプリ上で以下の「拡張ブロックの追加 ⇒ デバイス接続用の操作」を行って、デバイスをアプリと接続します。
![拡張ブロックの追加.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/9f402269-7042-8259-55a2-a4f6a6ff5873.jpeg)

![デバイスの接続操作.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/637c1232-48e9-0010-9347-bf4fe8d6e759.jpeg)

そして、動作確認を兼ねて、KOI のボタンを使いプログラムを動かしてみました。
![簡単に試す.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/bc41914b-535f-8ac5-37dd-557f70f5d8d6.jpeg)
動作確認ができました。無事に接続はできているようです。

### MQTT を使う環境をそろえる
MQTT を試してみるのに、KOI 以外に仲介役となる MQTTブローカーが必要です。また、MQTT でのやりとりをする先のクライアントが 1つあると良さそうです。

MQTTブローカーについては、これまでにも使ったことがあった [shiftr.io Desktop app](https://www.shiftr.io/desktop/) を使いました。
![shiftr.io Desktop app.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/4b0b33bb-eddb-1201-a9b5-380cb7d3d4e3.jpeg)
これは、PC上でアプリを起動すると、ローカルネットワーク内で MQTTブローカーを動作させてくれるというものです。

また、MQTT のクライアントとして、以前から利用してきていた [MQTT.fx](https://mqttfx.jensd.de/) という GUIフロントエンドとなるアプリを使いました。
![MQTT.fx.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/78ee3f9a-3a1b-5184-6068-2abbf7535119.jpeg)
MQTT.fx の公式ページを見たのですが、どうも今はドイツの企業がひきとったりしたようです（ちょっとだけ上記に書かれたリンク先のサイトを見たのですが、利用するのに有料になっている予感が...）。

### MQTT用のブロックを使う
MQTT を使う環境は整えたので、ここからいよいよ MQTT用のブロックを使っていきます。
![aWindows_10_Pro.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/a8591f28-f030-1649-fe27-39729600c011.jpeg)

Publish/Subscribe の両方の機能のためのブロックがありましたが、今回は KOI側は Publish のみを行う形で組んでみました。最初に Wi-Fi 接続を行わせる処理も忘れずに入れてください。
![MQTTを利用するプログラム.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/d2b62a0e-0e68-d1e9-5334-235fd8d3206b.jpeg)
なお、MQTT に用いるトピックは「/topic1」と「/topic2」というものを適当に決めて設定しています。

KOI MQTT Host の IPアドレスは、上記の shiftr.io Desktop app を動かす予定の PC の IPアドレスを指定しています。ポートはデフォルトの 1883 そのままで変える必要はなく、その他の client の部分や user・pass の部分も今回はデフォルトのままで OK です。

ここまでできたら、shiftr.io Desktop app と MQTT.fx を起動します。
MQTT.fx は shiftr.io Desktop app への接続設定と、上記の 2つのトピックを指定した Subscribe の設定が必要です。MQTT.fx の使い方について、以前記事を書いたことがあるので、よろしければご覧ください。
　●GUIベースのMQTTクライアントアプ「MQTT.fx」の使い方メモ - Qiita
　　https://qiita.com/youtoy/items/1086cb1c9518a34968be

MQTTブローカーへ接続がされた後は、KOI の 2つのボタンをそれぞれ押してみて、MQTT での Publish が行われたかを確認します。以下のとおり、MQTTブローカー上でも別の MQTTクライアント上でも、メッセージが送られたり受信できたりしたのが確認できました。
![shiftr.io Desktop app上での動作確認.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ac19a2fc-acc3-1505-efc0-b46057a1cb41.jpeg)

![MQTT.fx上での確認.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/fc22929a-bfde-efd7-88c6-d3adf1ad11a7.jpeg)