INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
esp32 Schrittmotor mit Webgui
11.03.2019, 11:28
Beitrag #1
esp32 Schrittmotor mit Webgui
hi,
folgendes Ziel: Eine kleine Holztür mit Schrittmotor öffnen und schließen, Steuerung via Webgui. Der Schrittmotor läuft recht langsam, die Tür braucht mehrere Minuten zum Öffnen resp. Schließen. Soweit so gut.
Problem: Während der Laufzeit reagiert das Webinterface nicht. Problem 1: Kein Status, Problem 2: Drehrichtung kann nicht geändert werden, auch ein Stoppen wäre nicht möglich.

Bisher lief das Webinterface in der main-loop, jetzt habe ich eine Bibliothek zum asynchronen Aufruf gefunden (espasynctcp). Damit kann ich schön auf URL-Aufrufe reagieren.

Meine Frage: Wenn ich nun per Web-Aufruf den Schrittmotor starte für 1 Minute, reagiert der Arduino in der Zeit auf andere Webaufrufe?

astrakid
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2019, 11:50 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2019 12:04 von Fips.)
Beitrag #2
RE: esp32 Schrittmotor mit Webgui
(11.03.2019 11:28)astrakid schrieb:  Problem: Während der Laufzeit reagiert das Webinterface nicht. Problem 1: Kein Status, Problem 2: Drehrichtung kann nicht geändert werden, auch ein Stoppen wäre nicht möglich.

Da scheint ein Fehler in Zeile 42 zu sein.


(11.03.2019 11:28)astrakid schrieb:  Meine Frage: Wenn ich nun per Web-Aufruf den Schrittmotor starte für 1 Minute, reagiert der Arduino in der Zeit auf andere Webaufrufe?

Ein Esp32 ist kein Arduino.

Deine Frage musst du dir selbst beantworten, denn nur du siehst momentan, ob der geheime Sketch in einer for Schleife gefangen ist!

PS.: Eigentlich wollte ich meine Antwort geheim halten!

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2019, 20:33
Beitrag #3
RE: esp32 Schrittmotor mit Webgui
Zitat:Da scheint ein Fehler in Zeile 42 zu sein.
völlig richtig. :-D sorry, du hast absolut recht. code folgt weiter unten.

Zitat:Ein Esp32 ist kein Arduino.
auch richtig. sorry, dadurch, dass ich meinen esp32 bisher mit der arduino ide programmiert habe, habe ich das synonym verwandt - und das ist halt sehr undifferenziert.

Zitat:PS.: Eigentlich wollte ich meine Antwort geheim halten!
ich hab es verstanden. ;-)

hier der code:
Code:
#include <WiFi.h>
#include <HTTPClient.h>
// define Taster 14
#define LED_BUILTIN 2

HTTPClient http;

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

const int motorPin1 = 16;  // Sonstwas Blue   - In 1
const int motorPin2 = 5;  // Pink   - In 2
const int motorPin3 = 4; // Yellow - In 3
const int motorPin4 = 0; // Orange - In 4

const int endaufPin = 25;
const int endzuPin = 15;
int endaufState = 0;
int endzuState = 0;

const int umdrehungen = 1024;
unsigned int lowSpeed  = 10000; // Notabene: nicht über 16000
unsigned int highSpeed =  1200;

IPAddress ip(192, 168, 2, 11);
IPAddress dns(192, 168, 1, 2);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 252, 0);

WiFiServer server(80);

void setup()
{
  Serial.begin(115200);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(endaufPin, INPUT_PULLUP);
  pinMode(endzuPin, INPUT);

  Serial.println("los gehts");

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

  connectWiFi();
  server.begin();
  Serial.println("Server started");
  stop();
  rechtsrum(highSpeed);
  stop();
  linksrum(highSpeed);
  stop();
}

void loop()
{

WiFiClient client = server.available();
  if (!client) {
//    Serial.println("!client");
    return;
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();

  endzuState = digitalRead(endzuPin);
  Serial.println(endzuState);
  if (request.indexOf("/TUER=ZU") != -1 and (endzuState != 1)) {
    Serial.println("Schliesse Tuer.");
    stop();
    int i=1;
    while(i<umdrehungen){
      linksrum(highSpeed);
      i++;
    endzuState = digitalRead(endzuPin);
    endaufState = digitalRead(endaufPin);
    }
    stop();
  }
  if (request.indexOf("/TUER=AUF") != -1 and (endaufState != 1)){
    //digitalWrite(ledPin, LOW);
    Serial.println("Oeffne Tuer.");
    stop();
    int i=1;
    while(i<umdrehungen){
    rechtsrum(highSpeed);
    i++;
    endaufState = digitalRead(endaufPin);
    Serial.print("endaufState ist ");
    Serial.println(endaufState);
     // abbruchbedingung einbauen!
      if (endaufState == 1 or endzuState == 1){
      i=99999;
      }

    }
    stop();
  }
  
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("<!DOCTYPE HTML>");
  client.println("<html>");

  client.print("Led pin is now: ");

//  if(value == HIGH) {
//    client.print("On");  
//  } else {
//    client.print("Off");
//  }
  client.println("<br><br>");
  client.println("Click <a href=\"/TUER=ZU\">here</a> Huehnertuer schliessen<br>");
  client.println("Click <a href=\"/TUER=AUF\">here</a> Huehnertur oeffnen<br>");
  client.println("</html>");

  delay(1000);
  Serial.println("Client disconnected");
  Serial.println("");
    
stop();
}

/***************************************************
* Connecting to a WiFi network
****************************************************/
void connectWiFi(void)
{
  int timeout=10000;
  int wifidelay=200;
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  //WiFi.config(ip);
  WiFi.config(ip, gateway, subnet, dns);
  WiFi.begin(ssid, password);
  String wlanConnecting;
  wlanConnecting=".";
  while (WiFi.status() != WL_CONNECTED)
  {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(wifidelay);
    //Serial.print(".");
    digitalWrite(LED_BUILTIN, LOW);
    delay(wifidelay);
    timeout=timeout-wifidelay;
    Serial.println("timeout: ");
    Serial.println(timeout);
    if(timeout<=0){
      ESP.restart();
    }
  wlanConnecting+=".";
  }
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void rechtsrum(unsigned int motorSpeed)
{ // 1
  digitalWrite(motorPin4, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin1, LOW);
  delayMicroseconds(motorSpeed);

  // 2
  digitalWrite(motorPin4, HIGH);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin1, LOW);
  delayMicroseconds(motorSpeed);

  // 3
  digitalWrite(motorPin4, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin1, LOW);
  delayMicroseconds(motorSpeed);

  // 4
  digitalWrite(motorPin4, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin1, LOW);
  delayMicroseconds(motorSpeed);

  // 5
  digitalWrite(motorPin4, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin1, LOW);
  delayMicroseconds(motorSpeed);

  // 6
  digitalWrite(motorPin4, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin1, HIGH);
  delayMicroseconds(motorSpeed);

  // 7
  digitalWrite(motorPin4, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin1, HIGH);
  delayMicroseconds(motorSpeed);

  // 8
  digitalWrite(motorPin4, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin1, HIGH);
  delayMicroseconds(motorSpeed);
}

void linksrum(unsigned int motorSpeed)
{ // 1
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delayMicroseconds(motorSpeed);

  // 2
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delayMicroseconds(motorSpeed);

  // 3
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delayMicroseconds(motorSpeed);

  // 4
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delayMicroseconds(motorSpeed);

  // 5
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delayMicroseconds(motorSpeed);

  // 6
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, HIGH);
  delayMicroseconds(motorSpeed);

  // 7
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delayMicroseconds(motorSpeed);

  // 8
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delayMicroseconds(motorSpeed);
}

void stop()
{ digitalWrite(motorPin4, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin1, LOW);
  endzuState=0;
  endaufState=0;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2019, 23:04
Beitrag #4
RE: esp32 Schrittmotor mit Webgui
(11.03.2019 11:28)astrakid schrieb:  Meine Frage: Wenn ich nun per Web-Aufruf den Schrittmotor starte für 1 Minute, reagiert der Arduino in der Zeit auf andere Webaufrufe?

So lange der Sketch in der while Schleife gefangen ist, nein.

Da ich noch nie was mit Schrittmotoren gemacht habe kann ich dir nicht sagen ob es ausreichend Zeit nebenher für Wlan Kommunikation gibt wenn du den Schrittmotor mit If Abfragen und der millis() Funktion bewegst.

Beispiele um zwei Schrittmotoren gleichzeitig mit If Abfragen und der millis() Funktion zu bewegen sollten sich im Forum finden lassen.

Wenn du die Ansteuerung des Motors dahin umgebaut hast kannst du selber testen ob die frei gewordene Rechenzeit für Wlan Kommunikation ausreicht.

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.03.2019, 19:15
Beitrag #5
RE: esp32 Schrittmotor mit Webgui
(11.03.2019 23:04)Fips schrieb:  Beispiele um zwei Schrittmotoren gleichzeitig mit If Abfragen und der millis() Funktion zu bewegen sollten sich im Forum finden lassen.

Wenn du die Ansteuerung des Motors dahin umgebaut hast kannst du selber testen ob die frei gewordene Rechenzeit für Wlan Kommunikation ausreicht.

Gruß Fips

perfekt, danke für die hinweise und die stichpunkte. jetzt habe ich verstanden, wie ich das zu verstehen habe!!!! vielen dank.
werde mich dann mal in den nächsten tagen daran begeben und vermutlich nachher wieder mit konkreten fragen hier auftauchen. Wink

gruß,
andre
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.03.2019, 19:44
Beitrag #6
RE: esp32 Schrittmotor mit Webgui
(12.03.2019 19:15)astrakid schrieb:  perfekt, danke für die hinweise und die stichpunkte. jetzt habe ich verstanden, wie ich das zu verstehen habe!!!! vielen dank.
werde mich dann mal in den nächsten tagen daran begeben und vermutlich nachher wieder mit konkreten fragen hier auftauchen. Wink

gruß,
andre

Freut mich, das ich dir bis hier hin helfen konnte.
Ging mir anfangs genau so.
Ohne die richtigen Stichworte und/oder Fachbegriffe ist die Suche doppelt schwer!

Es gibt hier im Forum Mitglieder die sich gut mit den Motoren auskennen.
Und andere die sich mit Netzwerk Kommunikation beschäftigen.

Damit will ich sagen du musst beides strikt trennen.
Du musst es so Programmieren das beide Teile unabhängig voneinander und blockierungsfrei funktionieren!

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP32 - Schreibzyklen im RTC RAM Hoffmakl 3 104 Heute 08:13
Letzter Beitrag: Tommy56
  ESP32-CAM Projekt MINICAM Maico 10 650 19.08.2019 17:15
Letzter Beitrag: Maico
  Debug mit Telnet ESP8266 (und ESP32 ungetestet)) Tommy56 3 3.778 12.08.2019 14:49
Letzter Beitrag: Tommy56
  ESP32 mit MAX7219 --> Programmlogik, ich verstehe es nicht... tho.schmidt 4 380 10.08.2019 16:43
Letzter Beitrag: Fips
  ESP32 MQTT Ausfall nach 201 Minuten Jan Hirt 9 989 06.08.2019 18:31
Letzter Beitrag: Tommy56
  ESP32 Hostname für die Anzeige im Router ändern Tommy Rakete 4 833 17.07.2019 21:42
Letzter Beitrag: Tommy56
  ESP32 Devboard mit Laderegler? markusw129 4 654 14.07.2019 17:33
Letzter Beitrag: Tommy56
  ESP32 Analog Wert am Spannungsteiler ungenau vs Arduino Analog Wert Nick2245 1 657 16.06.2019 09:01
Letzter Beitrag: Fips
  ESP32: U8x8 und SoftwareSerial gleichzeitig markusw129 2 648 15.06.2019 12:06
Letzter Beitrag: markusw129
  ESP32 Webserver download mehrerer Dateien Eisvogel 1 376 11.06.2019 10:42
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste