- LiTime Speicher und Akkus         
Ergebnis 1 bis 5 von 5

Thema: NodeMCU L298N DC Motor MQTT

  1. #1

    Frage NodeMCU L298N DC Motor MQTT

    Anzeige

    Praxistest und DIY Projekte
    Hi,

    Ich würde gerne einen 12 V DC Motor über eine H Brücke steuern ( L289N).

    Code:
    // Gleichstrommotor 1
    
    int GSM1 = 3;
    int in1 = 4;
    int in2 = 5;
    
    void setup()
    {
      pinMode(GSM1, OUTPUT);    
      pinMode(in1, OUTPUT);
      pinMode(in2, OUTPUT);
      
    }
    void loop()
    {
      digitalWrite(in1, HIGH);  // Motor 1 beginnt zu rotieren
      digitalWrite(in2, LOW);
    
      analogWrite(GSM1, 200);   // Motor 1 soll mit der Geschwindigkeit "200" (max. 255) rotieren 
    
     
      delay(2000);
    
      digitalWrite(in1, LOW);   // Durch die Veränderung von HIGH auf LOW (bzw. LOW auf HIGH) wird die Richtung der Rotation verändert.
      digitalWrite(in2, HIGH);   
      delay(2000);
    
      digitalWrite(in1, LOW);   // Anschließend sollen die Motoren 2 Sekunden ruhen.
      digitalWrite(in2, LOW);  
    
      delay(2000);
    }
    Damit bekomm ich den Motor zum laufen das wars aber auch.

    Im Serial Monitor bekomm ich leider gar nichts angezeigt auf 115200 und auf 9600.
    Da fängts nämlich schon an den Motor zu steuern. Brauch nur an/aus/richtungswechsel
    Mein Ziel ist später den NodeMCU über MQTT aus dem IoBroker mit Alexa zu steuern. - Will damit die Klappe vom Futterautomat aufmachen.- Nicht unbedingt über Alexa kann auch automatisiert sein so das der Hund einmal am Tag was in den Napf bekommt.

    Wenn ich den normalen WebServer versuche zu installieren bekomme ich irgendwie auch kein Output im Serial Monitor.

    Versuch mich schon seit einigen Stunden. Leider bekomm ich es noch nicht hin mir aus den verschiedenen Sketchen die passenden Zeilen rauszusuchen.Hab erst vor kurzem mit nem Raspebrry angefangen. Nun ist NodeMCU bzw Ardunio an der Reihe da ich hier doch "einfacher" und günstiger bei meinen Projekten fahre.

    Danke für eure Hilfe!!

  2. #2
    HaWe
    Gast
    hallo,
    wo hast du denn Serial() initialisiert und gestartet?


    PS, edit:
    nur als Anmerkung, hat hiermit nichts direkt zu tun:
    du weißt aber schon, dass die GPIO Pins 4+5 standardmäßig für I2C verwendet werden?
    Code:
    D-pin  GPIO   default
    D1      5      SCL
    D2      4      SDA
    Geändert von HaWe (03.03.2019 um 11:38 Uhr)

  3. #3
    Ehmm 😅 also es läuft alles über Win 10 Arduino IDE. Wenn ich das Sketch hochgeladen habe, öffne ich hierrüber dann den Serial ()?
    War das, dass was du wissen wolltest 😅

    Okay, sollte man also ändern?
    Muss mir mal durchlesen was I2C ist

  4. #4
    HaWe
    Gast
    Zitat Zitat von Grace13 Beitrag anzeigen
    Ehmm �� also es läuft alles über Win 10 Arduino IDE. Wenn ich das Sketch hochgeladen habe, öffne ich hierrüber dann den Serial ()?
    War das, dass was du wissen wolltest ��

    Okay, sollte man also ändern?
    Muss mir mal durchlesen was I2C ist
    am besten, du machst erst mal ein wirklich gutes Standard-Tutorial für Arduino von Anfang bis Ende, wo du die Basics von der Pike auf lernst. Dir fehlt offenbar noch sehr viel Grundwissen, bevor es an ESP8266 geht, der sowieso eher etwas für Fortgeschrittene ist (nicht 100% Arduino-API-kompatibel).
    Für Serial() braucht man z.B. als allererstes Serial.begin(9600) oder Serial.begin(115200) etc.

  5. #5
    Zitat Zitat von HaWe Beitrag anzeigen
    am besten, du machst erst mal ein wirklich gutes Standard-Tutorial für Arduino von Anfang bis Ende, wo du die Basics von der Pike auf lernst. Dir fehlt offenbar noch sehr viel Grundwissen, bevor es an ESP8266 geht, der sowieso eher etwas für Fortgeschrittene ist (nicht 100% Arduino-API-kompatibel).
    Für Serial() braucht man z.B. als allererstes Serial.begin(9600) oder Serial.begin(115200) etc.
    habe ich mal etwas gemacht.

    Hab mal versucht ein sketch selber zu schreiben. Ist warscheinlich eher komplett in die Hose gefallen..

    Das Problem das ich habe ist das es ührsprünglich für die GPIO steuerung mittels MQTT gedacht ist. ( Mein gedanken Gang... der NodeMCU hat ja auch GPIOs hier habe ich beispielweise GPIO 5/16/4 gewählt. Da das Sketch ja schon mittels mqtt die GPIO steuern kann. Soweit sogut nun müsste ich ja nur den einen Pin für die Geschwindigkeit ergänzen "Motor_ena")
    Es werden warscheinlich ziemlich viele fehle drin sein, sry für das wirrwar..

    #
    Code:
    //
    #include <ArduinoJson.h>
    #include <EEPROM.h>
    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    
    
    #define TOKEN "ESP8266_DEMO_TOKEN"
    
    
    
    #define GPIO 5 // PIN D0
    #define GPIO 16 // PIN D1 
    #define GPIO 4 // PIN D2
    
    const char *ssid = "Wlan"; 
    const char *password = "SERVER PASSWORD"; 
    const char *mqtt_server = "hie rmuss der mosquitto server rein?"; 
    const char *device_id = "esp8266";
    
    int motor1_ena = 4;  // muss ich den jetzt auch als GPIO definieren?
    int motor1_in1 = 5;
    int motor1_in2 = 16;
    
    WiFiServer server(80);               // WLAN Verbindung wird über den Port80 hergestellt
    
    void setup() 
    { 
      
       pinMode( motor1_ena , OUTPUT);   // Geschwindigkeit 
       pinMode( motor1_in1 , OUTPUT);   // + oder - von motor
       pinMode( motor1_in2 , OUTPUT);   // - oder + von motor
    
       
    
        
         Serial.begin(115200);           // Das NodeMCU verwendet die Baudrate "115200" 
                                         // Diese Baudrate muss später im Seriellen Monitor eingestellt werden, damit wir die Aktionen des NodeMCU überwachen können
        
                                          
         Serial.println();
         Serial.print("Verbinde zu ");
         Serial.println(ssid);           // Kontrollelement im seriellen Monitor
         
    
         WiFi.begin(ssid,password);      // Die WLAN Verbindung wird, mit der oben definierten SSID und dem zugehörigen Passwort hergestellt
    
       
         while (WiFi.status() != WL_CONNECTED)  // Solange noch keine WLAN-Verbindung besteht....
         {
          delay(500);
          Serial.print(".");                    // ... sollen Punkte ausgegeben werden. Die Punkte dienen als Kontrollelement.
         }
         Serial.println(" ");
         Serial.println("WiFi verbunden");   // Kontrollelement im seriellen Monitor
    
         server.begin();                     // Das NodeMCU dient nun als Mini-Webserver, auf welchem wir Daten temporär speichern können
         
         Serial.println ("Webserver laeuft, warte auf ESP8266..."); // Kontrollelement im seriellen Monitor
    
         delay(10000);                       // An dieser Stelle geben wir dem ESP-Modul 10 Sekunden Zeit für die Initialisierung
         Serial.println();
         Serial.println("Die IP-Adresse des Webservers lautet ");
         Serial.println(WiFi.localIP());     // Nun wird die sogenannte localIP ausgegeben. Diese können wir später im Webbrowser aufrufen und die Temperaturwerte ablesen.
         {
         pinMode( motor1_ena , OUTPUT);
         pinMode( motor1_in1 , OUTPUT);
         pinMode( motor1_in2 , OUTPUT);
         delay(10);
         Init WiFi();
         client.setServer( thingsboardServer, 1883 );
         client.setCallback(on_message);
         
          
         
    }
    void loop() {
      if ( !client.connected() ) {
        reconnect();
      }
    
      client.loop();
    }
    
    // The callback for when a PUBLISH message is received from the server.
    void on_message(const char* topic, byte* payload, unsigned int length) {
    
      Serial.println("On message");
    
      char json[length + 1];
      strncpy (json, (char*)payload, length);
      json[length] = '\0';
    
      Serial.print("Topic: ");
      Serial.println(topic);
      Serial.print("Message: ");
      Serial.println(json);
    
      // Decode JSON request
      StaticJsonBuffer<200> jsonBuffer;
      JsonObject& data = jsonBuffer.parseObject((char*)json);
    
      if (!data.success())
      {
        Serial.println("parseObject() failed");
        return;
      }
    
      // Check request method
      String methodName = String((const char*)data["method"]);
    
      if (methodName.equals("getGpioStatus")) {
        // Reply with GPIO status
        String responseTopic = String(topic);
        responseTopic.replace("request", "response");
        client.publish(responseTopic.c_str(), get_gpio_status().c_str());
      } else if (methodName.equals("setGpioStatus")) {
        // Update GPIO status and reply
        set_gpio_status(data["params"]["pin"], data["params"]["enabled"]);
        String responseTopic = String(topic);
        responseTopic.replace("request", "response");
        client.publish(responseTopic.c_str(), get_gpio_status().c_str());
        client.publish("v1/devices/me/attributes", get_gpio_status().c_str());
      }
    }
    
    String get_gpio_status() {
      // Prepare gpios JSON payload string
      StaticJsonBuffer<200> jsonBuffer;
      JsonObject& data = jsonBuffer.createObject();
      data[String(GPIO0_PIN)] = gpioState[0] ? true : false;
      data[String(GPIO2_PIN)] = gpioState[1] ? true : false;
      char payload[256];
      data.printTo(payload, sizeof(payload));
      String strPayload = String(payload);
      Serial.print("Get gpio status: ");
      Serial.println(strPayload);
      return strPayload;
    }
    
    void set_gpio_status(int pin, boolean enabled) {
      if (pin == GPIO0_PIN) {
        // Output GPIOs state
        digitalWrite(GPIO0, enabled ? HIGH : LOW);
        // Update GPIOs state
        gpioState[0] = enabled;
      } else if (pin == GPIO2_PIN) {
        // Output GPIOs state
        digitalWrite(GPIO2, enabled ? HIGH : LOW);
        // Update GPIOs state
        gpioState[1] = enabled;
      }
    }
    
    void InitWiFi() {
      Serial.println("Connecting to AP ...");
      // attempt to connect to WiFi network
    
      WiFi.begin(WIFI_AP, WIFI_PASSWORD);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("Connected to AP");
    }
    
    
    void reconnect() {
      // Loop until we're reconnected
      while (!client.connected()) {
        status = WiFi.status();
        if ( status != WL_CONNECTED) {
          WiFi.begin(WIFI_AP, WIFI_PASSWORD);
          while (WiFi.status() != WL_CONNECTED) {
            delay(500);
            Serial.print(".");
          }
          Serial.println("Connected to AP");
        }
        Serial.print("Connecting to ThingsBoard node ...");
        // Attempt to connect (clientId, username, password)
        if ( client.connect("ESP8266 Device", TOKEN, NULL) ) {
          Serial.println( "[DONE]" );
          // Subscribing to receive RPC requests
          client.subscribe("v1/devices/me/rpc/request/+");
          // Sending current GPIO status
          Serial.println("Sending current GPIO status ...");
          client.publish("v1/devices/me/attributes", get_gpio_status().c_str());
        } else {
          Serial.print( "[FAILED] [ rc = " );
          Serial.print( client.state() );
          Serial.println( " : retrying in 5 seconds]" );
          // Wait 5 seconds before retrying
          delay( 5000 );
        }
      }
    }

Ähnliche Themen

  1. NodeMCU 1.0 e-ink und si7021
    Von Neuton23 im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 3
    Letzter Beitrag: 29.12.2018, 11:13
  2. nodeMCU an Arduino
    Von Moppi im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 16
    Letzter Beitrag: 14.10.2018, 10:30
  3. Motor für L298N gesucht --> Neuling
    Von Jonez MC im Forum Motoren
    Antworten: 9
    Letzter Beitrag: 12.10.2018, 10:45
  4. nodeMCU zu nodeMCU: keine Kommunikations-Verbindung mehr nach wenigen Minuten
    Von HaWe im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 0
    Letzter Beitrag: 02.10.2017, 15:01
  5. Problem mit PWM bei DC-Motor/RaspPi/l298n
    Von Brot24 im Forum Motoren
    Antworten: 10
    Letzter Beitrag: 28.08.2017, 08:14

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test