ich möchte mit meinem ESP32 meine unidirektionalen Elero Rolläden über OpenHab steuern. Die Schalter des Handsenders gehen direkt auf die GPIOs vom ESP32.
Programmiert ist der ESP32 mit folgendem Code
Code: Alles auswählen
#include <WiFi.h>
#include <Wire.h>
#include <PubSubClient.h>
#include <String.h>
#define LED1 2
const char* ssid = "XXXXXXX";
const char* password = "XXXXXXX";
const char* MQTT_HOST = "XXX.X.X.XXX";
const char* MQTT_USER = "XXXXXXXXX";
const char* MQTT_PWD = "XXXXXXX";
const int MQTT_PORT = 1883;
const char* MQTT_CLIENT_ID = "XXXXXXXX_9132_Rollo";
const char* MQTT_Topic = "/XXXXXXX/Rollo/#";
const char* MQTT_Topic_Alle = "/XXXXXXX/Rollo/Alle/set";
const char* MQTT_Topic_Christoph_Tuer = "/XXXXXXXX/Rollo/Christoph_Tuer/set";
const char* MQTT_Topic_Christoph_Fenster = "/XXXXXXX/Rollo/Christoph_Fenster/set";
const char* MQTT_Topic_Isabella_Tuer = "/XXXXXXX/Rollo/Isabella_Tuer/set";
const char* MQTT_Topic_Isabella_Fenster = "/XXXXXX/Rollo/Isabella_Fenster/set";
const char* MQTT_Topic_Buero_Fenster = "/XXXXXXXX/Rollo/Buero_Fenster/set";
const int upPin = 22; // D2
const int stopPin = 19; // D3
const int downPin = 18; // D4
WiFiClient net;
PubSubClient client(net);
void setup()
{
Serial.begin(115200);
WIFI_connect();
client.setServer(MQTT_HOST, MQTT_PORT);
client.setCallback(MQTT_callback);
pinMode(LED1, OUTPUT);
pinMode(upPin, OUTPUT);
pinMode(stopPin, OUTPUT);
pinMode(downPin, OUTPUT);
digitalWrite(LED1, HIGH);
digitalWrite(upPin, HIGH);
digitalWrite(stopPin, HIGH);
digitalWrite(downPin, HIGH);
}
void loop() {
if (!client.connected()) {
MQTT_connect();
}
client.loop();
}
void pressUp()
{
Serial.print("Do Keypress UP...");
digitalWrite(upPin, HIGH);
delay(50);
digitalWrite(upPin, LOW);
delay(300);
digitalWrite(upPin, HIGH);
Serial.println("...done!");
}
void pressStop()
{
Serial.print("Do Keypress Stop...");
digitalWrite(stopPin, HIGH);
delay(50);
digitalWrite(stopPin, LOW);
delay(300);
digitalWrite(stopPin, HIGH);
Serial.println("...done!");
}
void pressDown()
{
Serial.print("Do Keypress Down...");
digitalWrite(downPin, HIGH);
delay(50);
digitalWrite(downPin, LOW);
delay(300);
digitalWrite(downPin, HIGH);
Serial.println("...done!");
}
void pressChannel()
{
Serial.print("Do Keypress Channel...");
digitalWrite(selPin, HIGH);
delay(50);
digitalWrite(selPin, LOW);
delay(300);
digitalWrite(selPin, HIGH);
Serial.println("...done!");
}
void WIFI_connect(void) {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, 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 MQTT_connect(void) {
int retry = 0;
// FIRE UP MQTT
// Loop until we're reconnected
while (!client.connected() && (retry < 5)) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PWD)) {
Serial.println("connected");
client.subscribe(MQTT_Topic);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 60 seconds before retrying
delay(10000);
}
retry=retry+1;
}
}
void MQTT_Publish(const char* topic, float value)
{
char payload[8];
// build up MQTT Connection
if (!client.connected()) {
MQTT_connect();
}
client.loop();
if(value != -100)
{
dtostrf (value, -6,2, payload);
client.publish(topic, payload);
Serial.print(topic);
Serial.print("\t\t");
Serial.println(value);
}
else
{
Serial.print(topic);
Serial.print("\t\t");
Serial.println("invalid value; stopped publishing");
}
}
void MQTT_callback(char* topic, byte* payload, unsigned int length)
{
char msg[length];
String strTopic(topic);
Serial.print("Message arrived [");
Serial.print(topic);
Serial.println("] ");
for (int i = 0; i < length; i++) {
msg[i] = (char)payload[i];
}
if(msg[0] == 'U') pressUp();
if(msg[0] == 'S') pressStop();
if(msg[0] == 'D') pressDown();
}
Ich hoffe ihr könnt mir hier ein wenig auf die Sprünge helfen.
Danke im Voraus!