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 );
    }
  }
}