読者です 読者をやめる 読者になる 読者になる

みかづきブログ その3

3ヶ月つづけてみました。

ArduinoからPOSTでデータを送信してNode.jsで受け取る

f:id:kimizuka:20160704203254j:plain

arduino、ルーター、PCを上記のように繋いで、ArduinoのA0ピンの値をサーバにPOSTしサーバ側で値を読み取るサンプルです。

arduino

#include <SPI.h>
#include <Ethernet2.h>

// シールドのMACアドレス
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED // ここをEthernet Shieldに書いてあるMacアドレスに変更
};

// Arduinoの固定IP
IPAddress ip(192, 168, 1, 177) // ここを適当なIPアドレス(ルーター内で空いているもの)に変更

// PCのIPアドレス
char server[] = "192.168.1.178"; // ここを適当なIPアドレス(PCのIPアドレス)に変更

// クライアント
EthernetClient client;

// CdSの値
int val  = 0;

// 使用するピン
int iPin = A0;

// POSTする間隔
int INTERVAL = 500;

void setup() {
  Serial.begin(9600);

  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }

  delay(1000);
}

void loop() {
  val = analogRead(iPin);
  
  Serial.println(val);
  
  post(val);
  
  delay(INTERVAL);
}

bool post(int val) {
  String header = "POST /api/?val=";

  header += String(val);
  header += " HTTP/1.1";

  Serial.println("connecting...");

  if (client.connect(server, 3000)) {
    Serial.println("connected");
 
    client.println(header);
    client.println("Host: 192.168.1.178"); // PCのIPアドレス
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("User-Agent: Arduino Post Client");
    client.println("Connection: close");
    client.println();
    client.print("");
    client.stop();
    Serial.println("disconnecting.");
    
    return true;
  } else {
    Serial.println("connection failed");
   
    return false;
  }
}

main.js

"use strict";

var http = require("http"),
    url  = require("url"),
    server;

server = http.createServer(function (request, response) {
  request.on("end", function() {
    var urlObj;

    switch (request.method) {
      case "POST":
        urlObj = url.parse(request.url, true);

        switch (urlObj.pathname) {
          case "/api/":
            console.log(urlObj.query.val);
            response.end();
            break;
        }
        break;
    }
  }).resume();
}).listen(3000);

以外にシンプルに書けました。