“JsonServer”的版本间的差异
来自YFRobotwiki
(以“ Json库 <pre> // Copyright Benoit Blanchon 2014-2016 // MIT License // // Arduino JSON library // https://github.com/bblanchon/ArduinoJson // If you like thi...”为内容创建页面) |
|||
第5行: | 第5行: | ||
<pre> | <pre> | ||
− | // | + | // Sample Arduino Json Web Server |
− | + | // Created by Benoit Blanchon. | |
− | + | // Heavily inspired by "Web Server" from David A. Mellis and Tom Igoe | |
− | + | ||
− | // | + | |
− | // | + | |
+ | #include <SPI.h> | ||
+ | #include <Ethernet.h> | ||
#include <ArduinoJson.h> | #include <ArduinoJson.h> | ||
− | + | byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; | |
+ | IPAddress ip(192, 168, 0, 177); | ||
+ | EthernetServer server(80); | ||
− | + | bool readRequest(EthernetClient& client) { | |
− | + | bool currentLineIsBlank = true; | |
− | + | while (client.connected()) { | |
− | + | if (client.available()) { | |
+ | char c = client.read(); | ||
+ | if (c == '\n' && currentLineIsBlank) { | ||
+ | return true; | ||
+ | } else if (c == '\n') { | ||
+ | currentLineIsBlank = true; | ||
+ | } else if (c != '\r') { | ||
+ | currentLineIsBlank = false; | ||
+ | } | ||
+ | } | ||
} | } | ||
+ | return false; | ||
+ | } | ||
− | + | JsonObject& prepareResponse(JsonBuffer& jsonBuffer) { | |
− | + | JsonObject& root = jsonBuffer.createObject(); | |
− | + | JsonArray& analogValues = root.createNestedArray("analog"); | |
− | + | for (int pin = 0; pin < 6; pin++) { | |
− | + | int value = analogRead(pin); | |
− | + | analogValues.add(value); | |
− | + | } | |
− | + | ||
− | + | JsonArray& digitalValues = root.createNestedArray("digital"); | |
− | + | for (int pin = 0; pin < 14; pin++) { | |
− | + | int value = digitalRead(pin); | |
+ | digitalValues.add(value); | ||
+ | } | ||
+ | |||
+ | return root; | ||
+ | } | ||
+ | |||
+ | void writeResponse(EthernetClient& client, JsonObject& json) { | ||
+ | client.println("HTTP/1.1 200 OK"); | ||
+ | client.println("Content-Type: application/json"); | ||
+ | client.println("Connection: close"); | ||
+ | client.println(); | ||
+ | |||
+ | json.prettyPrintTo(client); | ||
+ | } | ||
+ | |||
+ | void setup() { | ||
+ | Ethernet.begin(mac, ip); | ||
+ | server.begin(); | ||
} | } | ||
void loop() { | void loop() { | ||
− | + | EthernetClient client = server.available(); | |
+ | if (client) { | ||
+ | bool success = readRequest(client); | ||
+ | if (success) { | ||
+ | StaticJsonBuffer<500> jsonBuffer; | ||
+ | JsonObject& json = prepareResponse(jsonBuffer); | ||
+ | writeResponse(client, json); | ||
+ | } | ||
+ | delay(1); | ||
+ | client.stop(); | ||
+ | } | ||
} | } | ||
+ | |||
2016年8月22日 (一) 15:41的最后版本
// Sample Arduino Json Web Server // Created by Benoit Blanchon. // Heavily inspired by "Web Server" from David A. Mellis and Tom Igoe #include <SPI.h> #include <Ethernet.h> #include <ArduinoJson.h> byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IPAddress ip(192, 168, 0, 177); EthernetServer server(80); bool readRequest(EthernetClient& client) { bool currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (c == '\n' && currentLineIsBlank) { return true; } else if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } return false; } JsonObject& prepareResponse(JsonBuffer& jsonBuffer) { JsonObject& root = jsonBuffer.createObject(); JsonArray& analogValues = root.createNestedArray("analog"); for (int pin = 0; pin < 6; pin++) { int value = analogRead(pin); analogValues.add(value); } JsonArray& digitalValues = root.createNestedArray("digital"); for (int pin = 0; pin < 14; pin++) { int value = digitalRead(pin); digitalValues.add(value); } return root; } void writeResponse(EthernetClient& client, JsonObject& json) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: application/json"); client.println("Connection: close"); client.println(); json.prettyPrintTo(client); } void setup() { Ethernet.begin(mac, ip); server.begin(); } void loop() { EthernetClient client = server.available(); if (client) { bool success = readRequest(client); if (success) { StaticJsonBuffer<500> jsonBuffer; JsonObject& json = prepareResponse(jsonBuffer); writeResponse(client, json); } delay(1); client.stop(); } }
更多建议和问题欢迎反馈至 YFRobot论坛