// Sample Arduino Json Web Server // Created by Benoit Blanchon. // Heavily inspired by "Web Server" from David A. Mellis and Tom Igoe #include #include #include 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) { // Use https://bblanchon.github.io/ArduinoJson/assistant/ to // compute the right size for the buffer StaticJsonBuffer<500> jsonBuffer; JsonObject& json = prepareResponse(jsonBuffer); writeResponse(client, json); } delay(1); client.stop(); } }