0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi 3B+ でタクトスイッチからの入力

Posted at

はじめに

タクトスイッチを押したことを感知して Raspberry Pi にプログラムを実行させたい。
ということで、まずは基本的にタクトスイッチからの入力したことを感知するプログラムを作る。

だいたいPythonが多いのだけど、Rubyが慣れているので Ruby でできないかを探していると Pi-Piper とかいうものがあったのでこれを利用する。

用意するもの

  • Raspberry Pi 一式
  • LED(何色でもよい)
  • 抵抗(300Ω~1kΩ)
  • ジャンパーワイヤー(オスメス型4本)

回路を組む

まずは以下のような回路を組む。

image.png

タクトボタンを押すと、LEDがぴかーと光る。

image.png

タクトボタンを離すと、LEDが消灯する

image.png

ここまで出来たら準備完了

Pi-Piper のインストール

インストールしようとすると以下のエラーが発生。

# gem install pi_piper
Building native extensions. This could take a while...
ERROR:  Error installing pi_piper:
        ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/eventmachine-1.0.9/ext
/usr/bin/ruby2.5 -r ./siteconf20191022-2598-a6y1mo.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/eventmachine-1.0.9 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/arm-linux/2.5.0/eventmachine-1.0.9/gem_make.out

どうやら Rubyのヘッダーとかないとか言われたので、おそらく開発ツールがないと思ってインストールすると正解。
あと、libssl-dev も必要だったんで、一緒にインストール。

# apt-get install ruby-dev libssl-dev
# gem install pi_piper

Pi_Piper でプログラム

さて、GPIO18 につないだ線だが、こいつに信号を入力したことを感知してほしい。
GPIOとは「汎用入出力」と言われて、ユーザが実行時に入出力を制御できるもの。
これを使ってボタン押したよっていうことを感知してほしい。

いちいちドキュメントまでたどり着いて見に行くのが面倒なので、Raspberry Pi 3B+ のピンの配列は以下に書いといた。
https://qiita.com/bakachou/items/6ddd08105f94185cbb4e

いざRubyでプログラムをしてみる。

require 'pi_piper'
include PiPiper


# Pin オブジェクト生成
# GPIO18
# Pin への入力
# ボタンを押したときのイベント
pin = Pin.new pin: 18, direction: :in, pull: :down

# 入力待ちで入力検知して、以前の状態と変わったら変更内容を出力
loop do
    pin.read
    if pin.changed? then
        puts "以前の状態:#{pin.last_value}   =====> 今の状態: #{pin.value}"
        if pin.on? then
            puts "押"
        elsif pin.off? thenRas
            puts "離"
        end
    end
    sleep 0.5
end

実行して、タクトスイッチを押したり話したりすると以下のような感じで出力される

# ruby button_senser.rb
以前の状態:0   =====> 今の状態: 1
押
以前の状態:1   =====> 今の状態: 0
離
以前の状態:0   =====> 今の状態: 1
押
以前の状態:1   =====> 今の状態: 0
離
以前の状態:0   =====> 今の状態: 1
押
以前の状態:1   =====> 今の状態: 0
離
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?