Arduino 資料一覧

Node.jsでSocket.IOを使ってLEDをWebページから操作する

2017/1/14更新

対応バージョン: Node.js 4.2.6, Johnny-Five 0.10.6, Socket.IO 1.7.2

Node.jsでSocket.IOを使ってArduino UnoにつないだRGBフルカラーLED(OSTA5131A)(カソードコモン)をWebページから操作する。

Node.jsを動かす母艦はUbuntu 16.04とする。

Johnny-FiveのインストールやLED結線などの事前準備は以下を参照のこと。

関連資料・記事

Socket.IOインストール

まずSocket.IOをインストールする。Socket.IOはnpmを使って簡単にインストールできる。

% sudo npm install -g socket.io

ソース

次に以下のJavaScriptコードとHTMLを書きNode.jsで実行する。

socketio.js
var fs = require("fs");
var http = require("http");
var server = http.createServer();

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // Server
  server.on("request", function(req, res) {
    var stream = fs.createReadStream("index.html");
    res.writeHead(200, {
      "Content-Type": "text/html"
    });
    stream.pipe(res);
  });

  // Socket.IO
  var io = require("socket.io").listen(server);
  server.listen(8000);

  // LED
  var led = new five.Led.RGB({
    pins: {
      red: 6,
      green: 5,
      blue: 3
    }
  });

  // Control
  io.on("connection", function(socket) {
    socket.on("msg", function(color) {
      console.log(color);

      if (color == "off") {
        led.off();
      } else {
        led.color(color);
      }
    });
  });
});
index.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>arduino-socket.io</title>
  <script src="/socket.io/socket.io.js"></script>
  <script src="//code.jquery.com/jquery-2.1.3.min.js"></script>
</head>

<body>
  <form>
    <p>
      <input type="radio" name="color" value="red">RED</input>
      <input type="radio" name="color" value="green">GREEN</input>
      <input type="radio" name="color" value="blue">BLUE</input>
      <input type="radio" name="color" value="off">(OFF)</input>
    </p>
    <p>
      <input type="submit" value="submit" />
    </p>
  </form>

  <script type="text/javascript">
    var socket = io();
    $('form').submit(function() {
      socket.emit("msg", $("input[name=color]:checked").val());
      return false;
    });
  </script>
</body>
</html>
実行
% node socketio.js 
1484404749919 Device(s) /dev/ttyACM0  
1484404749927 Connected /dev/ttyACM0  
1484404753174 Repl Initialized  
>>
Webブラウザからアクセス

localhost:8000にアクセスし、ラジオボタンで色を指定してsubmitをクリックすると指定した色でLEDが点灯する。OFFを選ぶと消灯する。

関連資料・記事

参考サイト