Arduino Due✖️Ethernet shield2をつかってNode.js✖️ExpressでAPIをたたく
はじめに
最近は、ESP32でWiFi通信をして何か作ってばかりです。
そういえば有線LANにつないでインターネット接続したことがあまりありませんでした。
なので、有線LANをつなぎNode.jsとExpressをつかったAPIをArduino Dueからたたいてみます。
必要なもの、環境
- Arduino Due(Ethernet shield2がつかえれば良いのArduino Unoでも構いません)
- Ethernet shield2
- Node.js (v12.13.0)
- Express
プログラム
Node.js側のプログラム
Node.js側のプログラム
node.jsをインストールしている前提です。
適当なディレクトリに下記を実行します。そしてプログラムはindex.jsに書きます。
npm init
npm i express
touch index.js
var express = require('express');
const bodyParser = require('body-parser');
var http = require("http"),
url = require("url"),
server;
var app = express();
app.use(express.json());
const port = process.env.PORT || 3200;
app.listen(port, () => console.log(`Listening on port ${port}...`));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get('/', (req, res) => {
res.setHeader('Content-Type', 'text/plain');
res.json("Hello World !!");
//res.sendStatus(200);
});
app.post('/api', (req, res) => {
//Arduinoからの送られたデータvalをコンソール画面に表示する
console.log(req.query.val);
res.setHeader('Content-Type', 'text/plain');
res.json("Hello");
//res.sendStatus(200);
});
Arduino側のプログラム
#include <SPI.h>
#include <Ethernet2.h>
// Arduino Due : SerialUSB
// Arduino Uno : Serial
// 参考
// https://www.arduino.cc/reference/en/language/functions/communication/serial/
#define SERIAL SerialUSB
// Ethernet shield2のMACアドレス
// シールドの裏面に記載してある番号の前に0xをつける
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
// Arduinoの固定IP
// ここを適当なIPアドレス(ルーター内で空いているもの)に変更
IPAddress ip(192, 168, 1, 177);
// PCのIPアドレスを入力
char server[] = "192.168.11.66";
// クライアント
EthernetClient client;
int val = 0;
// POSTする間隔
int INTERVAL = 500;
bool post(int val) {
//データを送るのでメソッドはPOST
String header = "POST /api/?val=";
header += String(val);
header += " HTTP/1.1";
SERIAL.println("connecting...");
//今回は3200番のポート番号を使った
if (client.connect(server, 3200)) {
SERIAL.println("connected");
client.println(header);
client.println("Host: 192.168.11.66");
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;
}
}
void setup() {
SERIAL.begin(115200);
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 = random(255);
SERIAL.println(val);
//ランダムな数をPOST
post(val);
delay(INTERVAL);
}
動作確認
Node.jsのindex.jsを
node index.js
で動作させ、Arduino Dueにプログラムを書き込み電源をいれれば、コンソール画面にランダムな数がPOSTされます。
所感
POSTだけでなくGETや他のメソッドも簡単に実装できそうです。
参考
Author And Source
この問題について(Arduino Due✖️Ethernet shield2をつかってNode.js✖️ExpressでAPIをたたく), 我々は、より多くの情報をここで見つけました https://qiita.com/minwinmin/items/58c177f76a837c7337f9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .