我们可以使用API将使用以太网或wifi屏蔽的arduino数据发送到RAILS服务器吗?如果可能的话,你能告诉我哪个库以及如何使用它?
答案 0 :(得分:2)
是的,您可以通过以太网或wifi屏蔽从Arduino调用RESTful API。我更喜欢使用标准库,例如Ethernet / Ethernet 2。
以下是一个示例(以太网)实现供您参考:
#include <Ethernet2.h>
#include <EthernetClient.h>
#include <EthernetUdp2.h>
#include <util.h>
IPAddress _ip(192, 168, 1, 12); // Client (Arduino) IP address
byte _mac[] = {0x90, 0xA2, 0xDA, 0x11, 0x3C, 0x69}; // Arduino mac address
char _server[] = "192.168.1.10"; // Server IP address
int _port = 9200; // Server port number
EthernetClient _client;
void setup() {
Ethernet.begin(_mac, _ip);
delay(1000);
Serial.print("Local IP: ");
Serial.println(Ethernet.localIP());
if (_client.connect(_server, _port)) {
Serial.println("SUCCESS: Connected to the server!");
} else {
Serial.println("ERROR: Connection failed to the server!");
return;
}
delay(1000);
}
void loop() {
// JSON formatted data package including sample
// 'temperature', 'humidity', and 'timestamp' values
String data = "{\"temperature\": " + String(temperature) + ", " +
"\"humidity\": " + String(humidity) + ", " +
"\"timestamp\": " + String(timestamp) + "}";
String url = "/my-api/savedata"; // API url hosted on the server
// Finally, make an API call: POST request
_client.print("POST " + url + " HTTP/1.1 \r\n" +
"Content-Type: application/json \r\n" +
"Content-Length: " + data.length() + " \r\n" +
"\r\n" + data);
delay(500); // Give the network some time
// Read all the lines of the reply from server and
// print them to Serial to validate your API call
while (_client.available()) {
String reply = _client.readStringUntil('\r');
Serial.print(reply);
}
Serial.println();
}