TOPに戻る

CircuitPython 10行プログラミング Step5 (2) Raspberry Pi Picoのdigitalio

 ディジタル入出力digitalioモジュールを調べます。

出力

 前回、動作確認に使ったLチカのプログラムです。


import digitalio
from board import *
import time


port = GP25

led = digitalio.DigitalInOut(port)
led.direction = digitalio.Direction.OUTPUT
while True:
    led.value = True
    time.sleep(0.5)
    led.value = False
    time.sleep(3.14)

 GPIOポートの指定はboardモジュールです。オーソドックスに、

import board

とimportを記述したときは、

port = board.GP25

のように本文では記述します。少し煩わしいですね。
 検索すると、importで*を使うのはよろしくないというのを見かけましたが、ここでは、簡潔にして間違いを起こすことはないと思われます。

いずれのポートも使えるのか

 GPIO端子のGP0からGP28まで、次のプログラムを動かして、オシロスコープで出力が出ているかを確認します。


import digitalio
from board import *
import time

port = GP0

led = digitalio.DigitalInOut(port)
led.direction = digitalio.Direction.OUTPUT
while True:
    led.value = True
    time.sleep(0.001)
    led.value = False
    time.sleep(0.001)

 プログラムでは1msごとにON/OFFを繰り返します。波形を見ます(黄色)。

 周期は約512Hzで、ほぼ1msのON/OFFになっているようです。

 端子がピンに出ていない下記以外は、全部正しく出力が出ていました。

GPIO29 入力  ADCモード(ADC3)ではVSYS/3を測定
GPIO25 出力 LED
GPIO24 入力 VBUSセンス
GPIO23 出力 SMPS Power Saveピン

入力

 GPIOの初期値はLowです。 

 上記の設定と同様に、GP28を入力、プルアップありにします。「プルアップあり」は、内部で50kΩ(値は確認できていない。I2Cの解説では、弱い値なので、たくさんのデバイスをつなぐときは、外部に適切な値のプルアップ抵抗をつけるようにとある)ぐらいの抵抗を電源につないでプルアップされます。したがって、GP28端子にに何もつなげないと'1'=Trueです。


import digitalio
from board import *
import time

port = GP28

SW = digitalio.DigitalInOut(port)
SW.direction = digitalio.Direction.INPUT
SW.pull = digitalio.Pull.UP

while True:
    print(SW.value)
    time.sleep(0.1)

 想定通り、何もしないとTrue、GP28端子をGNDへつなげるとFalseになりました。

 別の入力設定方法を試します。同様の結果になりました。


import digitalio
from board import *
import time

port = GP28

SW = digitalio.DigitalInOut(port)
SW.switch_to_input(pull=digitalio.Pull.UP)

while True:
    print(SW.value)
    time.sleep(0.1)

 では、下記の行をコメントアウトし、プルアップを省略するとどうなるでしょうか。

 結果は、不安定で、TrueになったりFalseになったりを繰り返します。GP28をGNDへつなげるとFalseです。マイコンのGPIOを入力にすると、ハイ・インピーダンスになり、ノイズなどの影響で、勝手に'1'、'0'になります。

SW.switch_to_input(pull=digitalio.Pull.UP)

連載 CircuitPython 10行プログラミング Step5

(1) Raspberry Pi Picoの準備と動作確認

(2) Raspberry Pi Picoのdigitalio

(3) Raspberry Pi Picoのmicrocontroller

(4) Raspberry Pi Picoのアナログ入力

(5) Raspberry Pi PicoのPWM出力

(6) Raspberry Pi PicoのI2S出力

(7) Raspberry Pi PicoのI2C ① OLEDディスプレイ

(8) Raspberry Pi PicoのI2C ② 温湿度センサ

(9) Raspberry Pi PicoのI2C ③ 気圧センサ

(10) Raspberry Pi PicoのSPI ① TFTディスプレイ


連載 CircuitPython 10行プログラミング Step4

(1) Adafruit Feather nRF52840 Senseの準備 (2) Lチカ (3) 搭載センサ (4) BLE①ペリフェラル (5) BLE②セントラル


連載 CircuitPython 10行プログラミング Step3

(1) Metro M4 Express AirLift (WiFi)の準備 (2) ロータリ・エンコーダ (3) eInk/ePaper (4) Wi-Fi その1 接続 (5) Wi-Fi その2 ソケット (6) Wi-Fi その3 電圧測定 (7) 気圧センサLPS25HB (8) サーミスタ


連載 CircuitPython 10行プログラミング Step2

(1) Grand Central M4 Expressの準備 (2) グラフィック・ディスプレイOLED (3) RTC DS3231 (4) モジュール/SDメモリ (5) 複合センサ BME680 (6) ロードセル+ADS1220 (7) サーボ・モータ① (8) サーボ・モータ② (9) I2S UDA1334A (10) D-Aコンバータ


連載 CircuitPython 10行プログラミング

(1) Trinket M0の準備 (2) ディジタルI/O (3) アナログ入出力 (4) I2C 温湿度センサSi7021 (5) SPI 熱電対+MAX31855 (6) UART 距離センサTFMini (7) 1-Wire 温度DS18B20 (8) ロータリ・エンコーダ (9) 7セグメントLED (10) FANコントロール (11) UART GPS (12) I2C Lチカ MCP23017