Renesas RA 用クイックリファレンス¶
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 には多くの機能のピンがあります。しかし、ピンの機能が固定されていたり、ボードによって接続されていない場合があります。ピンのマッピングについてはボードのマニュアルを確認してください。
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, sdcard
spi = SPI(0, baudrate=500000)
cs = Pin.cpu.P103
sd = sdcard.SDCard(spi, cs)
os.mount(sd, '/sd')
os.listdir('/')
os.chdir('/sd')
os.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 は現在のところ未サポートです。