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);
以外にシンプルに書けました。