このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

Renesas RA 用クイックリファレンス

Renesas Evaluation Kit for RA6M2 MCU Group

Renesas EK-RA6M2 ボード

以下は、Renesas RA ボードのためのクイックリファレンスです。このボードを初めて使う場合は、まず次のマイクロコントローラとボードの概要を概要を確認してみてください。

MicroPython のインストール

チュートリアルの章: Renesas RA での MicroPython の始め方 を参照してください。そこにはトラブルシューティングについても記載されています。

ボードの一般的な制御

MicroPython REPL は USB ポートで利用できます。タブ補完は、オブジェクトにどのようなメソッドがあるかを調べるのに便利です。貼り付けモード(ctrl-E)は、大きめの Pythonコードを REPL に貼り付けるのに便利です。一部の機能は Renesas RAボード にまだ実装されていません。詳しくはチュートリアルを参照してください。

machine モジュール

import machine

machine.freq()    # CPU の現在の周波数を取得

次の関数をサポートしています:

machine.freq()
machine.reset()
machine.soft_reset()
machine.unique_id()

次の関数は現時点で未サポートです:

machine.reset_cause()
machine.bootloader([value])
machine.disable_irq()
machine.enable_irq(state)
machine.freq([hz])
machine.idle()
machine.sleep()
machine.lightsleep()
machine.lightsleep([time_ms])
machine.deepsleep()
machine.deepsleep([time_ms])
machine.wake_reason()
machine.time_pulse_us(pin, pulse_level, timeout_us=1000000,/)
machine.bitstream(pin, encoding, timing, data, /)
machine.rng()

遅延とタイミング

time モジュールを使います:

import time

time.sleep(1)           # 1秒間、一時停止する
time.sleep_ms(500)      # 500ミリ秒間、一時停止する
time.sleep_us(10)       # 10マイクロ秒間、一時停止する
start = time.ticks_ms() # ミリ秒カウンター値を取得
delta = time.ticks_diff(time.ticks_ms(), start) # 時差を計算

タイマー

RA MCU のシステムタイマーペリフェラルは、グローバルなマイクロ秒単位のタイムベースを提供し、そのために割り込みを発生させます。ソフトウェアタイマーは現在利用可能で、その数は(メモリが許す限り)無制限です。タイマー id はデフォルトで指定されるため(現時点では id=-1 がサポートされています)、指定する必要はありません。

machine.Timer クラスを使います:

from machine import Timer

tim = Timer(-1)
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=lambda t:print(1))
tim.init(period=2000, mode=Timer.PERIODIC, callback=lambda t: print(2))
次の関数は現時点で未サポートです:

Timer(id) # ハードウェアタイマーは未サポート。

ピンと GPIO

machine.Pin クラスを使います:

from machine import Pin

p0 = Pin('P000', Pin.OUT)      # P000 の出力ピンを作成
p0.on()                        # ピンを "on" (high) レベルに設定
p0.off()                       # ピンを "off" (low) レベルに設定
p0.value(1)                    # ピンを on/high に設定

p2 = Pin(Pin.cpu.P002, Pin.IN) # P002 の入力ピンを作成
print(p2.value())              # 値 0 または 1 を取得

p4 = Pin('P004', Pin.PULL_UP)      # 内部プルアップ抵抗を有効化
p5 = Pin('P005', Pin.OUT, value=1) # 作成時にピンを high に設定

ピン id は RA MCU のピン名に対応して Pin.cpu.P106 という形式でも 'P106' という形式でも指定できます。RA MCU には多くの機能のピンがあります。しかし、ピンの機能が固定されていたり、ボードによって接続されていない場合があります。ピンのマッピングについてはボードのマニュアルを確認してください。

Pin のポートドライブ機能が MCU によってサポートされている場合、以下の drive キーワード引数が指定できます

Pin.DRIVE_0: Low drive
Pin.DRIVE_1: Middle drive
Pin.DRIVE_2: Middle drive for I2C Fast-mode
Pin.DRIVE_3: High drive

alt キーワード引数はサポートされません。

次の関数はサポートされません:

Pin.irq(priority=)  # priority キーワード引数はサポートされません
Pin.irq(wake=)      # wake キーワード引数はサポートされません
Pin.irq(hard=)      # ハードウェア割込みが適用されるので、hard キーワード引数は無視されます
Pin.mode()
Pin.pull()
Pin.drive()

UART (シリアルバス)

RA MCU は SCI (Serial Communication Interface)というハードウェア UART をいくつか備えています。UART ID は RA MCU の SCI 番号に対応しており、UART(0) を SCI0、 UART(1) を SCI1 として利用できます。

machine.UART を参照

from machine import UART

uart1 = UART(1, 115200)
uart1.write('hello')    # 5バイト書き出す
uart1.read(5)           # 5バイトまで読み込む

ボード上で利用可能な UART とピンは固定されていて、次のとおりです。UARTの1つはは REPL に使われます。

EK-RA4M1

UART0(REPL)

UART1

UART2

tx

P411

P401

P302

rx

P410

P402

P301

EK-RA4W1

UART1

UART4(REPL)

UART9

tx

P213

P204

P109

rx

P212

P206

P110

EK-RA6M1

UART0(REPL)

UART2

UART8

tx

P411

P302

P105

rx

P410

P301

P104

EK-RA6M2

UART0(REPL)

UART7

UART9

tx

P411

P401

P602

rx

P410

P402

P601

RA4M1-CLICKER

UART0

UART1(REPL)

tx

P411

P401

rx

P410

P402

次の関数は現時点で未サポートです:

UART.init(baudrate)   # now only 115200 is confirmed
UART.init(cts, rts)   # Pins are fixed.
UART.init(invert)
UART.init(tx,rx)      # Pins are fixed.
UART.init(txbuf)
UART.init(flow)
UART.irq(handler)
UART.irq(trigger=RX_ANY)
UART.irq(priority)
UART.irq(wake=machine.IDLE)

リアルタイムクロック (RTC)

machine.RTC を参照:

from machine import RTC

rtc = RTC()
rtc.datetime((2017, 8, 23, 1, 12, 48, 0, 0)) # 指定の日時を設定
                                             # 日時 2017/8/23 1:12:48
rtc.datetime() # 日時を取得

次の関数は現時点で未サポートです:

RTC.init(datetime)
RTC.now()
RTC.deinit()
RTC.alarm()
RTC.alarm_left()
RTC.cancel()
RTC.irq()

ADC (アナログ/デジタル変換)

machine.ADC を参照:

from machine import ADC

adc = ADC('P000')    # ADC ピンの ADC オブジェクトを作成
adc.read_u16()       # 生のアナログ値を 0-65535 の範囲で読込み

ピン id は RA MCU のピン名が 'P000' であるなら AN000 (アナログチャネル 000)として利用できます。RA MCU は多くのアナログチャンネルを備えています。しかし、ピン機能はボードによって固定されていたり、利用できない場合があります。ピンのマッピングについては、MCUおよびボードのマニュアルを確認してください。

次の関数は現時点で未サポートです:

ADC.init()
ADC(sample_ns)
ADC(atten)
ADC.read_uv()
ADC.block()

SPI バス

RA MCUはいくつかのハードウェア SPI (Serial Peripheral Interface)を備えています。SPI id は RA MCU の SPI 番号に対応しており、SPI(0) をSPI0、SPI(1) を SPI1 として利用できます。追加パラメータがない場合は machine.SoftSPI() が呼び出されます。

machine.SPI を参照:

from machine import SPI, Pin

spi = SPI(0, baudrate=500000)
cs = Pin.cpu.P103
cs(0)
spi.write(b"12345678")
cs(1)

利用可能な SPI とピンは固定されていて、次のとおりです。

EK-RA4M1

SPI0

sck

P102

mosi

P101

miso

P100

cs

P206

EK-RA4W1

SPI0

sck

P102

mosi

P101

miso

P100

cs

P103

EK-RA6M1

SPI0

sck

P102

mosi

P101

miso

P100

cs

P103

EK-RA6M2

SPI0

SPI1

sck

P102

P702

mosi

P101

P701

miso

P100

P700

cs

P103

P703

RA4M1-CLICKER

SPI0

sck

P102

mosi

P101

miso

P100

cs

P103

次の関数は現時点で未サポートです:

SPI.init(firstbit)    # 現状は SPI.LSB で固定
SPI.init(baudrate)    # 現状は 500000 のみ確認

I2C バス

RA MCU はいくつかのハードウェア IIC (Inter-Integrated Circuit Bus)を備えています。I2C id は RA MCU の I2C 番号に対応しており、I2C(0) を IIC0、I2C(1) を IIC1 として使えます。追加パラメータがない場合は、machine.SoftI2C() が呼び出されます。

machine.I2C を参照:

from machine import I2C

i2c = I2C(0)

i2c.scan()         # スレーブアドレスのリストを返す
i2c.readfrom_mem(0x50, 0x10, 2, addrsize=16)  # スレーブ 0x50、スレーブメモリ 0x10 から 2 バイト読込み

利用可能な I2C とピンは固定されていて、次のとおりです。

EK-RA4M1

scl

未サポート

sda

未サポート

EK-RA4W1

I2C0

scl

P204

sda

P407

EK-RA6M1

I2C0

scl

P400

sda

P401

EK-RA6M2

I2C2

scl

P512

sda

P511

RA4M1-CLICKER

I2C1

scl

P205

sda

P206

次の関数は現時点で未サポートです:

I2C.init(freq)    # 現状は 400000 のみ確認
I2C.deinit()
I2C.start()
I2C.stop()

PWM (パルス幅変調)

PWM は未サポートです。

WDT (ウォッチドッグタイマー)

WDT は未サポートです。

SD カード

microSD カードデバイスをハードウェア SPI0 ピンに接続することで、凍結した sdcard ドライバ(drivers/sdcard/sdcard.py)が利用できます。

from machine import Pin, SPI
import os, vfs, sdcard

spi = SPI(0, baudrate=500000)
cs = Pin.cpu.P103
sd = sdcard.SDCard(spi, cs)
vfs.mount(sd, '/sd')
os.listdir('/')
os.chdir('/sd')
vfs.umount('/sd')

OneWire ドライバー

OneWire ドライバーはソフトウェアで実装され、すべてのピンで動作します:

from machine import Pin
import onewire

ow = onewire.OneWire(Pin(P012)) # P012 で OneWire バスを作成
ow.scan()               # バス上のデバイスリストを返す
ow.reset()              # バスをリセット
ow.readbyte()           # 1バイト読込み
ow.writebyte(0x12)      # バスに1バイト書込み
ow.write('123')         # バスに複数バイト書込み
ow.select_rom(b'12345678') # ROM コードで指定したデバイスを選択

DS18S20 と DS18B20 のデバイスに対応したドライバが用意されています:

import time, ds18x20
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
    print(ds.read_temp(rom))

4.7k のプルアップ抵抗をデータラインに接続してください。convert_temp() メソッドは、温度をサンプリングするたびに呼び出す必要があることに注意してください。

NeoPixel/APA106 ドライバー

NeoPixel は現在のところ未サポートです。