ESP8266 D1 Mini - GPIO

Begonnen von Burny4600, 17 Juni 2023, 19:53:16

Vorheriges Thema - Nächstes Thema

Burny4600

Hat jemand einen ESP8266 D1 Mini mit Digitalausgängen konfiguriert oder eine Tipp wo es eine Anleitung für MQTT IOs gibt?
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Papa Romeo

Zitat von: Burny4600 am 17 Juni 2023, 19:53:16Hat jemand einen ESP8266 D1 Mini mit Digitalausgängen konfiguriert oder eine Tipp wo es eine Anleitung für MQTT IOs gibt?

... verstehe die Frage nicht ganz. Bis auf A0 sind alle GPIO´s des D1 Mini digitale Ein- oder Ausgänge.

LG
Papa Romeo
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Beta-User

Welche Firmware läuft auf dem ESP?

Wenn MQTT genutzt werden soll, würde ich Tasmota in den Ring schicken.....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

PotatoFritz

Also wenn z.B. auf dem ESP ein ESP-Easy läuft dann gibt es hier eine Beschreibung.
https://www.letscontrolit.com/wiki/index.php/ESPEasy_Command_Reference

Weiter unter https://www.letscontrolit.com/wiki/index.php?title=GPIO

Um einen GPIO dann per MQTT zu schalten hier exemplarisch anhand meines Bier-Kühlschranks:
defmod KUEHLSCHRANK MQTT_DEVICE KUEHLSCHRANK
attr KUEHLSCHRANK IODev mqtt
attr KUEHLSCHRANK alias KUEHLSCHRANK
attr KUEHLSCHRANK devStateIcon on:it_server@00FF00 off:it_server@red
attr KUEHLSCHRANK eventMap 1:on 0:off
attr KUEHLSCHRANK publishSet /ESP170/gpio/12
attr KUEHLSCHRANK room 00_GARAGE
attr KUEHLSCHRANK stateFormat Status
attr KUEHLSCHRANK subscribeReading_Status Sensor/1701
attr KUEHLSCHRANK webCmd on:off





Beta-User

Es gibt für ESPEasy auch Beispiele hier mit MQTT2_DEVICE. Auf die "alten" MQTT-Module sollte man m.E. heute nicht mehr setzen, wenn man in das Thema erst einsteigt.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

betateilchen

Und wenn man auf ESPeasy & Co. verzichten möchte, kann man sowas in ein paar Minuten selbst programmieren und auf den ESP übertragen, z.B. mit der Arduino IDE.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Burny4600

Ich bin noch auf der Suche, was ich als System für den ESP verwenden soll.
Da es sehr viel für MQTT gibt, möchte ich etwas Aktuelles verwenden.
Da Homematic nur mehr IP-Geräte anbietet, habe ich einen Systemwechsel auf MQTT vor.
Da ich mit Arduino IDE noch nicht vertraut bin, habe ich noch nichts Funktionsfähiges zusammengestellt.

Einige Tests habe ich zwar schon durchgeführt, aber keine Verbindung zum Raspberry herstellen können.
Hier ein Beispiel was ich gefunden habe und angepasst habe. Mit Arduino IDE habe ich auch auf einen ESP8266 D1 Mini den Download ohne Fehler geschafft.
#include <PubSubClient.h>
#include <ArduinoOTA.h>

#define wifi_ssid "mySsid"
#define wifi_password "myWifiPassword"
#define mqtt_server "myRaspberry"
#define mqtt_user "myUser"         
#define mqtt_password "myMqttPassword"
#define ESPHostname "ESP8266_MQTT_IO"
String clientId = "ESP8266-";     

#define outTopic "esp8266/outtopic"
#define inTopic "esp8266/intopic"
   
WiFiClient espClient; 
PubSubClient client(espClient); 

const int LEDPin = 4;     // der Output Pin wo das LED angehängt ist
const int buttonPin = 5;  // der Input Pin wo der Taster angehängt ist
int buttonState = 0;
int lastButtonState = 0;
   
void setup() { 
  Serial.begin(115200);
  setup_wifi();
  ArduinoOTA.setHostname(ESPHostname);
  // ArduinoOTA.setPassword("admin");
  ArduinoOTA.begin();
   
  client.setServer(mqtt_server, myRaspberryPort);
  client.setCallback(callback); 
  pinMode(LEDPin, OUTPUT);
  pinMode(buttonPin, INPUT);

   
void loop() { 
  if (!client.connected()) { 
    reconnect(); 
  }
  client.loop();
  ArduinoOTA.handle();
 
  buttonState = digitalRead(buttonPin);
  if (buttonState != lastButtonState) {
    if (buttonState == HIGH) {
      client.publish("esp8266/outtopic", "OFF");
      Serial.print("Changing Button to OFF\n");
      client.publish("esp32/intopic", "OFF");
    } else {
      client.publish("esp8266/outtopic", "ON");
      Serial.print("Changing Button to ON\n");
      client.publish("esp32/intopic", "ON");
    }
    // Kurze Pause zum entprellen
    delay(100);
  }
  lastButtonState = buttonState;
}   
   
void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(wifi_ssid);
  WiFi.begin(wifi_ssid, wifi_password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());


void callback(char* topic, byte* message, unsigned int length) {
  Serial.print("Message arrived on topic: ");
  Serial.print(topic);
  Serial.print(". Message: ");
  String messageTemp;
 
  for (int i = 0; i < length; i++) {
    Serial.print((char)message[i]);
    messageTemp += (char)message[i];
  }
  Serial.println();

  if (String(topic) == inTopic) {
    if(messageTemp == "ON"){
      Serial.print("Changing LED to ON\n");
      digitalWrite(LEDPin, HIGH);   //Invertiertes Signal
      client.publish(outTopic, "ON");
      delay(200);
    }
    else if(messageTemp == "OFF"){
      Serial.print("Changing LED to OFF\n");
      digitalWrite(LEDPin, LOW);  //Invertiertes Signal
      client.publish(outTopic, "OFF");
      delay(200);
    }
  }
}
     
 void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Create a random client ID
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    if (client.connect(clientId.c_str(), mqtt_user, mqtt_password)) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      client.publish(outTopic, ESPHostname);
      // ... and resubscribe
      client.subscribe(inTopic);
    } else {
        Serial.print("failed, rc=");
        Serial.print(client.state());
        Serial.println(" try again in 5 seconds");
        // Wait 5 seconds before retrying
        delay(5000);
      }
   }
}

Der ESP bekommt auch eine IP-Adresse vom DHCP-Server.
Nur habe ich schon das Problem, dass ich keine WiFi Verbindung herstellen kann.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

RalfRog

#7
Zitat von: Beta-User am 18 Juni 2023, 07:28:04Wenn MQTT genutzt werden soll, würde ich Tasmota in den Ring schicken.....

Je nachdem was man machen will ist es sinnvoll sich da einzuarbeiten. Tasmota läuft auch ziemlich stabil.
Habe mich für einen Stromzähler-Lesekopf am ESP auch mit Tasmota angefreundet ;)   auseinander gesetzt.

P.S.
Wenn man mit Sensoren arbeiten will  könnte ESPEasy vielleicht im Vorteil sein (sofern die HW unterstützt wird).
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

betateilchen

#8
Zitat von: Burny4600 am 18 Juni 2023, 18:30:57Der ESP bekommt auch eine IP-Adresse vom DHCP-Server.
Nur habe ich schon das Problem, dass ich keine WiFi Verbindung herstellen kann.

Naja, zum Einen ist es so, dass in Deinem Sketch nichts darauf hindeutet, dass Dein ESP einen (Web-)server bereitstellt, den Du erreichen könntest. Zum Zweiten stellt sich die Frage: Wozu willst Du das tun?

Dein ESP bezieht eine IP, meldet sich damit am MQTT Server an und schickt ein subscribe zu einem bestimmten topic.

Danach wartet der ESP einfach nur noch darauf, dass der MQTT Server ein "passendes" topic schickt.
Alternativ schickt der ESP ein publish, wenn Du den definierten Button drückst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Burny4600 am 18 Juni 2023, 18:30:57Da ich mit Arduino IDE noch nicht vertraut bin, habe ich noch nichts Funktionsfähiges zusammengestellt.
Einige Tests habe ich zwar schon durchgeführt, aber keine Verbindung zum Raspberry herstellen können.
Hier ein Beispiel was ich gefunden habe und angepasst habe. Mit Arduino IDE habe ich auch auf einen ESP8266 D1 Mini den Download ohne Fehler geschafft.

Das sind schonmmal gute Voraussetzungen.

Schau mal, ob Dir das hier für Dein Verständnis weiterhilft:

Kurzanleitung: ESP8266 mit MQTT an FHEM - selbstprogrammiert
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!