ArduinoボードでMicroPython

人気のMicroPythonの実装とArduinoボードでの互換性、環境設定方法、詳細なチュートリアル、有用なリンクを学びます。


AUTHOR: Karl Söderby、LAST REVISION: 2022/12/08 18:58


i
ArduinoボードでMicroPythonを動作させるのに必要なファームウェアをダウンロードするには、Arduino MicroPythonダウンロードページを参照してください。

MicroPythonPython®プログラミング言語の実装で、Python®標準ライブラリの一部を実装していて、マイクロコントローラ上で動作するように設計されています。

MicroPythonを利用する大きな利点は学習しやすく、多くのボード向けの素晴らしいドキュメントがあることです。現状、MicroPythonが利用できるボードは4つあり、互換ボードで詳しく説明します。

ArduinoはOpenMVのMicroPythonのブランチを公式にサポートしています。OpenMV IDEを使い、MicroPythonのインストールや、ボードの接続・切断、スクリプトのアップロードができます。

MicroPythonを公式サポートしているArduinoボード

MicroPythonを公式サポートしているArduinoボード

Arduino IDEで、C++ベースのArduinoプログラミング言語を使うときと、MicroPythonを使うときとで、プログラムの方法は全く異なります。スケッチと呼ぶものをボードにアップロードするとき、最初に書いたスケッチをコンパイルした後、ボードにアップロードし、古いスケッチを新しいスケッチに入れ替えます。

MicroPythonを使うには、最初にボードにMicroPythonをインストールする必要があります。そして、以下のblinkの例のように、script.pyをロードします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import time
from machine import Pin

led = Pin(6, Pin.OUT)

while (True):
    led.on()
    time.sleep_ms(250)
    led.off()
    time.sleep_ms(250)

MicroPythonはすでにボード上で動いていて、コードのコンパイルとアップロードは不要です。命令を与えるだけです。これは、シリアル通信経由で実行されます。

i
ボードにMicroPythonをインストールしてあるときは、アンインストールするまでは、MicroPythonスクリプトだけが実行できます。ボードを通常モードに戻すには、ブートローダーをリセットする必要があります。これは個々のボード固有の方法です。これらの方法は、この記事内の互換ボードのセクションで説明します。基本的には、ボードをブートローダーモードにし、.inoスケッチをアップロードする必要があります。。

MicroPython用Arduino Lab

MicroPython用Arduino Lab

MicroPython用Arduino Lab

MicroPython用Arduino Labは、PCとボード間の簡単な対話型の軽量エディタです。ポートを選んだり、スクリプトをロードしたり、REPLシェルなどを使ったりできます。

OpenMVエディタ

OpenMVはMicroPythonの派生を使ってArduinoボードのプログラムをサポートするプラットフォームです。OpenMVエディタを通じ、MicroPythonのインストールや、ボードに直接スクリプトをアップロードすることができます。エディタ内で直接利用できる多くのスケッチ例もあります。

OpenMVは、コンピュータビジョンや機械学習プロジェクト用の素晴らしいプラットフォームです。

OpenMVエディタ

OpenMVエディタ

OpenMVの例

このページの後の方に、始めるのに適した役に立つコード例がたくさん掲載されています。

i
OpenMVのGitHubリポジトリには、スケッチ例の全てのリストがあります。

互換ボード

現状、4種類のArduinoボードが、MicroPythonを公式にサポートしています。以下に示します。

上記の全ては、OpenMV IDEと互換性があります。

Nano 33 BLE

Nano 33 BLE

Nano 33 BLE

Nano 33 BLEボードでMicroPythonを始めるのに手助けが必要なときは、以下のチュートリアルを参照してください。

i
Nano 33 BLEボードのブートローダーをリセットするには、リセットボタンを素早く2回押します。これによりボードが工場出荷時の設定にリセットされます。

Nano 33 BLE Sense

Nano 33 BLE + BLE Sense

Nano 33 BLE + BLE Sense

Nano 33 BLE SenseボードでMicroPythonを始めるのに手助けが必要なときは、以下のチュートリアルを参照してください。

i
Nano 33 BLE Senseボードのブートローダーをリセットするには、リセットボタンを素早く2回押します。これによりボードが工場出荷時の設定にリセットされます。

Nano RP2040 Connect

Nano RP2040 Connect

Nano RP2040 Connect

Nano RP2040 ConnectボードでMicroPythonを始めるのに手助けが必要なときは、以下のチュートリアルを参照してください。

i
ブートローダーをリセットするには、RECとGNDピンの間をジャンプワイヤーで接続しショートし、リセットボタンを押す必要があります。詳細な方法は、Nano RP2040 Connect technical reference.を参照してください。

Portenta H7

Portenta H7

Portenta H7

Portenta H7ボードでMicroPythonを始めるのに手助けが必要なときは、以下のチュートリアルを参照してください。

Python®を学習する

MicroPythonはPython®の一実装なので、多くのPython®スクリプトを直接ボード上で実行することができます。例えば、PC上で動作するこのPython®スクリプトはボード上でも同じように動作します。

1
2
3
4
value1 = 2
value2 = 5

print(value1 + value2)

これはPython®を学習する時期であることを意味していて、そのためのリソースも多くあります。Python®言語をより理解するためには、以下のリソースを参照することを推奨しています。

MicroPython Docs

Python®がマイクロコントローラ上でどのように動作するかを理解するには、MicroPython documentationを訪問してください。

i
多くの例は直接Arduinoボード上では動作しないことに注意してください。しかし、Python®がマイクロコントローラ上でどのように動作するかは知ることができます。

API

以下には、全てのArduinoボードで利用できる実用的な例があります。ボード上のセンサーや接続性、通信などのより具体的な機能については、個々のガイドを参照してください。

Print

"Hello World!"を1秒ごとに表示する簡単なスクリプトです。

1
2
3
4
5
6
7
import time

content = "Hello world!"

while True:
    print(content)
    time.sleep(1)

関数

このスクリプトは、"Hello World!"を1秒ごとに表示します。さらに、counter_function()も実行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import time

content = "Hello world!"
count = 0

def counter_function():
    global count
    count = count + 1

while True:
    counter_function()
    print(content, count)
    time.sleep(1)

forループ

forループと関数の簡単な使い方です。このスクリプトは10数え、0まで戻ります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import time

content = "Hello world!"
count = 0

def function_increase():
    global count
    count = count +1
    print(count)

def function_decrease():
    global count
    count = count -1
    print(count)

while True:
   for x in range(10):
    function_increase()
    time.sleep(1)
    
   for x in range(10):
    function_decrease()
    time.sleep(1)

Digital Write

1秒ごとにデジタルピンにHIGHとLOWを書きます。また、端末に状態を表示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from machine import Pin
import utime

p2 = Pin(25, Pin.OUT)

while True:
    p2.value(0)
    print("off")
    utime.sleep(1)  
    p2.value(1)
    print("on")
    utime.sleep(1)

Digital Read(pull up)

PULL_UP設定でデジタルピンの値を読みます。

1
2
3
4
5
6
7
8
from machine import Pin
import utime

p2 = Pin(25, Pin.IN, Pin.PULL_UP)

while True:
    print(p2.value())
    utime.sleep(1)

Digital Read(pull down)

PULL_DOWN設定でデジタルピンの値を読みます。

1
2
3
4
5
6
7
8
from machine import Pin
import utime

p2 = Pin(25, Pin.IN, Pin.PULL_DOWN)

while True:
    print(p2.value())
    utime.sleep(1)

Analog Read

アナログピンを読み、0.5秒の遅延で端末に表示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import machine
import time

# Make sure to follow the GPIO map for the board you are using.
# Pin 29 in this case is the "A3" pin on the Nano BLE / BLE Sense
adc_pin = machine.Pin(29) 
adc = machine.ADC(adc_pin)

while True:
    reading = adc.read_u16()     
    print("ADC: ",reading)
    time.sleep_ms(500)

PWM

指定したピンに特定のデューティ比で書きます。

1
2
3
4
5
6
7
8
9
from machine import Pin, PWM, ADC

pwm = PWM(Pin(15))
duty = 30000 #between 0-65000

pwm.freq(1000)

while True:
    pwm.duty_u16(duty)

Delay

簡単な遅延を使うには、timeモジュールを使います。秒単位で待ちたいときは、time.sleep(seconds)を使い、ミリ秒単位では、time.sleep_ms(milliseconds)を使います。

1
2
3
4
5
import time

while True:
    time.sleep(0.5) #or time.sleep_ms(500)
    print("Hello world!")

割り込み

プルアップボタンとLEDを使った簡単な割り込みの例です。

このプログラムは、ボタンが押されるまでLEDを点滅させます。ボタンには割り込みが設定されています。その割り込みでは、3秒間LEDを消灯します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import machine
from machine import Pin
import time

interrupt = False 
 
def callback(pin):
  global interrupt
  interrupt = True
  
led = Pin(6, Pin.OUT)
 
button = machine.Pin(25, machine.Pin.IN, machine.Pin.PULL_UP)
 
button.irq(trigger=machine.Pin.IRQ_FALLING, handler=callback)
 
while True:
  
  led.on()
  time.sleep(0.5)
  led.off()
  time.sleep(0.5)
  
  if interrupt:
    state = machine.disable_irq()
    machine.enable_irq(state)
    led.off()
    print("Interrupt: LED off for 3 seconds!")
    time.sleep(3)
    interrupt = False

オリジナルのページ

https://docs.arduino.cc/retired/other/arduino-and-python/

最終更新日

April 30, 2024

inserted by FC2 system