ダウンロード サンプルファイル (2.4 KB)
タクトスイッチを接続する
今度は、GPIOの入力を使ってみましょう。今回はタクトスイッチ(あるいはタクタイルスイッチ)と呼ばれるスイッチを用います。タクトスイッチはクリック感のあるスイッチで、押したときだけ回路がつながってONになります。このスイッチの状態を、GPIOのデジタル入力を使って判定してみましょう。
回路図
まずは回路図です。次のように、単にGPIOのピンとGNDの間にスイッチを接続するだけです。ここでは2番ピンを使っています。
入力回路といいながら、スイッチがあるだけで何も入力していないように見えますね。でもこれで、スイッチの状態を判定することができるのです。
プルアップ
tessel 2のGPIOピンは、outputメソッドを実行するまでのデフォルト状態のとき、内部的に3.3Vの電源と抵抗(プルアップ抵抗)で接続されています。このような接続をプルアップと呼びます。
プルアップ接続されていればスイッチが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間のみが接続されています。押された場合は、全ての端子が接続状態となります。
では、スイッチの状態を表示してみましょう。
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の値が表示されるようになります。
const tessel = require('tessel');
const pin2 = tessel.port.A.pin[2];
pin2.on('change', function(v) { // 割り込みのコールバック定義(1)
console.log(v)
});
onメソッドで、割り込みのイベントが発生した場合のコールバックを定義しています(1)。なお、onメソッドで定義できるイベントは次のようになります。
| イベント | 状態 |
|---|---|
| change | 入力値が変化したとき |
| rise | 入力値が上昇したとき |
| fall | 入力値が下降したとき |
スイッチONでLEDを点灯する
最後に、スイッチONでLEDを点灯するコードを書いてみましょう。
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は点灯していませんが、スイッチを押すと点灯します。
最後に
今回は、Tessel 2にLEDとスイッチを接続してみました。次回は光センサーを接続して、アナログ入力を利用した回路を紹介する予定です。
参考資料
この記事は参考になりましたか?
既に会員の方はを行ってください。
- Tessel 2ではじめるセンサー電子工作入門連載記事一覧
-
- Tessel 2で赤外線センサーを使って、人感チャイムを作ってみよう
- Tessel 2に光センサーを接続してLEDを制御してみよう
- ブレットボードを使って、Tessel 2とスイッチやLEDを接続してみよう
- この記事の著者
-
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編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
