デジタルI/O

MicroPythonを使ったデジタル入出力のガイドです。


Author:Pedro LimaLast revision:2024/12/18

デジタルピンは、Arduinoボードを使って現実世界とやり取りを行う基本です。これで、以下のようなことが可能です。

  • 出力を制御する。例えば、LEDのオン・オフ。
  • 入力を読む。例えば、ボタンの状態の検知。

デジタル信号は2つの異なる値をとります。

  • HIGH(1): 電圧レベルが、ボードの動作電圧(例: 3.3Vや5V)に近いことを表現します。
  • LOW(0): 電圧レベルが0V(接地)に近いことを表現します。

2つの状態しか表現できませんが、デジタル信号は非常に有用です。2つの値を持つという性質上、マイクロコントローラやプロセッサと直接インターフェイスをとることができ、高速にオン・オフする通信(例: センサーの読取や簡単な出力の制御)を要求するタスクに理想的です。また、ノイズがデジタル信号を妨害するのは、HIGHとLOWの間の閾値に近く、十分強いときなので、そのシンプルさにより、電気ノイズに対する耐性を自然に持ちます。これにより、様々な環境で、明瞭で一貫性のある通信ができる、信頼性のあるものになっています。

この章では、MicroPythonでデジタルピンを使う方法を紹介します。

要件

始める前に、要件を確認します。

MicroPythonが利用できるArduinoボード

MicroPythonは、いくつかのArduinoボードで公式にサポートされています。互換性のあるボードの一覧を示します。

ハードウェア部品

このガイドでは、いくつかの電子部品を追加で使います。

  • LED(ボードのLEDを使う場合はオプション)
  • 外部LEDを使う場合は、電流制限抵抗(例: 220Ω)
  • ジャンプワイヤー
  • 押しボタン
  • ブレッドボード

ソフトウェア要件

  • Arduino Lab for MicroPython: Arduino Lab for MicroPythonは、Arduinoボードで、MicroPythonスクリプトの作成・実行が可能なエディタです。
i
Arduino Cloud - Arduino Labs for MicroPythonで、オンラインエディタも利用可能です。

ボードとエディタの設定

  1. Arduino Lab for MicroPythonを開きます。
  2. ArduinoボードとPCを、USBケーブルで接続します。
  1. ウインドウの左上の接続ボタンをクリックします。接続したボード(のポート名)が現れます
i
ボードにMicroPythonをインストールするのにヘルプが必要ですか? MicroPythonインストールガイドを参照してください。

デジタル出力

MicroPythonでデジタル出力を制御するには、machineモジュールのPinクラスを使います。ピンを出力に設定して、LEDやリレー、他のアクチュエーターなどのデバイスを制御します。

一定間隔でLEDを点滅させる、定番の「Blink」の例を作ってみましょう。

回路図

以下の回路図に従って、LEDをArduinoボードに接続します。

  • LEDのアノード(+)をデジタル出力ピンに接続します。
  • LEDのカソード(-)を、抵抗を介してGNDに接続します。
i
外部のLEDを持っていない場合は、ボード上のLEDを使うこともできます。

回路を完成させたら、以下のコードをエディタにコピーし、スクリプトを実行してください。

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

# Initialize the LED pin
# Uncomment the line that matches your board
led = Pin(25, Pin.OUT)     # For Arduino Nano RP2040 Connect
# led = Pin(13, Pin.OUT)   # For Arduino Nano 33 BLE / Sense (built-in LED)
# led = Pin(2, Pin.OUT)    # For Arduino Portenta H7

while True:
    led.value(1)  # Turn LED on
    time.sleep(1)  # Wait for 1 second
    led.value(0)  # Turn LED off
    time.sleep(1)  # Wait for 1 second

このコードに何が含まれているか見てみましょう。

  • モジュールのインポート: machineからPinを、遅延のためにtimeをインポートします。
  • LEDピンの初期化: Pinオブジェクトで、ピン番号と方向(Pin.OUT)を設定します。
  • メインループ:
    • led.value(1): ピンをHIGHにして、LEDを点灯します。
    • time.sleep(1): 1秒間プログラムを止めます。
    • led.value(0): ピンをLOWにして、LEDを消灯します。
    • while True:: 無限に繰り返し、LEDを点滅させます。

デジタルピン

デジタル入力を読むことで、プログラムを、ボタン押下やセンサーの信号などの、外部イベントに反応させることができます。MicroPythonでは、ピンを入力にするのに、Pinクラスを使います。入力値を安定させるために、プルモードを設定することもできます。

このセクションでは、異なるプルモードを説明し、Arduinoに押しボタンを接続して、試してみます。

プルアップモードを理解する

デジタルピンが、明確なHIGHやLOWの電圧に接続さえていない状態は、浮いていると言います。この状態では、電気ノイズにより読み取り値が信頼できなくなります。これを避けるため、内部プルアップ抵抗やプルダウン抵抗を使います。Pinコンストラクタでプルモードを指定することで有効化します。

  • プルアップモード(Pin.PULL_UP): 入力ピンを内部でHIGHの電圧レベルに接続し、接続されていないときにHIGHを読むようにします。
  • プルダウンモード(Pin.PULL_DOWN): 入力ピンを内部でLOWの電圧レベルに接続し、接続されていないときにLOWを読むようにします。

これらの内部抵抗はマイクロコントローラーに内蔵されていて、コードから有効化できます。外部抵抗は不要です。

例: プルアップモード

プルアップモードでは、入力ピンを内部でHIGHの電圧レベルに接続します。ボタンのような入力デバイスがアクティブになり、ピンがGNDに接続されると、ピンはLOW(0)を読み出します。

  • ボタンの一方をGNDに接続します。
  • もう一方を入力に設定したデジタルピンに接続します。

回路を完成させたら、以下のコードをエディタにコピーし、スクリプトを実行してください。

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

# Initialize the button pin with internal pull-up resistor
button = Pin(14, Pin.IN, Pin.PULL_UP)  # Replace 14 with your input pin number

while True:
    button_state = button.value()
    if button_state == 0:
        print("Button Pressed")
    else:
        print("Button Released")
    time.sleep(0.1)

このコードに何が含まれているか見てみましょう。

  • ボタンピンの初期化:
    • ピンをプルアップモード(Pin.PULL_UP)の入力に設定し、内部のプルアップ抵抗を有効にします。
    • ボタンが押されていないときにピンを読むとHIGH(1)になります。
  • ピンを読む:
    • ボタンが押されていないとき、ピンは内部でHIGHにプルされます(button.value()1を返します)。
    • ボタンが押されているとき、ピンはGNDに接続され、button.value()0を返します。
  • メインループ:
    • ボタンの状態を読み取り、対応したメッセージを表示します。
    • 短時間の遅延はボタンのチャタリングを防ぎます。

例: プルダウンモード

プルダウンモードでは、入力ピンを内部でGNDに接続します。ボタンのような入力デバイスがアクティブになり、ピンがHIGHの電圧レベル(例: 3.3V)に接続されると、ピンはHIGH(1)を読み出します。

  • ボタンの一方を3.3V(あるいは5.5V。ボードのロジックに依存)に接続します。
  • もう一方を入力に設定したデジタルピンに接続します。

回路を完成させたら、以下のコードをエディタにコピーし、スクリプトを実行してください。

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

# Initialize the button pin with internal pull-down resistor
button = Pin(14, Pin.IN, Pin.PULL_DOWN)  # Replace 14 with your input pin number

while True:
    button_state = button.value()
    if button_state == 1:
        print("Button Pressed")
    else:
        print("Button Released")
    time.sleep(0.1)

このコードに何が含まれているか見てみましょう。

  • ボタンピンの初期化:
    • ピンをプルダウンモード(Pin.PULL_DOWN)の入力に設定し、内部のプルアップ抵抗を有効にします。
    • ボタンが押されていないときにピンを読むとLOW(0)になります。
  • ピンを読む:
    • ボタンが押されていないとき、ピンは内部でLOWにプルされます(button.value()0を返します)。
    • ボタンが押されているとき、ピンはHIGHの電圧に接続され、button.value()1を返します。
  • メインループ:
    • ボタンの状態を読み取り、対応したメッセージを表示します。
    • 短時間の遅延はボタンのチャタリングを防ぎます。

まとめ

このガイドでは、Arduinoで、MicroPythonを使い、デジタルピンとのやり取りを行ういくつかの方法を見てきました。

  • デジタル出力の使い方(LEDをオン・オフする)。
  • 異なるプルモードの動作方法(PULL_DOWNPULL_UP)。
  • 両方のプルモードを使ったボタンの読み出し。

オリジナルのページ

https://docs.arduino.cc/micropython/basics/digital-io/

最終更新日

July 26, 2026

inserted by FC2 system