« Adafruit-IOのMQTT(REST-APIも含む)を利用してみる | トップページ | プログラミング言語RustをXIAOで動かす »

2020年6月 9日 (火)

XIAOにCircuitPythonをインストールする

2020/6/9

XIAO CircuitPython Install

XIAO CircuitPython Install

概要

以下のXIAOにCircuitPythonをインストールする方法について記載する。 (ホストPCとしてはubuntuを想定している)

Seeeduino XIAO

事前準備

(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.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

Seeeduino XIAO

XIAO Schematic
XIAO Pinout

Build CircuitPython
Adding Frozen Modules

Adafruit CircuitPython API Reference(v5.x)

CircuitPython Essentials
Example Code

以上

|

« Adafruit-IOのMQTT(REST-APIも含む)を利用してみる | トップページ | プログラミング言語RustをXIAOで動かす »

linux」カテゴリの記事

CircuitPython」カテゴリの記事

XIAO」カテゴリの記事

コメント

この記事へのコメントは終了しました。