MCP2221

2020年12月31日 (木)

python3/micro:bit-micropython/CircuitPython用エディタ(mu-editor)をインストールする(v2,microbit-v2対応)(linux版)

2020/12/31

Mu-editor micro:bit v2

Mu-editor micro:bit v2

概要

python3/micro:bit-micropython/CircuitPython用エディタ(mu-editor)をインストールする(v2,microbit-v2対応)(linux版)

この記事は「 python3/micro:bit-micropython/CircuitPython用エディタ(mu-editor)をインストールする(linux版) 」の第2版にあたり、micro:bit-v2の対応方法についてなどを追加している。
(ホストはubuntu20.04を想定している)

インストール方法

以下を実行する:

# 以下のライブラリをインストールする sudo apt -y install git python3-dev python3-setuptools python3-numpy python3-opengl \ libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev \ libsdl1.2-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev \ libtiff5-dev libx11-6 libx11-dev fluid-soundfont-gm timgm6mb-soundfont \ xfonts-base xfonts-100dpi xfonts-75dpi xfonts-cyrillic fontconfig fonts-freefont-ttf libfreetype-dev # mu-editorのインストール pip3 install mu-editor # ショートカットを作成するためshortcutをインストールする pip installl shortcut # mu-editorのショートカットを作る shortcut mu-editor # この時点で、デスクトップにmu-editorのショートカット(アイコン)が作られる # そのショートカットをクリックするとmu-editorが起動する

micro:bit-v2の対応方法

mu-editor自身はmicro:bit-v2対応が未完で、そのままでは使用できない。 そのため以下の手順で対応する:

(1)以下のurlへchromeブラウザーでアクセスしてmu-editorのweb版を起動する。 https://python.microbit.org/v/2 (2)micro:bit-v2をホストに接続する (3)起動しているmu-editorでデバイスを接続して、そこにあるスクリプトを書き込む (4)以上で、micro:bit-v2に対応したmicropythonのファームウェアが書き込まれる

その後、通常のmu-editorを起動してスクリプトを書き込むことができる。

micro:bit-v2の最新のmicropythonを使う

以下の手順で最新のmu-editorを使用すると最新版のmicropythonが書き込める。

mkdir latest_mu cd latest_mu git clone https://github.com/bbcmicrobit/PythonEditor cd PythonEditor git submodule update --init --recursive # 以下のコマンドでmu-editor(のサーバー)を起動することができる。。 ./bin/show Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... # http://localhost:8000/editor.htmlをchromeブラウザーでアクセスするとweb版と同じeditorが起動する (Web-USBの機能を使う関係上,chromeである必要がある) # 起動しているmu-editorでデバイスを接続して、そこにあるスクリプトを書き込む 以上で、micro:bit-v2に対応したmicropythonの最新版が書き込まれる

以上が完了すれば、通常のmu-editorを使用しても最新版のmicropythonが使える。

micro:bitのmicropythonのバージョン

REPLでバージョンを確認すると以下のようになっていた:

旧版 MP現行版(v1.5)

MicroPython v1.9.2-34-gd64154c73 on 2017-09-01; micro:bit v1.0.1 with nRF51822 Type "help()" for more information. >>> >> import gc >>> gc.collect() >>> gc.mem_free() 9136 >>>

v2 MP現行版(webからの書き込み)

MicroPython v1.13 on 2020-11-24; micro:bit v2.0.0-beta.1 with nRF52833 Type "help()" for more information. >>> >>> import gc >>> gc.collect() >>> gc.mem_free() 61344 >>>

v2 MP最新版(2020/12/31現在)

MicroPython v1.13 on 2020-12-21; micro:bit v2.0.0-beta.3 with nRF52833 Type "help()" for more information. >>> >>> import gc >>> gc.collect() >>> gc.mem_free() 63616 >>>

micro:bi-v2になってRAMが増えていることからフリーメモリが増えていることが分かる。

micro:bit-v2で追加された機能を使ったスクリプト例

music_button.py

from microbit import * import music pin0.set_touch_mode(pin0.CAPACITIVE) #pin0.set_touch_mode(pin0.RESISTIVE) pin1.set_touch_mode(pin1.CAPACITIVE) #pin1.set_touch_mode(pin1.RESISTIVE) pin2.set_touch_mode(pin2.CAPACITIVE) #pin2.set_touch_mode(pin2.RESISTIVE) while True: if pin_logo.is_touched(): music.play(music.BLUES) if pin0.is_touched(): music.play(music.NYAN) if pin1.is_touched(): music.play(music.ODE) if pin2.is_touched(): music.play(music.BLUES) if button_a.was_pressed(): music.play(music.NYAN) if button_b.was_pressed(): for x in range(2): music.play(["C4:4", "D4", "E4", "C4"]) for x in range(2): music.play(["E4:4", "F4", "G4:8"])

mic_test.py

from microbit import * while True: if microphone.current_event() == SoundEvent.LOUD: display.show(Image.SQUARE) elif microphone.current_event() == SoundEvent.QUIET: display.show(Image.SQUARE_SMALL)

speak_happy.py

from microbit import * import speech set_volume(100) speech.say("are you happy?")

send_smile.py

from microbit import * import radio radio.config(group=2) radio.on() while True: message = radio.receive() if message: display.show(Image.HAPPY) if button_a.is_pressed(): display.clear() radio.send('smile')

このスクリプトは新機能を使っていないがbluetoothの使用例として載せた。

ハードウェアの相違点

micro:bitのバージョンの違いは以下のようになる:

v1.5 Nordic Semiconductor nRF51822 256kB Flash, 16kB RAM v2.0 Nordic Semiconductor nRF52833 512kB Flash, 128kB RAM

詳細は以下を参照のこと:
micro:bit のバージョンアップについて

参照情報

Using Mu with micro:bit V2
How to install Mu with Python packaging on Windows, OSX and Linux

https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/hello.html

https://microbit-micropython.readthedocs.io/en/latest/tutorials/introduction.html

https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/radio.html

https://qiita.com/sat0ken/items/13bd03378c28b98a794e
micro:bit v2 で遊ぶ

https://qiita.com/inachi/items/a591707ab6bbcb1a467c
micro:bit v2 用 MicroPython の beta-3 が出たので試してみた

公式の技術情報
micro:bit developer community and technical resources
Working together on the latest BBC micro:bit
Guidance on using the latest micro:bit revision

以上

続きを読む "python3/micro:bit-micropython/CircuitPython用エディタ(mu-editor)をインストールする(v2,microbit-v2対応)(linux版)"

| | コメント (0)

2020年4月14日 (火)

PCのpython3でCircuitPythonのAPIを使用する(MCP2221A版)

2020/4/14

MCP2221A adafruit_blinka install

MCP2221A adafruit_blinka install

概要

PCのpython3でCircuitPythonのAPIを使用する。 以下のMCP2221Aボードを接続し関連ソフトウェアをインストールすることにより、python3でCircuitPythonのAPIが使用可能となる。

USB-I2CブリッジボードV2(GROVE対応ボード)【MR-GROVE-B】
USB-I2CブリッジボードV2(GROVE対応ブレッドボード版)【MR-GROVE-BB】
MCP2221 Blinka Pinout

USB-I2CブリッジボードV2(GROVE対応ボード) PINOUT

USBコネクタを上にしたときの図

信号設定ジャンパ: (デフォルト:全てショート(接続))

0 1 2 3 4 5
SDA PullUp SCL PullUp GPIO-3 2番ピン:G0 GPIO-2 2番ピン:G3 GPIO-1 2番ピン:G2 GPIO-0 2番ピン:G1

拡張用ソケット:

0 1 2 3 4 5
GND Vdd G3 G2 G1 G0
GND Vdd SDA SCL Tx Rx

Vddは、5Vまたは3.3V(電圧設定ジャンパで切り替える)

Pin Assign

GPIO Pins: G0,G1,G2,G3 I2C Pins: SCL,SDA UART Pins: Tx,Rx (デバイス名は/dev/ttyACM0になる) ADC Pins: G1,G2,G3 (10bits) DAC Pins: G2,G3 (5bits, 2つのピンに同じ出力がでる)

事前準備

以下を実行する:

sudo apt-get install libusb-1.0 sudo nano /etc/udev/rules.d/99-mcp2221.rules #以下を99-mcp2221.rulesに追加する: # /etc/udev/rules.d/99-mcp2221.rules SUBSYSTEM=="usb", ATTRS{idVendor}=="04d8", ATTR{idProduct}=="00dd", MODE="0666" sudo udevadm control --reload

インストール方法

python3の新しい環境blinkaを作り、その環境に必要なソフトウェアをインストールする。 MCP2221AボードはPCに接続しておく。

mkdir mcp2221a_ws cd mcp2221a_ws # setup venv blinka python3 -m venv blinka # activate venv blinka source blinka/bin/activate pip3 install hidapi pip3 install adafruit-blinka export BLINKA_MCP2221=1 # hidデバイスとしての確認 python3に入り 出力が以下のようになればOKとなる: python3 >>> import hid >>> hid.enumerate() [{'path': b'0001:0005:02', 'vendor_id': 1240, 'product_id': 221, 'serial_number': '', 'release_number': 256, 'manufacturer_string': 'Microchip Technology Inc.', 'product_string': 'MCP2221 USB-I2C/UART Combo', 'usage_page': 0, 'usage': 0, 'interface_number': 2}] >>> device = hid.device() >>> device.open(0x04D8, 0x00DD) #エラーが出なければOK # インストールの確認 python3に入り 出力が以下のようになればOKとなる: python3 >>> import os >>> os.environ["BLINKA_MCP2221"] '1' >>> >>> import board >>> dir(board) ['G0', 'G1', 'G2', 'G3', 'I2C', 'SCL', 'SDA', 'SPI', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'ap_board', 'board_id', 'detector', 'pin', 'sys'] >>> # 現在の環境から抜けるときは以下を実行する # do it when exit current venv deactivate

インストール後、再度、この環境を使用する場合は、以下を実行する:

cd mcp2221a_ws # activate venv blinka source blinka/bin/activate export BLINKA_MCP2221=1

動作確認用テストスクリプト

blink.py
G0にLEDを接続する。

# blink.py # MCP2221A board from time import sleep import board import digitalio led = digitalio.DigitalInOut(board.G0) led.direction = digitalio.Direction.OUTPUT while True: led.value = True sleep(0.2) led.value = False sleep(0.2)

以下で実行する:

export BLINKA_MCP2221=1 python3 blink.py

button_led.py
G0にLED,G1にボタンを接続する。

import board import digitalio led = digitalio.DigitalInOut(board.G0) led.direction = digitalio.Direction.OUTPUT button = digitalio.DigitalInOut(board.G1) button.direction = digitalio.Direction.INPUT while True: led.value = button.value

以下で実行する:

export BLINKA_MCP2221=1 python3 button_led.py

I2C動作確認

I2Cソケットに、なにかしらのデバイスを接続して 以下を実行する:

python3 >>> import busio >>> import board >>> i2c = busio.I2C(board.SCL, board.SDA) >>> i2c.try_lock() True >>> i2c.scan() [30] >>> # デバイスのアドレスが返ってくればOK

ADC(Analog In)確認

G1,G2,G3がADCのピンとして使用でき、精度は10bitsとなる。

テスト・スクリプト
analogIn_test.py

# CircuitPython AnalogIn Demo # MCP2221A import time import board from analogio import AnalogIn analog_in = AnalogIn(board.G1) def get_voltage(pin): return (pin.value * 3.3) / 65536 while True: print('volt:{:.2f}'.format(get_voltage(analog_in))) time.sleep(0.1)

以下で実行する:

export BLINKA_MCP2221=1 python3 analogIn_test.py

DAC(Analog Out)確認

G2,G3がDACのピンとして使用でき、精度は5bitsとなる。 ただし、G2/G3には、同じ出力が出る。

テスト・スクリプト
analogOut_test.py

# analog output demo # MCP2221A import board from analogio import AnalogOut analog_out = AnalogOut(board.G3) while True: for i in range(0, 32): print(i) analog_out.value = i

以下で実行する:

export BLINKA_MCP2221=1 python3 analogOut_test.py

Adafruit_CircuitPython_Bundleのモジュールのインストール方法

# MODULEというモジュールをインストールする場合、以下を実行する: pip3 install adafruit-circuitpython-MODULE # python3でimportする場合のスクリプト import adafruit_MODULE # ダッシュ(-)とアンダースコア(_)の使い分けに注意すること # 実例: pip3 install adafruit-circuitpython-neopixel # スクリプト例: import adafruit_neopixel

該当モジュールのCircuitPythonボードへのコピー方法

仮想環境blinkaを使用している場合は、以下のようになる:
CircuitPythonボードへのインストール

# ホストPC上(CircuitPythonボードが接続されている前提) # ライブラリーのパス設定 export CPY_LIB=$HOME/mcp2221a_ws/blinka/lib/python3.6/site-packages # 上の「python3.6」の部分は、自分の使用している(ホストPCの)の # 仮想環境blinkaのpython3のバージョンに合わせる # CircutPythonのストレージのパス設定 export CPY=/media/$USER/CIRCUITPY # モジュールのCircuitPythonボードへのインストール pip3 install adafruit-circuitpython-MODULE cp $CPY_LIB/adafruit_MODULE.py $CPY/lib/ # 具体例: pip3 install adafruit-circuitpython-mpl115a2 cp $CPY_LIB/adafruit_mpl115a2.py $CPY/lib/

export関係は、. bashrcに設定することを勧める。

参照情報

USB-I2CブリッジボードV2(GROVE対応ボード)【MR-GROVE-B】
USB-I2CブリッジボードV2(GROVE対応ブレッドボード版)【MR-GROVE-BB】
MCP2221 Blinka Pinout

CircuitPython Libraries on any Computer with MCP2221

CircuitPython on Linux and Raspberry Pi
CircuitPython 5.0.x - I2C

PCのpython3でCircuitPythonのAPIを使用する(FT232H版)

以上

続きを読む "PCのpython3でCircuitPythonのAPIを使用する(MCP2221A版)"

| | コメント (0)