mirror of https://github.com/arendst/Tasmota.git
77 lines
1.9 KiB
C++
77 lines
1.9 KiB
C++
// Sample Arduino Json Web Server
|
|
// Created by Benoit Blanchon.
|
|
// Heavily inspired by "Web Server" from David A. Mellis and Tom Igoe
|
|
|
|
#include <ArduinoJson.h>
|
|
#include <Ethernet.h>
|
|
#include <SPI.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) {
|
|
// 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();
|
|
}
|
|
}
|