Raspberry Piでソフトウェア的なスイッチ(カチカチ押す方)を作るには

Raspberry PiのGPIO端子にスイッチ(ボタン等)を取り付けて、デバイスを制御することがあるかと思います。

ここではスイッチを取り付けるのが面倒なので物理的なスイッチの代わりに、Wi-Fiや有線LANで接続したスマートフォンやPCにスイッチを表示して、Raspberry PiにON/OFF信号を伝える方法を考えたいと思います。

Raspberry Piと制御用のスマートフォンの間でリアルタイムにデータのやり取りが行えるように、WebSocketを使った方法の一例を記録しておこうと思います。


Raspberry PiにWebSocketでソフトウェア的にスイッチON/OFFを伝える方法の例

使用するOS

OSはRaspbianを使用させて頂きました。今回はGPIOは使用しませんが、使用する環境を想定しています。

Raspbianの初期設定は、宜しければこちらの記事を御覧ください。

使用したRaspbianのイメージは「2018-10-09-raspbian-stretch.zip」になります。


Express.jsプロジェクト作成

スイッチ画面と信号のやり取りはNode.js+Express.jsを使用させて頂きました。

インストールとプロジェクトの作成は下記の手順になります。

  1. node.jsをインストールします。

  2. express-generatorをインストールします。

  3. expressコマンドでwsswitchプロジェクトを作成します。

  4. 動作確認のためデバッグ実行します。
  5. 他のPCからWebブラウザで次のURLにアクセスできるか確認しました。


wsインストール

WebSocketサーバはwsを使用させて頂きました。

  1. npmでwsをインストールしておきます。


ファイルの変更・作成

app.js変更

  1. app.jsを変更します。

    10行目付近の「var app = express();」の下に次の内容を追加します。

    WebSocketのサーバをTCPポート番号3001で起動する内容です。

views/index.ejs変更

  1. views/index.ejsを変更します。

    下記の内容にそっくり入れ替えます。

    ボタンの表示画面と、ボタンを押したときのWebSocketへの通信、そしてWebSocketから受信したデータを表示する内容になります。

ws-event-handler.js作成

  1. 最後にws-event-handler.jsファイルを作成します。

    下記の内容になります。

    WebScoketでスイッチが押された時に、Raspberry Piに何をさせるか、をここに記載するかたちになります。

以上でソフトウェア的なスイッチが完成しました。

プロジェクトをデバッグ実行します。

Webブラウザでアクセスしてみますと。

ボタン(ソフトウェア的なスイッチ)が5つ表示されます。ボタンを押すと、スマートフォン/PCからRaspberryPiへ、押されたボタンの名前(switch1)とイベント(mousedown)がデータとして送信されます。ボタンを離すと同様にmouseupが送信されます。

Raspberry Pi側は、9番で作成したws-event-handler.jsファイルのWsEventHandler.prototype.handleEvent関数でイベントを受け取ることができます。

ボタンON/OFFに対応するRaspberry Piに行わせたい処理を、この関数に書き足して使用するかたちになります。

Node.js(JavaScript)からPythonを呼び出すことも可能のようです。こちらの記事でも同様に、Express.jsからPythonのプログラムを実行しています。


本格的にNode.jsプロジェクトを編集する場合、Raspberry Pi本体で行うのではなく、WindowsやMac、LinuxのPCでVisual Studio Codeを使用する方法が効率的かと思います。

Node.jsのデバッグ実行につきましては、よろしければこちらの記事を御覧ください。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク