1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MIMXRT1170-EVKでMicroPython

Last updated at Posted at 2023-05-02

先日(2023年4月26日),MicroPythonがアップデートされv1.20となった.世間一般にはRaspberry Pi Pico Wで使える安定版がリリースされたとして話題になってるっぽい感じだが,この版はi.MX RT1170の評価基板:MIMXRT1170-EVKの安定版リリースでもある.
そんなわけで,どんなものか試してみたくてMIMXRT1170-EVKを借りてきた.
これはこの基板でMicroPythonを動作させるまでのメモ.

なお,この記事は細かいステップについてはかなり端折って書いてある.MicroPythonそのものや動作確認で使用したThonnyについてなどは,MIMXRT1050-EVKBでインストール〜動作確認を行った動画:『MicroPythonをi.MX RTクロスオーバーMCUで動かしてみた』を参照.

MicroPythonのインストール

J2コネクタに電源をつないで,J11コネクタ(USBマイクロBコネクタ)にPCを接続.下の図は各ケーブルを接続して電源スイッチ(SW1)を入れた様子.

DSC_0750.jpeg

そうするとデスクトップ上に「RT1170-EVK」の名のストレージ・デバイスがアイコンとして現れる.

スクリーンショット 2023-05-02 15.17.17.png

MicroPythonのMIMXRT1170-EVK用ダウンロード・ページからbinファイル
をもらってきてドラッグ&ドロップ・コピー.

スクリーンショット 2023-05-02 16.09.32.png

USBケーブルを「USB1(SDP)」コネクタ(J20)に接続し直す.

DSC_0754.jpeg

Thonnyを起動して以下のメッセージが表示されたら動作している

MicroPython v1.20.0 on 2023-04-26; i.MX RT1170 EVK with MIMXRT1176DVMAA
Type "help()" for more information.

動作確認

単純にピンの出力をHIGH/LOWさせてMicroPythonが動いているかどうかを確かめる.
Arduinoコネクタ(この基板の場合,Arduinoシールド・コネクタは片側2重になっていて,互換のピンは外側の列)の信号の名前でピンを指定できる

from machine import Pin

def main():
    p0	= Pin( "D0", Pin.OUT )

    while True:
        p0.value( 1 )
        p0.value( 0 )

if __name__ == "__main__":
    main()

でもこの例ではピン出力をHIGH/LOWするだけで,動作を見てみるにはロジアナやオシロスコープが必要になってしまう.とりあえず手持ちのロジアナで出力を見てみたのが下の図.
スクリーンショット 2023-05-02 15.32.40.png

でも,この基板には簡単な動作確認用にLEDが2個用意されているのでそれを使ってみる.
LEDがどのIOピンに接続されていて,どのように指定できるかを確認しないといけない.
まずは回路図を見てみる.回路図はここからダウンロードできる.

回路図を見るとUSER LED1USER LED2があり,それぞれUSER_LED_CTL1USER_LED_CTL2信号で制御できるようになっている.この信号を追っていくとマイコンのGPIO_AD_04GPIO_AD_26のピンに接続されている.
MicroPythonではピンがどのように定義されているかは次のようなコマンドで確認できる.

基板のピン指定に使える名前は以下のようにして確認できる.
>>>は,MicroPythonのプロンプト

>>> import machine
>>> dir( machine.Pin.board )
['__class__', '__name__', '__bases__', '__dict__', 'A0', 'A1', 
'A2', 'A3', 'A4', 'A5', 'CS', 'D0', 'D1', 'D10', 'D11', 'D12', 
'D13', 'D14', 'D15', 'D16', 'D17', 'D18', 'D19', 'D2', 'D20', 
'D21', 'D22', 'D23', 'D24', 'D25', 'D26', 'D27', 'D29', 'D3', 
'D30', 'D31', 'D32', 'D33', 'D34', 'D35', 'D36', 'D4', 'D5', 
'D6', 'D7', 'D8', 'D9', 'LED1', 'LED2', 'MCK', 'RX', 'SCK', 
'SCK_RX', 'SCK_TX', 'SCL', 'SDA', 'SDI', 'SDO', 'SD_RX', 'SD_TX', 
'TX', 'WS_RX', 'WS_TX']
>>> 

マイコンチップのピン名での指定に使える名前はこんな風に...

>>> import machine
>>> dir( machine.Pin.cpu )
['__class__', '__name__', '__bases__', '__dict__', 'GPIO_AD_00', 'GPIO_AD_01', 
'GPIO_AD_02', 'GPIO_AD_03', 'GPIO_AD_04', 'GPIO_AD_05', 'GPIO_AD_06', 'GPIO_AD_07', 
'GPIO_AD_08', 'GPIO_AD_09', 'GPIO_AD_10', 'GPIO_AD_11', 'GPIO_AD_12', 'GPIO_AD_13', 
'GPIO_AD_14', 'GPIO_AD_15', 'GPIO_AD_16', 'GPIO_AD_17', 'GPIO_AD_18', 'GPIO_AD_19', 
'GPIO_AD_20', 'GPIO_AD_21', 'GPIO_AD_22', 'GPIO_AD_23', 'GPIO_AD_24', 'GPIO_AD_25', 
'GPIO_AD_26', 'GPIO_AD_27', 'GPIO_AD_28', 'GPIO_AD_29', 'GPIO_AD_30', 'GPIO_AD_31', 
'GPIO_AD_32', 'GPIO_AD_33', 'GPIO_AD_34', 'GPIO_AD_35', 'GPIO_DISP_B1_00', 
'GPIO_DISP_B1_01', 'GPIO_DISP_B1_02', 'GPIO_DISP_B1_03', 'GPIO_DISP_B1_04', 
...中略...
'GPIO_SD_B2_09', 'GPIO_SD_B2_10', 'GPIO_SD_B2_11']
>>> 

これをみると回路図で見たとおりの名前があるので,それを使ってコードにしてみたらこんな感じ.

from machine import Pin
from utime   import sleep

def main():
    user_led1	= Pin( "GPIO_AD_04", Pin.OUT )
    user_led2	= Pin( "GPIO_AD_26", Pin.OUT )

    while True:
        user_led1.value( 1 )
        user_led2.value( 0 )
        sleep( 0.1 )
        user_led1.value( 0 )
        user_led2.value( 1 )
        sleep( 0.1 )
	
if __name__ == "__main__":
    main()

緑と赤のLEDがチカチカする.
led.gif

I²C

I²Cも試してみる.MIMXRT1050-EVKBではA4/A5ピンでのI²C制御は,ハードウェアI2Cクラスのインスタンスを宣言する際の第一引数のIDを「0」とすることでできた.

#i2c = I2C( 0, freq = (400_1000) ) # MIMXRT1050-EVKBの場合
i2c  = I2C( 2, freq = (400_1000) ) # MIMXRT1170-EVKの場合

MIMXRT1170-EVKの場合はこれを「2」としてやる必要がある.
この違いはHardware I2C pin assignmentに明記されている.

このような基板による設定の違いを抽象化したい場合には以下のようなコードを書いておくと便利.

os.uname().machineからは基板によって以下のような文字列が返ってくるので,これによって制御を変える
'i.MX RT1050 EVKB-A1 with MIMXRT1052DVL6B'
'i.MX RT1170 EVK with MIMXRT1176DVMAA'

import os
...

if "i.MX RT1170 EVK" in os.uname().machine:
    i2c = machine.I2C( 2, freq = (400_000) )
else:
    i2c = machine.I2C( 0, freq = (400_000) )

Etherポート

MIMXRT1170-EVKにはEtherポートは2個用意されている.
ネットワーク開始の際のポート指定に「0」または「1」を指定してやることで,それぞれ100Mbps側と1Gbps側を指定して使うことができる.

#lan = network.LAN( 0 ) # 100Mbpsポート (RT1050でのポートもこれ)
lan  = network.LAN( 1 ) # 1Gbpsポート

スクリーンショット 2023-05-02 16.42.35.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?