【電子工作】Python + pigpioでGPIOの内部プルアップを有効にする(Raspberry Pi 4で遊ぼう日記 その16)

投稿日:2022年6月4日
最終更新日:2022年6月4日

PythonのコードでpigpioでGPIOのinputの内部プルアップ抵抗を有効にする

前回はpigpioとPythonを使って、GPIOからボタン(タクトスイッチ)の入力を受けて、ボタンが押されている間だけブザーから音を鳴らすようにした。

前回の回路ではボタンを抵抗で3.3VにプルアップしてGPIOに接続していたのだが、今回はRaspberry PiのSoCの内部プルアップ抵抗(チップ内部に用意されたプルアップ用の抵抗。レジスタ設定などにより有効化できる)をpigpioで有効にするPythonのコードを書いて、この外部のプルアップ抵抗無しで動かしてみる。

 

実行環境

Raspberry Pi 4 Model B

Raspberry Pi OS (Bullseye)

pigpio 1.79-1+rpt1

Python 3.9.2

 

ブレッドボードに回路をつくる

以下が今回の回路図。前回つくった回路とほぼ同じだが、差分は10kΩの抵抗を無くして、ボタンとGPIOを直結しているところ。内部プルアップ抵抗を有効にすればSoC内部で3.3Vにプルアップされるので、ブレッドボード上の抵抗は削除している。

以外がブレッドボードに接続した様子。10kΩの抵抗が無くなっているだけで、他は前回と同じ。

実際に接続したのが以下の写真。

 

Pythonのコードを書く

今回はpigpio_buzzer_button_pullup.pyという名前でPythonのコードを作成した。内容は前回とほぼ同じなのだが、

gpio.set_pull_up_down(button_gpio, pigpio.PUD_UP)

でGPIO27をプルアップに設定している。ちなみに2つめの引数をPUD_DOWNにしてやればプルダウンに設定できるし、一度設定したプルアップ/プルダウンをOFFにしたいときは2つめの引数をPUD_OFFにしてやればOK。詳しくはpigpioの公式サイトの説明を参照。

#!/usr/bin/env python3

import pigpio
import time

pwm_freq = 500
pwm_duty = 30
buzzer_gpio = 19
button_gpio = 27

gpio = pigpio.pi()
gpio.set_mode(button_gpio, pigpio.INPUT)
gpio.set_pull_up_down(button_gpio, pigpio.PUD_UP)

while True:
    while gpio.read(button_gpio) == 0:
        gpio.hardware_PWM(buzzer_gpio, pwm_freq, pwm_duty * 10000)
        time.sleep(0.1)
        gpio.hardware_PWM(buzzer_gpio, pwm_freq, 0)
        time.sleep(0.5)
        gpio.hardware_PWM(buzzer_gpio, pwm_freq * 2, pwm_duty * 10000)
        time.sleep(0.1)
        gpio.hardware_PWM(buzzer_gpio, pwm_freq, 0)
        time.sleep(0.5)
    gpio.hardware_PWM(buzzer_gpio, pwm_freq, 0)

あとはいつも通り以下で実行すればOK。

sudo pigpiod
sudo python pigpio_buzzer_button_pullup.py

これでpigpioでのプルアップ、プルダウンの方法は把握できた。

次回のブログのネタだが、せっかくパッシブブザーを使ってるので、PWM制御でブザーの音階を変えて、ボタンを押したら音楽が流れる電子オルゴールを作ってみようと思う。

 

日記まとめ

ラズパイで遊んでみた軌跡を以下でまとめてます。

【電子工作】Raspberry Pi 4で遊ぼう日記 まとめ

 


投稿者: wakky

映画と旅行が大好きなエンジニア。お酒、ゲーム、読書も好き。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください