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制御でブザーの音階を変えて、ボタンを押したら音楽が流れる電子オルゴールを作ってみようと思う。
日記まとめ
ラズパイで遊んでみた軌跡を以下でまとめてます。