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
Question ESP32 Daten per Bluetooth auf AppInventor App anzeigen mamo1234 2 156 23.05.2019 14:10
Letzter Beitrag: mamo1234
  ESP32 verbindet nicht mehr mit meiner Fritz Box spok1 12 305 21.05.2019 11:22
Letzter Beitrag: Hilgi
  MySQL mit ESP32 ohne PHP Waschbärbauch 8 689 02.05.2019 16:39
Letzter Beitrag: Tommy56
  ESP32 mittels Keypad-Interrupt aus Deepsleep aufwachen lassen jalu4601 1 438 19.04.2019 20:13
Letzter Beitrag: jalu4601
  ESP32 BIN von Arduino aufspielen Positiv 7 796 14.04.2019 18:13
Letzter Beitrag: Positiv
  ESP32 Batteriestatus Aredon 9 1.274 13.04.2019 21:44
Letzter Beitrag: Aredon
  ESP32 Cam Mafri 21 2.772 04.04.2019 08:36
Letzter Beitrag: Mafri
  ESP32 defekt tho.schmidt 13 1.930 30.03.2019 23:10
Letzter Beitrag: tho.schmidt
  ESP8266 / ESP32 und TCP Grave 2 802 21.03.2019 10:57
Letzter Beitrag: biologist
  ESP32 Ethernet shrimps 20 4.738 27.02.2019 15:12
Letzter Beitrag: ardu_arne

Gehe zu:


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