SiPEEDのMaixduino入門編（インストールからLチカまで）

#1 SIPEED Maixduinoについて

IoTを手軽に実現できるものとして、SIPEEDのMaxduinoを使った実験をしてみたいと思います。まずは、ファームウェアのインストールからはじめて、Lチカ（LEDの点滅）までやっています。。Maixduino自体は秋葉原などに行けば、四千円程度で入手可能な小型コンピュータであり、カメラと小型ディスプレイも付属しているので、IoTを用いた様々なプロトタイプ実験が可能です。Pythonをやって目に見える形でプログラミングの楽しさを知りたい方にはおすすめです。なお、以下の実践はすべて自己責任でお願いします。

https://www.switch-science.com/catalog/5707/

https://wiki.sipeed.com/

#1 Maixduinoへのファームウェアインストール
まずは、SIPEEDのGithubからファームウェアの書き込みソフト<a href = "https://github.com/sipeed/kflash_gui/releases/tag/v1.6.5">Kflash</a>をダウンロードします。私の場合はMac環境なので、kflash_gui_v1.6.5_2_macOS.dmgをダウンロードしてインストールします。
次に、Maixduinoにインストールするファームウェアをダウンロードします。<a href = "http://dl.sipeed.com/shareURL/MAIX/MaixPy/release/master" >SIPEEDのファームウェアページ</a>にこれまでのファームウェアのリリース一覧があるので、ここでは一番新しいバージョンをダウンロードします。
その後、以下の画像のようにKflashを設定し、Downloadを押すとファームウェアのインストールが始まります。

<img width="400" alt="スクリーンショット 2021-05-30 13.45.41.png" src = "https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280313/c38c7b1c-a407-168b-b9e3-17818f5fed85.png">

#2 MaixPy（IDE）のインストールとアクセス
Arduino上で走らせるPythonプログラムを開発するための統合開発環境をインストールします。MaixPyとよばれるソフトウェアを<a href ="http://dl.sipeed.com/shareURL/MAIX/MaixPy/ide">ここ</a>から入手します。
MaixPyをインストール、起動し、Maixduino上でMaixpyを起動してみます。Tools ー＞　Open Terminal　ー＞　New Terminal を選択し、Connect to serial port でOK、usebserialのsipeed0を選択してOK、その後はOKを押していくと以下のシリアルターミナルが表示されます。もし、MAIXPYと表示されていなければ、更新マークをクリックしてみると接続されるはずです。以下の画面が表示されれば、無事、PCとMaixduiのボードが接続され、ボード上でPythonを動かす準備が整いました。

![スクリーンショット 2021-05-30 14.15.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280313/98cd5116-9c83-d8de-13e8-3b2cc4a5b8ce.png)

#3 まずはLEDを点滅させてみる（いわゆるLチカ）

まず、GPIOとMaixduinoのピンとの対応関係をソフトウェア的に設定してやる必要があるので、以下のサイトからconfig_maix_duino.pyをIDEに貼り付けて実行します。

https://github.com/sipeed/MaixPy_scripts/tree/master/board

コードは以下になります。

```python:config_maix_duino.py
import json

config = {
  "type": "duino",
  "board_info": {
      'BOOT_KEY': 16,
      'LED_R': 13,
      'LED_G': 12,
      'LED_B': 14,
      'WIFI_TX': 6,
      'WIFI_RX': 7,
      'WIFI_EN': 8,
      'MIC0_WS': 19,
      'MIC0_DATA': 20,
      'MIC0_BCK': 18,
      'I2S_WS': 33,
      'I2S_DA': 34,
      'I2S_BCK': 35,
      'ESP32_CS': 25,
      'ESP32_RST': 8,
      'ESP32_RDY': 9,
      'ESP32_MOSI': 28,
      'ESP32_MISO': 26,
      'ESP32_SCLK': 27,
      'PIN0':4,
      'PIN1':5,
      'PIN2':21,
      'PIN3':22,
      'PIN4':23,
      'PIN5':24,
      'PIN6':32,
      'PIN7':15,
      'PIN8':14,
      'PIN9':13,
      'PIN10':12,
      'PIN11':11,
      'PIN12':10,
      'PIN13':3,
  }
}

cfg = json.dumps(config)
print(cfg)

try:
  with open('/flash/config.json', 'rb') as f:
    tmp = json.loads(f.read())
    print(tmp)
    if tmp["type"] != config["type"]:
      raise Exception('config.json no exist')
except Exception as e:
  with open('/flash/config.json', "w") as f:
    f.write(cfg)
  import machine
  machine.reset()
```
Maixduinoの<a href = "https://docid81hrs3j1.cloudfront.net/medialibrary/2019/07/Sipeed_Maixduino_Specifications_EN_V1.0.pdf">データシート</a>からピンのアサインメントを確認しておきます。以下のpngの画像を参照すれば、Maixduinoとの対応関係がよくわかると思います。


https://acoptex.com/uploads/maixduino_pins.png




その上で、まずはMaixduinoとのコミュニケーションができて、PIN設定ができているか、IDEのターミナルから以下を実行してみます。

```
> from board import board_info
> board_info.PIN0
```

さて、いよいよLチカをさせるためのコードを書きます。 fm.register(＜K210のIOの番号＞,fm.fpioa.GPIO0)でデジタル出力をするピンを指定します。ここでは、Maixduinoのデジタル入力PINの１番、K210のIO番号では５番を設定することにします。（fm.register(5,fm.fpioa.GPIO0)と設定します。）

```led_blink.py
  import utime
  from Maix import GPIO
  from fpioa_manager import fm

  fm.register(5,fm.fpioa.GPIO0)
  led_r=GPIO(GPIO.GPIO0,GPIO.OUT)

  while True:
     led_r.value(0)
     utime.sleep_ms(100)
     led_r.value(1)
     utime.sleep_ms(100)

```
これをMaixPy上で実行して、こんな風になればOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280313/49f4b01c-9d48-853c-31e1-f3a6d399f935.png)

#最後に
お疲れ様でした。ここまでは準備運動のようなものなので、次回以降、応用的なことをやってみたいと思います。（本来は、人工知能で威力を発揮するボードなのですが、基礎から積み重ねていきましょう。）