« コンピュータボードでTinyGOを動かす | トップページ | avrdudeをcli(command line interface)で使用する »

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版)

以上

|

« コンピュータボードでTinyGOを動かす | トップページ | avrdudeをcli(command line interface)で使用する »

linux」カテゴリの記事

CircuitPython」カテゴリの記事

MCP2221」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« コンピュータボードでTinyGOを動かす | トップページ | avrdudeをcli(command line interface)で使用する »