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
  ESP8266 / ESP32 und TCP Grave 2 233 21.03.2019 10:57
Letzter Beitrag: biologist
  ESP32 Ethernet shrimps 20 2.676 27.02.2019 15:12
Letzter Beitrag: ardu_arne
  ESP32 Wroom Partitionstabelle? Frosch 6 988 29.01.2019 10:26
Letzter Beitrag: Frosch
  ESP32 mit Wifi Positiv 8 1.545 15.01.2019 11:36
Letzter Beitrag: Tommy56
  ESP32 v1.0.1 amithlon 1 609 12.01.2019 23:16
Letzter Beitrag: Fips
  ESP32 Deepsleep und FRITZ!Box 7590 WiFi probleme. MeisterQ 42 6.471 08.01.2019 09:33
Letzter Beitrag: Hoffmakl
  Eqiva EQ3-Bluetooth Heizungsthermostat ESP32 MeisterQ 3 990 07.01.2019 08:51
Letzter Beitrag: amithlon
  Esp32 1.0.0 geändert ?? Fips 4 863 29.12.2018 08:04
Letzter Beitrag: Fips
  Suche Programmierer für ESP32-Projekt rychard 12 2.243 11.12.2018 15:58
Letzter Beitrag: Tommy56
  ESP32 (AzureIoT + BLE in keine Header-Dateien) ChrisL 7 1.277 01.12.2018 13:45
Letzter Beitrag: ChrisL

Gehe zu:


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