{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# MaixPy\n",
"SipeedのMAIXは、RISC-V64 AIモジュール搭載の非常にユニークなCPUです。\n",
"開発用ボードには、以下のラインナップがあります。\n",
"\n",
"- GO: MAIX、カメラ、液晶、アレイマイク、ステレオカメラ、ケースの全部入りキット\n",
"- Bit Kit: MAIX、カメラ、液晶のキット\n",
"- Dock: MAIX with WiFi、カメラ、液晶のキット\n",
"\n",
"この中でも、Bit KitはWiFiが付いていないので、技適の問題もないので国内でもすぐに\n",
"利用できます。\n",
"\n",
"Bit Kitは、$20.9(+送料$14.0)ととてもお得です。\n",
"- https://www.seeedstudio.com/Sipeed-MAix-BiT-for-RISC-V-AI-IoT-1-p-2873.html\n",
"\n",
"\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ボードの回路図情報\n",
"販売されて日が浅いため、中国語以外の情報が少なく、以下のサイトにある回路図から\n",
"読み取るしかありません。\n",
"- http://dl.sipeed.com/MAIX/HDK/\n",
"\n",
"## MAIXのmicropytho(MaixPy)を動かしてみよう\n",
"### バイナリファイルのダウンロード\n",
"MaixPyの最新版は、以下のサイトからダウンロードできます。\n",
"- https://github.com/sipeed/MaixPy/releases\n",
"\n",
"現在の最新版は、v0.3.0です。以下のURLからmaixpy_v0.3.0_full.binをダウンロードしてください。\n",
"- http://dl.sipeed.com/MAIX/MaixPy/release/maixpy_v0.3.0/\n",
"\n",
"### ドキュメント\n",
"MaixPyのドキュメントは以下のサイトにあります。\n",
"- https://maixpy.sipeed.com/en/\n",
"\n",
"### K-Flashのダウンロード先\n",
"バイナリファイルの書き込みには、k-Flashを使用します。\n",
"\n",
"Windowsユーザは、以下のファイルからF-Flashをダウンロードしてください。\n",
"- https://kendryte.com/downloads/\n",
"\n",
"K-Flashを起動し、DeviceにMAiX BitのCOMポートを指定し、\n",
"Firmwareにダウンロードしたバイナリファイル(maixpy_v0.3.0_full.bin)を指定して\n",
"Flashボタンを押してください。\n",
"\n",
"\n",
"\n",
"LinuxとMac OSXユーザは、python3にpyserialをインストールし、\n",
"gitコマンドでflash.pyをクローンします。\n",
"\n",
"```bash\n",
"$ pip install pyserial\n",
"$ git clone https://github.com/sipeed/kflash.py kflash\n",
"```\n",
"\n",
"私の環境では、MAiX Bitのデバイスは、/dev/cu.wchusbserial1420\n",
"なので、以下のようにしてmaixpy_v0.3.0_full.binを書き込みます。\n",
"\n",
"```bash\n",
"$ python kflash.py -p /dev/cu.wchusbserial1420 -b 2000000 -B dan maixpy_v0.3.0_full.bin\n",
"```\n",
"\n",
"### 動作確認\n",
"Windowsユーザは、teraterm、Linux, MacOSXのユーザならpicocom等の通信ソフトでアクセスします。\n",
"\n",
"以下のようにMAiXPyの絵文字がでれば書き込みは成功です。\n",
"\n",
"```bash\n",
"$ picocom -b 115200 /dev/cu.wchusbserial1420 \n",
"picocom v2.2\n",
"\n",
"途中省略\n",
"\n",
" __ __ _____ __ __ _____ __ __\n",
"| \\/ | /\\ |_ _| \\ \\ / / | __ \\ \\ \\ / /\n",
"| \\ / | / \\ | | \\ V / | |__) | \\ \\_/ /\n",
"| |\\/| | / /\\ \\ | | > < | ___/ \\ /\n",
"| | | | / ____ \\ _| |_ / . \\ | | | |\n",
"|_| |_| /_/ \\_\\ |_____| /_/ \\_\\ |_| |_|\n",
"\n",
"Official Site : https://www.sipeed.com\n",
"Wiki : https://maixpy.sipeed.com\n",
"\n",
"MicroPython v0.3.0 on 2019-04-19; Sipeed_M1 with kendryte-k210\n",
"Type \"help()\" for more information.\n",
">>> \n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## プログラミング環境\n",
"micropythonのプログラミングには、mu-editorが便利です。\n",
"MaixPyの他、exp32やmicro:bitもサポートしています。\n",
"\n",
"### mu-editorのダウンロード\n",
"mu-editorは、以下のサイトからダウンロードできます。\n",
"お使いのOSに合わせてダウンロードしてください。\n",
"\n",
"- https://codewith.mu/en/download\n",
"\n",
"### Lチカに挑戦\n",
"定番のLチカをmu-editorを使って試してみましょう。\n",
"\n",
"MAiXのFlashにプログラムを保存することも可能ですが、\n",
"転送ボタンの動作が不安定なので、MAiX BitにSDカードを\n",
"挿入して、そちらにプログラムを保存することにします。\n",
"\n",
"mu-editorから「新規」ボタンを押して、以下のソースを入力「実行」ボタンを押下します。\n",
"\n",
"```python\n",
"import utime\n",
"from Maix import GPIO\n",
"from board import Board_Info\n",
"from fpioa_manager import *\n",
"\n",
"board_info = Board_Info()\n",
"\n",
"fm.register(board_info.LED_R, fm.fpioa.GPIO1)\n",
"\n",
"led_r = GPIO(GPIO.GPIO1, GPIO.OUT)\n",
"\n",
"for i in range(20):\n",
" led_r.value(not led_r.value())\n",
" utime.sleep_ms(1000)\n",
"\n",
"fm.unregister(board_info.LED_R, fm.fpioa.GPIO1)\n",
"```\n",
"\n",
"\n",
"\n",
"\n",
"MAiX Bitに搭載されたRBG LEDの赤が点滅すれば成功です。\n",
"\n",
"\n",
"\n",
"\n",
"### ファイルの転送\n",
"SDカードにスクリプト(blink.py)を転送し、それを実行するこもできます。\n",
"\n",
"mu-editorの「ファイル」ボタンを押し、転送したファイルを\"Files on your device:\"に\n",
"ドラッグしてください。\n",
"\n",
"ファイルが転送されたら、再度「ファイル」ボタンを押し、編集画面に戻り、\n",
"次に「REPL」(インタラクティブモード)を押し、\">>>\"のプロンプトが表示されたら、\n",
"以下のコマンドを入力してください。\n",
"\n",
"もし、スクリプトが動かない場合には、一連の処理を関数で定義し、importの後に関数を呼び出すようにすると、\n",
"上手く動きます。\n",
"\n",
"```python\n",
"os.chdir('/sd/')\n",
"import blink\n",
"```\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 顔認識の例題\n",
"Lチカが上手く動いたら、カメラとLCDをBitに接続して、顔認識のスクリプトを\n",
"実行してみましょう。\n",
"\n",
"\n",
"\n",
"以下のスクリプトを入力し、「実行」ボタンを押してください。\n",
"\n",
"顔が認識されるその範囲がREPLのコンソールに表示され、LCDには水色の矩形で\n",
"表示されます。\n",
"\n",
"```python\n",
"import sensor\n",
"import image\n",
"import lcd\n",
"\n",
"def face_detect():\n",
" lcd.init()\n",
" sensor.reset()\n",
" sensor.set_pixformat(sensor.RGB565)\n",
" sensor.set_framesize(sensor.QVGA)\n",
" sensor.run(1)\n",
" face_cascade = image.HaarCascade(\"frontalface\", stages=100)\n",
" while True:\n",
" img=sensor.snapshot()\n",
" objects = img.find_features(face_cascade, threshold=1.00, scale=1.1)\n",
" for r in objects:\n",
" img.draw_rectangle(r,color=(0,255,255))\n",
" print(r)\n",
" lcd.display(img)\n",
"\n",
"face_detect()\n",
"```\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sipeed Maix BiTのピン配置\n",
"Sipeedのサイト内容では、ピン配置がよく分かりません。\n",
"\n",
"- https://maixpy.sipeed.com/en/hardware/bit.html\n",
"\n",
"以下に、Bitの回路図とboardinfoからBitの各ピンに割り当てられた機能を整理しました。\n",
"\n",
"\n",
"\n",
"\n",
"## MaixPyの環境を準備する\n",
"MaixPyをソースからコンパイルするには、大文字・小文字を区別するファイルシステムが必要なため、\n",
"dockerのUbuntu環境でMaixPyの開発を構築しました。\n",
"\n",
"以下の手順でイメージ(約2GB)をダウンロードし、作業ディレクトリから起動してください。\n",
"maixpyのbashが起動します。\n",
"\n",
"```bash\n",
"$ docker run -v `pwd`:/home/maix/workspace -i --name maixpyenv -t takepwave/maixpyenv\n",
"```\n",
"\n",
"再度maixpyenvで作業をするには、docker execコマンドを使用します。 起動時に指定したmaixpyenvと名前で実行プロセスを指定します。\n",
"\n",
"```bash\n",
"$ docker exec --user maix -it maixpyenv /bin/bash\n",
"```\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 0
}