SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Tessel 2ではじめるセンサー電子工作入門

ブレットボードを使って、Tessel 2とスイッチやLEDを接続してみよう

Tessel 2ではじめるセンサー電子工作入門 第1回

タクトスイッチを接続する

 今度は、GPIOの入力を使ってみましょう。今回はタクトスイッチ(あるいはタクタイルスイッチ)と呼ばれるスイッチを用います。タクトスイッチはクリック感のあるスイッチで、押したときだけ回路がつながってONになります。このスイッチの状態を、GPIOのデジタル入力を使って判定してみましょう。

回路図

 まずは回路図です。次のように、単にGPIOのピンとGNDの間にスイッチを接続するだけです。ここでは2番ピンを使っています。

スイッチの入力回路
スイッチの入力回路

 入力回路といいながら、スイッチがあるだけで何も入力していないように見えますね。でもこれで、スイッチの状態を判定することができるのです。

プルアップ

 tessel 2のGPIOピンは、outputメソッドを実行するまでのデフォルト状態のとき、内部的に3.3Vの電源と抵抗(プルアップ抵抗)で接続されています。このような接続をプルアップと呼びます。

GPIOの内部プルアップ接続
GPIOの内部プルアップ接続

 プルアップ接続されていればスイッチがOFFのとき、GPIOには3.3Vの電源のみが入力されているので、GPIOの入力がHighということになります(厳密にはTessel 2の内部抵抗により分圧されて3.3Vより小さい値の電圧がかかります。また内部抵抗は大きな値のため、GPIOには電流は少ししか流れません)。

 スイッチが押されているときは、GNDに接続されることになるので、GPIOはGNDとの電位差がなくなり電流が流れず、Low状態となります。

 なお、GPIOをGNDに直結している状態では、うっかり端子をHighにしないように注意しましょう。出力がショートしてGPIOに大きな電流が流れてしまい、tessel 2の異常終了や破損の可能性があります。

スイッチの状態を表示する

 ブレッドボードの実際の接続は、次のようになります。

タクトスイッチの接続図
タクトスイッチの接続図

 タクトスイッチは次のように4つの端子があり、同じ側面から伸びている端子間を利用します。

タクトスイッチ
タクトスイッチ

 押されていない状態では、端子1~2間と、3~4間のみが接続されています。押された場合は、全ての端子が接続状態となります。

 では、スイッチの状態を表示してみましょう。

リスト2 index_read.js
const tessel = require('tessel');

const pin2 = tessel.port.A.pin[2];

setInterval(function () {
  pin2.read(function(error, value) { // ピン2の値を読み取る(1)
      console.log(value)
  });
}, 500);

 readメソッドを使うと、GPIOの入力状態を読み取ることができます(1)。

 このサンプルを実行すると、0.5秒ごとにコンソールに1が出力されます。そして、タクトスイッチを押すと、今度は押している間だけ0が表示されます。つまり、スイッチがOFFのときはGPIOがHigh、スイッチがONのときはLowになるということです。

割り込み(interrupt)

 前述したように、GPIOの2番ピンは割り込み(interrupt)用の入力端子として利用できます。割り込みとは、非同期に発生するイベントを検知する仕組みのことです。この割り込みを使うと、GPIOの入力値の変化を非同期に処理することができます。

 先ほどのサンプルでは、setIntervalのループで定期的にGPIOの入力値をチェックしていました。今度は割り込みを使ってみましょう。次のサンプルを実行すると、ボタンを押したり離したりしたときだけ、0か1の値が表示されるようになります。

リスト3 index_on.js
const tessel = require('tessel');

const pin2 = tessel.port.A.pin[2];

pin2.on('change', function(v) { // 割り込みのコールバック定義(1)
    console.log(v)
});

 onメソッドで、割り込みのイベントが発生した場合のコールバックを定義しています(1)。なお、onメソッドで定義できるイベントは次のようになります。

onメソッドで定義できるイベント
イベント 状態
change 入力値が変化したとき
rise 入力値が上昇したとき
fall 入力値が下降したとき

スイッチONでLEDを点灯する

 最後に、スイッチONでLEDを点灯するコードを書いてみましょう。

リスト4 index_sw.js
const tessel = require('tessel');

const pin = tessel.port.A.pin[0];
const pin2 = tessel.port.A.pin[2];
pin.output(0);

pin2.on('rise', function(v) { // riseイベントの定義(1)
  pin.output(1);
});

 riseイベントの際に、GPIOの0番をHighにしています(1)。実行しても最初はLEDは点灯していませんが、スイッチを押すと点灯します。

LEDが点灯したところ
LEDが点灯したところ

最後に

 今回は、Tessel 2にLEDとスイッチを接続してみました。次回は光センサーを接続して、アナログ入力を利用した回路を紹介する予定です。

参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Tessel 2ではじめるセンサー電子工作入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10016 2017/03/09 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー