Keresés

Hirdetés

Új hozzászólás Aktív témák

  • vargalex

    félisten

    válasz Zoja™ #5765 üzenetére

    Igyekeztem teljesen dinamikusra írni. Azaz, a relék GPIO-it elegendő csak a pin_relays tömbbe felvenni, a többi (weboldalon a megfelelő gombok generálása, a kapcsolás) automatikusan történik a tömb alapján. A kód:

    #include <ESP8266WiFi.h>
    #include <WiFiClient.h>
    #include <ESP8266WebServer.h>

    #define DEFAULT_STATE LOW


    // Replace with your network credentials
    const char* ssid = "TP-Link";
    const char* password = "asdf1234";

    // GPIOs for controlling the relays
    uint8_t pin_relays[] = { D1, D2 };

    ESP8266WebServer server(80);

    // html page rendering
    void renderPage() {
    String webPage = "";
    String relay_state="";
    webPage = "<html><head><link rel=\"stylesheet\" href=\"https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css\">";
    webPage += "<script src=\"https://code.jquery.com/jquery-1.11.3.min.js\"></script>";
    webPage += "<script src=\"https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js\"></script></head>";
    webPage += "<body><h1>ESP8266 Relay Web Server</h1>";
    for (int relayIndex = 0; relayIndex<sizeof(pin_relays)/sizeof(uint8_t); relayIndex++) {
    relay_state="";
    if (digitalRead(pin_relays[relayIndex])) {
    relay_state="checked";
    }
    webPage += "<p>Relay #" + String(relayIndex) + " ( GPIO" + String(pin_relays[relayIndex]) + " ) <input type=\"checkbox\" " + relay_state + " data-role=\"flipswitch\" onchange=\"window.location.href='/?relay=" + String(relayIndex) + "'\"></p>";
    }
    server.send(200, "text/html", webPage);
    }

    // handling requests
    void handle_root() {
    if (server.hasArg("relay")) {
    int relayIndex = server.arg("relay").toInt();
    digitalWrite(pin_relays[relayIndex], !digitalRead(pin_relays[relayIndex]));
    Serial.print("Relay ");
    Serial.print(relayIndex);
    Serial.print(" state changed to ");
    Serial.println(digitalRead(pin_relays[relayIndex]));
    }
    renderPage();
    }

    void setup(void){
    // preparing GPIOs
    for (int relayIndex = 0; relayIndex<sizeof(pin_relays)/sizeof(uint8_t); relayIndex++) {
    pinMode(pin_relays[relayIndex], OUTPUT);
    digitalWrite(pin_relays[relayIndex], DEFAULT_STATE);
    }

    //Turn on serial output
    delay(1000);
    Serial.begin(115200);
    WiFi.begin(ssid, password);
    Serial.println("");

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

    // logging to serial output
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());

    // web server setup
    server.on("/", handle_root);
    server.begin();
    Serial.println("HTTP server started");
    }

    void loop(void){
    server.handleClient();
    }

    Látható, hogy a pin_relays tömb most 2 elemű, így a renderelt weboldal jelenleg így néz ki:

    Ahogy a setup függvényben látható, alapban alacsony állapotra húzza az érintett GPIO-kat. Persze ez a kiindulási állapot a DEFAULT_STATE-ban módosítható.

    [ Szerkesztve ]

    Alex

Új hozzászólás Aktív témák