Go Down

Topic: NodeMCU als Taster nutzen (Read 1 time) previous topic - next topic

noiasca

dein Sketch kompiliert nicht, daher kann man dir schwer helfen.
Signatur auf Pause

Beanos

Code: [Select]
#include <ESP8266WiFi.h>
 
const char* SSID = "";
const char* PSK = "";
 
WiFiServer server(80);
 
void setup() {
   digitalWrite(4, LOW);
  pinMode(4, OUTPUT);
  initWiFi();
}
   
void loop() {
  WiFiClient client = server.available();
  if(!client){
    return;
  }
 
  if(WiFi.status() != WL_CONNECTED){
    initWiFi();
  }
 
  String request = client.readStringUntil('\r');
  client.flush();
 
  if(request==""){
    client.stop();
    return;
  }
 
  //GPIOS schalten
  if(request.indexOf("mode=1")>=0){
    digitalWrite(4, LOW);
    delay(1000);
    digitalWrite(4, HIGH);
    delay(1000);
  }
 
  //Ausgabe erzeugen
  String output;
  output += "http/1.x 200 OK\n";
  output += "Content-Type: text/html; charset=UTF-8\n\n";
  output += "<!DOCTYPE HTML>";
  output += "<html>";
  output += "<h1>Gartentor</h1>";
  output += "<form action=\"\" method=\"GET\">";
  output += "<button name=\"mode\" value=\"1\">Öffnen/Schließen</button>";
  output += "<br><br>";
  output += "<button name=\"mode\" value=\"0\">AUS</button>";
  output += "</form>";
  output += "</html>";
 
  client.print(output);
   
  client.stop();
}
 
void initWiFi(){
  WiFi.begin(SSID, PSK);
 
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
  }
 
  server.begin();
}


So ist der komplette Code. Bei mir kompiliert er es.

postmaster-ino

Hi

Keine Lösung für Dich - aber definiere die Pins am Kopf des Sketch.
Im Momenta hast Du zweiunddreißig Mal '4' in Deinem Sketch stehen und meinst den Pin D2.
Diesen kannst Du oberhalb sogar als D2 definieren.
const byte dingbumspin=D2;

Im Sketch benutzt Du überall 'dingsbumspin' - vll. einen etwas sinnvolleren Namen ;)
So sind Anpassungen wesentlich einfacher und es ändert sich sogar ÜBERALL, wenn's halt geändert werden soll - und nicht nur an den Stellen, Die Du gerade gesehen hast.

... Gleiches für Alles Andere, was konstant und vom Benutzer/Programmierer einstellbar ist.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

noiasca

#18
Mar 13, 2019, 07:38 pm Last Edit: Mar 13, 2019, 07:51 pm by noiasca
das ding kompiliert, dafür kotzen sich alle meine Browser an und ich komm nicht drauf warum.

Was mir so auffällt: du hast vor und nach dem Schalten vom Relays ein Delay. imho brauchst du beim zurückschalten keins.

So, da ich bei deinem Code aufgeben muss, stell ich dir mal meinen rein, wie ich das machen würde.

Basiert auf ESP8266Webserver | Hello Server

Warum es so aussieht wie es aussieht, kannst du hier nachlesen wenn du mal 2h Zeit hast:
http://werner.rothschopf.net/201809_arduino_esp8266_server_client_0.htm

Das angefügte ZIP ist halt ohne webclient, dafür mit zwei "pulse" buttons.

Du musst dann einen "pulse" Output Pin ändern auf deinen Output Pin.

Spoiler:

Signatur auf Pause

Beanos

Danke dir für diese Dateien,
habe die Server.ino angepasst, leider reagiert die Fernbedienung darauf nicht.

Code: [Select]
  {
      Serial.println(F("D312 pulse output1 for a short period"));
      digitalWrite(4, LOW);                           // if relay is low active - otherwise switch to HIGH
      delay(pulseMs);
      digitalWrite(4, HIGH);
    }

noiasca

#20
Mar 13, 2019, 08:27 pm Last Edit: Mar 13, 2019, 08:28 pm by noiasca
du sollst die zentralen PIN-Definitionen auch auf Zeile 60 im ersten Tab machen - und nur dort:

Code: [Select]

const int BUTTON1_PIN = 0;            // GPIO00/D3 on NodeMCU is the Flash Button - use this for testing an input
const int OUTPUT1_PIN = 16;           // GPIO16/D0 on NodeMCU is a (red) LED on the NodeMCU Board - use this for testing the html switch
const int OUTPUT2_PIN = 2;            // GPIO02/D4 on NodeMCU is the (blue) LED on the ESP-12E
Signatur auf Pause

Beanos

#21
Mar 13, 2019, 08:30 pm Last Edit: Mar 13, 2019, 08:33 pm by Beanos
Ah siehste, ich bin dumm ;-) Aber danke dir für deine Ausdauer !

Könntest du mir noch sagen, wo die Einstellung für die blaue LED auf dem Node ist, also das die nicht leuchten soll wenn der z.B. neustartet ? Ansonsten finde ich die als Test super! Vielen Dank

noiasca

Signatur auf Pause

Beanos

#23
Mar 13, 2019, 08:53 pm Last Edit: Mar 13, 2019, 08:54 pm by Beanos
Leider blinkt die FB auch bei diesem Sketch wenn er neu startet ... schade . Wobei es scheinbar an der Fernbedienung liegt, da die auch blinkt wenn ich den Node vom Strom nehme.... sehr seltsam

Habe ich auch geändert:
void setup(void) {
 digitalWrite(OUTPUT1_PIN, LOW);
 digitalWrite(OUTPUT2_PIN, LOW);

leuchtet trotzdem . ich bin zu doof :-(

noiasca

ich hab das imho mit der eingebauten LED an 16 ausprobiert - da hat eigentlich nichts aufgeblitzt.

probier mal einen anderen Ausgang.

Sonst wenns gar nicht hilft, von hinten durchs Knie: Signallogik invertieren und mit Transistoren wieder umdrehen...
Signatur auf Pause

Beanos

#25
Mar 13, 2019, 09:25 pm Last Edit: Mar 13, 2019, 09:26 pm by Beanos
Jetzt geht's. Habe beide outputs auf high gestellt. Komisch. Kann ich die Weboberfläche noch mit einem Password schützen?

noiasca

dazu sollte es auch beispiele in der IDE geben.

Signatur auf Pause

Beanos

#27
Mar 14, 2019, 06:33 am Last Edit: Mar 14, 2019, 06:53 am by Beanos
Habe einige Lösungen gefunden, kann ich diesen Sketch in den vorhandenen Sketch von dir schreiben, oder muss das als zusätzlicher Sketch integriert werden?
Versuche ihn in die vorhandene Server Datei zu packen, schlugen erwartungsgemäß fehlt :-P


noiasca

Eigenartige Fragen du stellst.
Entweder du erweiterst meinen vorhandenen oder du erweiterst den anderen um den ESP8266Webserver.
Wie das funktioniert solltest du ja jetzt gesehen haben.

Wenn sich jemand ansehen soll warum etwas nicht klappt gilt:
- Quelle angeben woher man die Idee hat
- Source den man hat
- Was tut es/ Was tut es nicht.
Signatur auf Pause

Beanos

Hallo, ich wollte diesen Code integrieren:

Code: [Select]
/*
  Web Server

A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)

created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,2, 111);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

void setup() {
// Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void SendOKpage(EthernetClient &client)
{
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");       
          }
          client.println("</html>");
}


void SendAuthentificationpage(EthernetClient &client)
{
          client.println("HTTP/1.1 401 Authorization Required");
          client.println("WWW-Authenticate: Basic realm=\"Secure Area\"");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<HTML>  <HEAD>   <TITLE>Error</TITLE>");
          client.println(" </HEAD> <BODY><H1>401 Unauthorized.</H1></BODY> </HTML>");
}

char linebuf[80];
int charcount=0;
boolean authentificated=false;

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    memset(linebuf,0,sizeof(linebuf));
    charcount=0;
    authentificated=false;
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        linebuf[charcount]=c;
        if (charcount<sizeof(linebuf)-1) charcount++;
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          if (authentificated)
            SendOKpage(client);
          else
            SendAuthentificationpage(client); 
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
          if (strstr(linebuf,"Authorization: Basic")>0 && strstr(linebuf,"cGhwOm5laW4=")>0)
            authentificated=true;
          memset(linebuf,0,sizeof(linebuf));
          charcount=0;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}


Leider weiß ich nicht, wie man den in deinen Sketch integriert.

Go Up