LoginSignup
1
0

More than 3 years have passed since last update.

Seeeduino XIAOでCircuitPythonを走らせる

Last updated at Posted at 2020-06-26

はじめに

マイコン向けのPython環境であるMicroPythonを基に、Adafruit社が開発したのがCircuitPythonです。ArduinoのC言語に比べて、少ない記述で高い機能を実現できて、コンパイルの必要もなく書き込みも簡単にできます。

CircuitPython対応マイコン
https://circuitpython.org/downloads

Adafruit社の自社マイコンの他にSeeeduino XIAOにも対応しています。

このマイコンの詳しい解説
https://qiita.com/nanase/items/0fed598975c49b1d707e

micro:bitもMicroPythonでプログラムできます
https://microbit.org/

Seeeduino XIAOの方がmicro:bitより安価でクロック周波数も高いです。

microbit(MCU:ARM Cortex M0 + 32bit 16 MHz(Nordic nRF51822 ))
https://www.switch-science.com/catalog/5263/

Seeduino XIAO(CPU:ARM Cortex-M0 + 32bit 48 MHz(SAMD21G18))
https://www.switch-science.com/catalog/6335/
Amazonでは3個セットを販売してます
https://www.amazon.co.jp/dp/B086KXY929

Seeeduino XIAOのセットアップ

SeeedのHPに、詳しくCircuitPythonのインストール方法が書かれてます。
https://wiki.seeedstudio.com/Seeeduino-XIAO/
https://wiki.seeedstudio.com/Seeeduino-XIAO-CircuitPython/

seeeduino_xiao.jpg

Seeeduino XIAO 用のCircuitPythonをダウンロードします。
https://circuitpython.org/board/seeeduino_xiao/

XIAOのRST端子を2度短絡すると橙色のLEDが点灯しArduinoドライブがPCの元に現れます。
Reset動画をSeeed HPから借りて貼りました
XIAO-reset.gif

Arduino_holder.png

Arduino2.png

次にダウンロードしたファイルをこのドライブにドロップしてコピーを作成します。
Drop.png

コピーが終わるとドライブ名がCIRCUITPYに変わります。
CIRCUITPY2.png

MuエディタでPythonプログラムを書き、このドライブにmain.pyとして保存すると自動的にプログラムが実行されます。
Mu.png

Lチカプログラム

main.py

import time
import board
from digitalio import DigitalInOut, Direction

led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT

while True:
  led.value = True
  time.sleep(0.5)
  led.value = False
  time.sleep(0.5)

動画をgifで埋め込んでみました
ezgif.com-crop.gif

参考にさせてもらったQiita
https://qiita.com/bohebohechan/items/f8bf6d4bbe0f14497a7b

Mu について

Muエディタについては、次に詳しく解説されてます。
https://qiita.com/inachi/items/8f61586cd2482987b8d0

「モード」アイコンを押して「Adafruit CircuitPython」モードに切り替える
Mu4.png

MuにUSBを認識させる設定

「シリアル」アイコンを押すとエラーメッセージが出る
Mu5.png

Defaltでは、Adafruitのマイコンボードはシリアルアイコンを押すと接続するようだがSeeeduino XIAOは、シリアル接続できない!

接続するにはSeeeduino XIAOのUSB VID:0x2886とPID:0x002fを
C:/Users/%username%/AppData/Local/Mu/pkgs/mu/modes/adafruit.py
ファイルに登録しないといけない。
https://www.seeedstudio.com/blog/2020/03/30/update-for-seeeduino-xiao-from-the-community/

Windowsの場合、ファイルマネージャで隠しファイル表示にチェックを入れる、adafruit.pyをエディタで開こうとするとWindowsが固まるので、ファイルの拡張子をpyからtxtに変更し、エディタで開いて編集した後、拡張子をpyに戻す。

Mu3.png

67行目のように書き込むと、Muエディタの「シリアル」アイコンを押すとSeeeduino XIAOと無事つながり、「プロッター」も動作した。

Mu2.png

プロッター表示させたコード

main.py
# CircuitPython AnalogIn Demo
import time
import board
from analogio import AnalogIn

analog_in = AnalogIn(board.A1)


def get_voltage(pin):
    return (pin.value * 3.3) / 65536


while True:
    print((get_voltage(analog_in),))
    time.sleep(0.1)

MCP4922を使ってSPI通信で電圧出力を行う

Arduinoで行った記事がここのQiita
https://qiita.com/hiRina/items/b8756988210f7d2455e8

これをCiurcuitPythonで行うことに成功したのが次のコード

main.py
#-------------------------------------
# Import
#-------------------------------------
import board
import busio
import digitalio
from digitalio import DigitalInOut, Direction, Pull
import time

#-------------------------------------
# VAL
#-------------------------------------
t=0.01

#-------------------------------------
# PIN
#-------------------------------------
led = DigitalInOut(board.D13)
led.direction = Direction.OUTPUT
#-------------------------------------
ADC = DigitalInOut(board.D0)
ADC.direction = Direction.OUTPUT
#-------------------------------------
cs=digitalio.DigitalInOut(board.D7)
cs.direction=digitalio.Direction.OUTPUT
cs.value=True

#-------------------------------------
# SPI
#-------------------------------------
spi = busio.SPI(board.SCK, MOSI=board.MOSI)
while not spi.try_lock():
    pass
spi.configure(baudrate=10000000, phase=0, polarity=0)

#-------------------------------------
# loop
#-------------------------------------
while True:
    #--------------------------
    led.value = False
    ADC.value = True
    cs.value = False
    spi.write(bytes([0x3F,0xFF]))
    cs.value = True
    ADC.value = False
    time.sleep(t)
    #--------------------------
    ADC.value = True
    cs.value = False
    spi.write(bytes([0x30,0x00]))
    cs.value = True
    ADC.value = False
    time.sleep(t)
    #--------------------------
    led.value = True
    ADC.value = True
    cs.value = False
    spi.write(bytes([0xBF,0xFF]))
    cs.value = True
    ADC.value = False
    time.sleep(t)
    #--------------------------
    ADC.value = True
    cs.value = False
    spi.write(bytes([0xB0,0x00]))
    cs.value = True
    ADC.value = False
    time.sleep(t)

IMGP4684.JPG

参考資料

CircuitPythonについてadafruit社が記述してるHP
https://learn.adafruit.com/welcome-to-circuitpython

CircuitPythonの解説
https://learn.adafruit.com/circuitpython-essentials

CircuitPythonの例題
https://github.com/adafruit/Adafruit_Learning_System_Guides/tree/master/CircuitPython_Essentials

1
0
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
1
0