2016-11-06 2 views
0

Ich bin leise neu zu Arduino/ESP8266. Ich möchte ein einfaches Programm machen, um die eingebaute LED durch eine HTTP-Anfrage ein- und auszuschalten. Die HTTP-Anfrage funktioniert gut, auch die JSON-Deserialisierung. Ich komme zu den if Filialen, wo ich will (abhängig von GET Anfrage Antwort), aber die LED antwortet nicht. Das Problem ist, dass die LED ständig an ist. Fehle ich etwas Wichtiges? Ich habe versucht, im Internet zu suchen, aber ich habe nicht gefunden, was ich brauche.Arduino LED über Server ein-/ausschalten

Esp8266, NodeMCU 0,9

#include <ArduinoJson.h> 
#include <ESP8266WiFi.h> 

const char* ssid  = "SSID"; 
const char* password = "password"; 

const char* host = "host.com"; 
const char* streamId = "...................."; 
const char* privateKey = "...................."; 
StaticJsonBuffer<200> jsonBuffer; 

void setup() 
{ 
    Serial.begin(115200); 
    delay(10); 

    // Initialize LED, setting it to off 
    pinMode(LED_BUILTIN, OUTPUT); 
    digitalWrite(LED_BUILTIN, LOW); 

    // We start by connecting to a WiFi network 

    Serial.println(); 
    Serial.println(); 
    Serial.print("Connecting to "); 
    Serial.println(ssid); 

    WiFi.begin(ssid, password); 

    while (WiFi.status() != WL_CONNECTED) { 
     delay(500); 
     Serial.print("."); 
    } 

    Serial.println(""); 
    Serial.println("WiFi connected"); 
    Serial.println("IP address: "); 
    Serial.println(WiFi.localIP()); 
} 

int value = 0; 

void loop() 
{ 
    delay(2); 
    ++value; 

    Serial.print("connecting to "); 
    Serial.println(host); 

    // Use WiFiClient class to create TCP connections 
    WiFiClient client; 
    const int httpPort = 80; 
    if (!client.connect(host, httpPort)) { 
     Serial.println("connection failed"); 
     return; 
    } 

    String url = "/hrnem-brnem-api/index.php/entries/127"; 

    Serial.print("Requesting URL: "); 
    Serial.println(url); 

    // This will send the request to the server 
    client.print(String("GET ") + url + " HTTP/1.1\r\n" + 
       "Host: " + host + "\r\n" + 
       "Connection: close\r\n\r\n"); 
    unsigned long timeout = millis(); 
    while (client.available() == 0) { 
     if (millis() - timeout > 5000) { 
      Serial.println(">>> Client Timeout !"); 
      client.stop(); 
      return; 
     } 
    } 

    String line; 
    // Read all the lines of the reply from server and print them to Serial 
    while (client.available()) { 
     line = client.readStringUntil('\r'); 
     Serial.print(line); 
    } 

    JsonObject& root = jsonBuffer.parseObject(line); 

    int value = root["value"]; 

    Serial.print(value); 
    if (value == 1) { 
     // turn LED on: 
     Serial.print("LED is ON."); 
     digitalWrite(LED_BUILTIN, HIGH); 
    } 
    else { 
     // turn LED off: 
     Serial.print("LED is OFF."); 
     digitalWrite(LED_BUILTIN, LOW); 
    } 

    Serial.println(); 
    Serial.println("closing connection"); 
} 
+0

Also nur zu klären, sind Sie beiden Nachrichten zu sehen - "LED ON" und "LED OFF" im seriellen Monitor gedruckt, abhängig von der abgerufenen JSON Antwort? – enhzflep

Antwort

0

So yo braucht Ihr gesammeltes JSON-Attribut werfen es sinnvoll und vergleichbar zu machen. diesen

Verwendung:

int value = root["value"].as<int>();