Arduinoをブラウザから動かす

前回、Node.jsでLチカを実現しました。

Node.js→Arduinoがうまくいけば、ブラウザ(HTML)→Node.jsは、何とかなるような気がします。

Node.js+Express+socket.io

Node.jsを使うとき、無理せずフレームワークのExpressをセットで使います。

そして、サーバーとクライアントの双方向リアルタイム通信を実現したいときは、socket.ioモジュールを使わせて頂きます。

いきなりArduinoでNode.jsを導入より、定番のリアルタイムチャット開発を通じてNode.jsを学んだ方が、理解しやすかもしれません。

ディレクトリ構成

前回からの続きで、Cドライブ直下の「node-arduino」というディレクトリ内で開発を進めます。

「htdocs」というディレクトリを新たに作り、index.htmlを作ります。

ブラウザ側のスイッチを作る

index.htmlは、ブラウザでLEDの点灯を制御する画面です。

ブラウザに表示されるスイッチを押すと、ArduinoにつながれたLEDが光ります。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Arduinoをブラウザ操作</title>
<script src="/socket.io/socket.io.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<style>
 body {
  padding-top: 500px;
  background: #000;
  text-align: center;
 }
 button {
  padding: 20px 40px;
  border-bottom: #999 solid 20px;
  border-radius: 15px;
  background: #EEE;
  font-size: 100px;
 }
 button.on {
  margin-top: 15px;
  border-bottom: #095E13 solid 5px;
  background: #3C9053;
  color: #FFF;
 }
</style>
</head>
<body>
<button id="ledBtn">LED点灯</button>
<script type="text/javascript">
 var socket = io(),
 $ledBtn = $("#ledBtn"),
 ledSwitch = false,
 SWITCH_CLASS = "on";
 
 $ledBtn.on("click", function(){
  if(ledSwitch === false){
   ledSwitch = true;
   $(this).addClass(SWITCH_CLASS);
  }else{
   ledSwitch = false;
   $(this).removeClass(SWITCH_CLASS);
  }
  socket.emit('led', ledSwitch);
 });
</script>
</body>
</html>

LEDが点灯中は、ブラウザ上のスイッチも緑色になります。

サーバー側のスクリプトを書く

サーバ―側のapp.jsでは、サーバーの起動および、ブラウザからの命令を受け取り、Arduinoに命令を出すためのコードを書きます。

var express = require('express'),
 app = express(),
 http = require('http').Server(app),
 port = 3000,
 io = require('socket.io')(http),
 five = require("johnny-five"),
 board = new five.Board(),
 led,
 
server = function(){
 app.use(express.static('htdocs'));
 http.listen(port,function(){
  console.log("Expressサーバーがポート%dで起動しました。モード:%s",port,app.settings.env);
 });
};

board.on("ready", function() {
 server();
 led = new five.Led(13),
 io.on('connection', function(socket) {
  socket.on('led', function(data) {
   if (data === true) {
    led.on();   
   } else {
    led.off();
   }
  });
 });
});

前回の再掲載となりますが、回路は13番にLEDがつながっている単純な構成です。

LEDをブラウザから点灯!

準備が整いました。

コマンドプロントの「node app.js」で、サーバーを起動します。

ブラウザのアドレスバーに「http://localhost:3000/」と打ち、index.htmlを表示させます。

LED点灯ボタンが出てきます。

ボタンをクリック!

ブラウザのボタンも緑、LEDも緑に点灯しました。

すばらしい連動性です。

GIFアニメも掲載します。

これくらいのことだと、socket.ioが必要なかった気がしますが・・・次回はもっと双方向な構築で、socket.ioも活躍します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)