XIAOにCircuitPythonをインストールする
2020/6/9
XIAO CircuitPython Install
XIAO CircuitPython Install
概要
以下のXIAOにCircuitPythonをインストールする方法について記載する。 (ホストPCとしてはubuntuを想定している)
事前準備
(1)picocomのインストール
sudo apt-get install picocom
bootloader mode
XIAにfirmwareを書き込めるモードを「bootloader mode」といい、このモードでは、USBストレージとしてarduinoディレクトリが現れる。 RSTピンを2度(GNDと)ショートすることで、このモードに入る。
CircuitPythonの書き込み
以下の手順でCircuitPythonを書き込む:
wget https://downloads.circuitpython.org/bin/seeeduino_xiao/en_US/adafruit-circuitpython-seeeduino_xiao-en_US-5.3.0.uf2
# ファイルをドラッグ&ドロップするか、以下のコマンドを実行してファイルをコピーする
cp adafruit-circuitpython-seeeduino_xiao-en_US-5.3.0.uf2 /media/USER_NAME/Arduino/
# ファームウェアの書き込みが実行されて、完了後、CIRCUITPYが現れるまで待つ
「USER_NAME」は実際の環境に合わせること。
動作確認(REPL)
以上、CircuitPythonのインストールが終わったので、picocomを使いXIAOとシリアルで通信する。(REPL)
以下、通信(REPL)例:
$ picocom /dev/ttyACM0 -b115200
Adafruit CircuitPython 5.3.0 on 2020-04-29; Seeeduino XIAO with samd21g18
>>> import os
>>> os.uname()
(sysname='samd21', nodename='samd21', release='5.3.0', version='5.3.0 on 2020-04-29', machine='Seeeduino XIAO with samd21g18')
>>> import gc
>>> gc.collect()
>>> gc.mem_free()
21664
>>> help('modules')
__main__ digitalio pulseio sys
analogio gc random time
array math rotaryio touchio
board microcontroller rtc usb_hid
builtins micropython storage usb_midi
busio neopixel_write struct
collections os supervisor
Plus any modules on the filesystem
>>>
>>> 10000000000
OverflowError: long int not supported in this build
>>> 10_000_000_000
OverflowError: long int not supported in this build
>>> 1_000_000_000
1000000000
# code_size削減のためにlong_intはサポートされていない
mpy library install
以下の手順でmpyライブラリをインストールする:
wget https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases/download/20200522/adafruit-circuitpython-bundle-5.x-mpy-20200522.zip
unzip adafruit-circuitpython-bundle-5.x-mpy-20200522.zip
cd adafruit-circuitpython-bundle-5.x-mpy-20200522
# ドラッグ&ドロップか、libの内容をCIRCUITPY/libにコピーするが
# CIRCUITPYの容量が小さいので必要なもののみをコピーする
# デモスクリプトで必要なもので言えば以下をコピーする:
adafruit_framebuf.mpy
adafruit_pypixelbuf.mpy
neopixel.mpy
font5x8.bin
# font5x8.binは以下でダウンロードする:
wget https://github.com/adafruit/Adafruit_CircuitPython_framebuf/raw/master/examples/font5x8.bin
blink
blink.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.1)
led.value = False
time.sleep(0.1)
analogin_test
analogin_test.py
import time
import board
from analogio import AnalogIn
analog_in = AnalogIn(board.A0) # Analog pin on Seeedino XIAO
def get_voltage(pin):
return (pin.value * 3.3) / 65536
while True:
print("Voltage: ", get_voltage(analog_in))
time.sleep(0.1)
AOがアナログ入力になっているので、簡単なtestとしては A0をGNDまたは3V3に繋いでアナログ入力の機能を確認できる。
neoflashデモ
disp_text_neoflash.py
# disply text on NeoFlash
import time
import board
import neopixel
pixel_pin = board.D4
num_pixels = 126
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(
pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER
)
#-----------------------------
# framebuffer related
import adafruit_framebuf
# pixel size for display
WIDTH = 18
HEIGHT = 7
fbuf = bytearray(round(WIDTH * HEIGHT / 8)+2)
fb = adafruit_framebuf.FrameBuffer(fbuf, WIDTH, HEIGHT,adafruit_framebuf.MVLSB)
#-------------------------------
# buffer to NeoFlash(Neopixel)
def buffer2pixels(the_fb,fcolor,bcolor):
pos = 0
for y in range(the_fb.height):
for x in range(the_fb.width):
if fb.pixel(x, y):
pixels[pos]=fcolor
else:
pixels[pos]=bcolor
pos += 1
pixels.show()
#-------------------------------
# (for debug) Ascii printer for very small framebufs!
def print_buffer(the_fb):
print("." * (the_fb.width+2))
for y in range(the_fb.height):
print(".", end='')
for x in range(the_fb.width):
if fb.pixel(x, y):
print("*", end='')
else:
print(" ", end='')
print(".")
print("." * (the_fb.width+2))
# clear framebuffer
def clear_fbuf():
for i, _ in enumerate(fbuf):
fbuf[i] = 0
#----------------------------------
print("Text test: ")
clear_fbuf()
fb.text("ABC", 0, 0, 1)
print_buffer(fb)
buffer2pixels(fb,(15,0,0),(15,15,15))
time.sleep(1)
clear_fbuf()
fb.text("012", 0, 0, 1)
print_buffer(fb)
buffer2pixels(fb,(15,0,0),(15,15,15))
time.sleep(1)
clear_fbuf()
fb.text("345", 0, 0, 1)
print_buffer(fb)
buffer2pixels(fb,(0,15,0),(15,15,15))
time.sleep(1)
clear_fbuf()
fb.text("678", 0, 0, 1)
print_buffer(fb)
buffer2pixels(fb,(0,0,15),(15,15,15))
time.sleep(1)
clear_fbuf()
fb.text("9AB", 0, 0, 1)
print_buffer(fb)
buffer2pixels(fb,(int(255/4),int(213/4),int(40/4)),(0,0,0))
time.sleep(1)
clear_fbuf()
fb.text("abc", 0, 0, 1)
print_buffer(fb)
buffer2pixels(fb,(128,0,128),(0,0,0))
time.sleep(1)
接続は以下のようにする:
NeoFlash | XIAO |
---|---|
GND | GND |
5V0 | 3.3V |
G26 | D4 |
本来、5V動作のようだが、3.3Vでも動作する。
neoflashの詳細は以下を参照のこと:
M5StickC NeoFlash Hat
Performance Test
performanceCircuitPython_XIAO.py
# Peformace Test XIAO CircuitPython
from time import monotonic
def performanceTest():
endTime = monotonic() + 10.0 # 10 sec
count = 0
while monotonic() < endTime:
count += 1
print("Count: ", count)
performanceTest()
コードサイズ削減のため実装されていない機能があるので、 XIAO用のperformanceTestになっている。
出力結果(例):
Count: 174388
参照URL
Build CircuitPython
Adding Frozen Modules
Adafruit CircuitPython API Reference(v5.x)
CircuitPython Essentials
Example Code
以上
| 固定リンク
「linux」カテゴリの記事
- platfomioを使ってnaitive(linux/windows)のプログラムをビルドする方法(2021.03.10)
- micro:bit Yotta開発ツール(linux版)(2021.01.09)
- PlatformIOをRaspberryPi4で動かしてみる(実験)(2020.10.20)
- headless RaspberryPiインストール方法(v2)(2020.10.20)
- wio-terminalのファームウェア・アップデートについて(linux版)(2020.10.15)
「CircuitPython」カテゴリの記事
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- XIAOでMPL3115A2(気圧・高度・気温センサ)を使用する(CircuitPython版)(2020.07.02)
- XIAOでMCP9808(温度センサ)を使用する(CircuitPython版)(2020.07.02)
- XIAOにCircuitPythonをインストールする(2020.06.09)
「XIAO」カテゴリの記事
- PlatformIOとArduino(本家)ツールの差分(2020.10.18)
- XIAO/M5Atom/Wio-TerminlでCardKB(I2C)を使用する(Arduino版)(2020.10.17)
- XIAO/M5Atom/Wio-Terminalでneopixelsを制御する(Arduino版)(2020.10.16)
- XIAO/M5AtomでOLED128x128(I2C)を制御する((XIAO/Arduino版、M5Atom/Arduino版)(2020.10.15)
- XIAO/M5AtomでLCD240x240(SPI)を制御する((XIAO/Arduino版、M5Atom/Arduino版)(2020.10.14)
この記事へのコメントは終了しました。
コメント