7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Seeeduino XIAOをArdupyで動かしてみた

Last updated at Posted at 2020-12-24

この記事はSeeed UG Advent Calendar 2020の25日目の記事です。

今年に入ってからSeeedから様々な新製品が登場しました。そのなかでWio TerminalとSeeeduino Xiaoという2つのマイコンボードがあります。
Wio Terminalは画面とボタンがついてるボードで某M○シリーズを彷彿とさせます。Seeeduino XIAOはコインサイズで小さくて可愛らしい見た目のボードです。
正反対に見えるこの2つには共通点があります。それは、「Ardupyが使える」ということです。ArdupyというのはSeeed Studioがリリースしたマイコンの開発環境です。ArduinoとMicroPythonを組み合わせており、MicroPythonでArduinoのAPIを叩くことができるそうです。

image.png

Wikiを見る限りWio Terminal向けに書いているような感じでSeeeduino XIAOが使えるのか疑問に思いました。というわけでせっかくMaker Fairでもらったので、今回はSeeeduino XIAOをこのArdupyで動かしていろいろ実験してみたいと思います。

用意するもの

  • Seeeduino XIAO
  • Seeeduino XIAO Expansion board(モジュールの実験用)

Ardupyのインストール

まずはArdupyを動かすためにaipというCLIをインストールします。
Pythonの実行環境をセットアップしたら以下のpipコマンドでインストールします。

pip install ardupy-aip

終わったら以下のコマンドを実行し、エラーが出ずヘルプ画面が表示されたらインストール完了です

aip help

ボードの初期化

まずはSeeduino XIAOをパソコンに接続します。ボードの初期化は以下のコマンドで行います。デフォルトではWio Terminal向けに初期化を実行しているっぽいので、オプションで-bをつけてSeeeduino XIAO向けの初期化を行っています。

aip flash -b xiao

実行して、エラーがなく書き込みが終わったら成功です。Windowsではあたらしくエクスプローラが立ち上がり、main.pyだけのフォルダが立ち上がると思います。

flash

お約束のLチカ

まずはLチカをやってみます。
以下のコードを適当なディレクトリに保存します。

blink.py

from machine import Pin, Map
import time

LED = Pin(Map.LED_BUILTIN, Pin.OUT)

while True:
    LED.on()
    time.sleep(1)
    LED.off()
    time.sleep(1)

保存したら以下のコマンドでxiaoに書き込みます。

aip shell -n -c "put work/dir/blink.py"

プログラムを書き込んだら以下のコマンドを実行します。

aip shell -n -c "execfile blink.py"

実行するとXIAOのUSB端子のそばにあるオレンジのLEDが点滅したら成功です。

blink

ボタンを操作する

続いてボタンを押してLEDをつけたり消したりします。

buttonControl.py
from machine import Map, Pin
import time

buttonPin = 1
LED = Pin(Map.LED_BUILTIN, Pin.OUT)
BUTTON = Pin(buttonPin, Pin.IN, Pin.PULL_UP)

while True:
    if not BUTTON.value():
        LED.off()
    else:
        LED.on()
    time.sleep_ms(30)

コードを実行して、以下のようにボタン(D1)を押している間はLEDがついて、離して消えたら成功です。

buttonControl

ライブラリを使ってみる

今度はArdupyで使えるライブラリを使ってみたいと思います。
Ardupyと普通のMicroPythonとの大きな違いがここです。
ArduinoのライブラリをMicroPythonでも使えるようにパッケージ化されています。
対応ライブラリをコマンドラインでインストールできるので、その手順を紹介します。

センサーの接続

今回は手元にあったTemperature & Humidity Sensor (DHT11)を使って実験をします。
センサーはExpansion boardのD0端子につないでおきます。
IMG_20201222_031058.jpg

ライブラリのインストール

DHTのライブラリは以下のレポジトリで公開されています。
Seeed-Studio/seeed-ardupy-dht
以下のコマンドで上記のライブラリをインストール、ビルドします。

aip install Seeed-Studio/seeed-ardupy-dht/archive/main.zip
aip build

以下のコマンドで、ボードをフラッシュします。

aip flash -b xiao

ライブラリが使えるか確認

ここでボード上でライブラリが使えるか確認してみます。
以下のコマンドを使ってArdupyのREPL環境(コマンドライン環境)を実行してみます。

aip shell -c "repl"

コマンドラインが立ち上がったら、以下の1行を実行してインポートしてみます。
エラーが出力されなかったらライブラリのインストールは完了しました。

from arduino import grove_dht

サンプルコードを実行

ここまでできたらサンプルコードを動かしてみます。
ライブラリのレポジトリのREADMEにあるこちらのサンプルコードをSeeeduino XIAOに書き込みます。

detectTempHumi.py
from arduino import grove_dht
import time

dht = grove_dht(0,11) # pin number, DHT type

while True:
    print ("Temperature: ", dht.temperature, "C")
    print ("Humidity: ", dht.humidity, "RH%")
    print ("30C to F", dht.ctof(30), "F")
    time.sleep(1)

コードを実行し、ターミナルに温度、湿度が流れてきたら成功です。
image.png

プログラムを自動起動する

ここまでいくつかサンプルを紹介してきましたが、これらのプログラムは毎回execfileコマンドを実行しないと動きません。
では電源を入れるたびに自動起動するようにしたいときには、boot.pyを用意するとそのプログラムは自動起動します。
Seeeduino XIAOのストレージで自動起動したいファイルのファイル名を変更してもいいですが、書き込むプログラムを自動起動させたいときには以下のコマンドのようにファイルパスを指定したときに半角スペースでboot.pyを指定すればボードにはboot.pyとして書き込まれて自動起動するプログラムを設定できます。
以下は最初に紹介したLチカを自動起動させる例です。

aip shell -n -c "put work/dir/blink.py boot.py"

ボードを再起動するか、リセットボタンを押せばプログラムが自動で起動するようになります。

まとめ

今回はArduipyを使ってSeeeduino XIAOを動かしてみました。
色々ソフトをインストールしなくてもPythonの実行環境があれば簡単に開発環境をインストールできるのはいいですね。
そして、GroveモジュールをArduinoのライブラリっぽくインストールさせることができるのは面白いです。
ただ、使えるモジュールの種類が豊富ではないので、今後に期待したいところです。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?