Hallo zusammen,
neu im Forum un dhoffe, dass ich alles bechreibe, wie es nötig ist:
Ich bastel seit gut einem Jahr an meinem Smarthome und habe mein neues Projekt gestartet. Ich wollte meine Stereoanlage smart machen. Das heißt in die Anlage einen ESP einbauen, der dann per MQTT Signale von meinem Broker empfängt und dann per IR Sender an den IR Empfänger der Stereo schickt.
Soweit so gut. Ich habe gestartet mit einem D1 Mini. Mit diesem habe ich es geschafft, alle relevanten IR Code aufzunehmen und dann mit einem anderen Sketch auch zu senden. Auch die Integration in meinen Broker klappte wunderbar und ich konnte alles schalten. Allerdings eben mit einem D1 Mini und von extern noch. Vor dem Einbau in die Anlage wollte ich dann von meinem Steckbrett runter, löten und auch downsizen.
Daher habe ich überlegt, ob ich nicht auf einen ESP01 switche, weil ich ja auch nur einen GPIO brauche. Aber hier scheitere ich und ich weiß nicht warum.
Ich habe den gleichen Sketch 1:1 auf den ESP01 geflasht und angeschlossen wie folgt:
GND
VCC und CH-PD jeweil mit 3,3V
GPIO-2 -> Data zu meiner IR Diode
Beispiel meiner Schaltung. Am D1 Mini habe ich GPIO-4 also D2 verwendet. Beim ESP habe ich es auf GPIO 2 geändert.
Mein Sketch:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#ifndef UNIT_TEST
#endif
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
// const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
const uint16_t kIrLed = 2;
IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.
// IR SIGNAL SAMSUNG POWER
uint16_t rawData[71] = {9092, 4400, 662, 466, 608, 494, 634, 1596, 634, 492, 634, 494, 608, 494, 634, 492, 634, 494, 634, 1596, 634, 1596, 660, 468, 608, 1622, 608, 1622, 634, 1596, 636, 1596, 634, 1596, 582, 1648, 634, 468, 634, 494, 634, 1596, 608, 520, 608, 494, 634, 494, 634, 494, 606, 498, 614, 1612, 634, 1596, 660, 468, 634, 1598, 608, 1622, 634, 1598, 660, 1570, 634, 40154, 9092, 2142, 608}; // NEC 20DF906F
//uint64_t data = 0x20DF906F
const char* ssid = "WLAN"; //HIER DEIN WLAN EINTRAGEN
const char* password = "password"; //HIER DEIN WLAN PASSWORT EINTRAGEN
const char* mqtt_server = "192.168.2.165"; //IP zum MQTT Broker
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(100);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length)
{
Serial.print("Command from MQTT broker is : [");
Serial.print(topic);
Serial.println();
Serial.print(" publish data is:");
char* payload_str;
payload_str = (char*) malloc(length + 1);
memcpy(payload_str, payload, length);
payload_str[length] = '\0';
if(String(topic) == "Fernbedienung/Stereoanlage") {
Serial.print((String)payload_str);
//Fernseher AN/AUS
if(String(payload_str) == "on") {
//irsend.sendRaw(rawData, 71, 32);
irsend.sendPanasonic64(0x40040538BC81,48,3);
}
//Fernseher AN/AUS
if(String(payload_str) == "mute") {
irsend.sendPanasonic64(0x400405004C49);
}
//Fernseher AN/AUS
if(String(payload_str) == "volup") {
irsend.sendPanasonic64(0x400405000401);
}
//Fernseher AN/AUS
if(String(payload_str) == "voldown") {
irsend.sendPanasonic64(0x400405008481);
}
//Fernseher AN/AUS
if(String(payload_str) == "playpause") {
irsend.sendPanasonic64(0x40040538605D);
}
//Fernseher AN/AUS
if(String(payload_str) == "next") {
irsend.sendPanasonic64(0x40040538526F);
}
//Fernseher AN/AUS
if(String(payload_str) == "preview") {
irsend.sendPanasonic64(0x4004053892AF);
}
//Fernseher AN/AUS
if(String(payload_str) == "stop") {
irsend.sendPanasonic64(0x40040538003D);
}
//Fernseher AN/AUS
if(String(payload_str) == "selector") {
irsend.sendPanasonic64(0x400405006164);
}
}
}
void reconnect() {
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");
String clientId = "YOU_CHOOSE_id";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str()))
{
Serial.println("connected");
client.subscribe("Fernbedienung/Stereoanlage");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(6000);
}
}
}
void setup() {
irsend.begin();
Serial.begin(9600);
setup_wifi();
client.setServer(mqtt_server, 1882);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.setCallback(callback);
client.loop();
}
Orientiert habe ich mir an dieser Beschreibung: Input
So, nun zum Problem:
Der ESP bootet und im ioBroker sehe ich, dass er im MQTT die topics subscribted. HEißt für mich, dass er den Sketch richtig geladen hat.
Wenn ich nun an den GPIO-2 das Kabel meines IR LED anschließe, dann verliert er die Verbindung zum Broker, die blaue LED am ESP leuchtet dauerhaft und meine IR LED ist auf "dauer-high" -> Sie wurde warm... Ich habe sie dann durch eine normal LED ersetzt, die dann auch dauernd an ist.
Ich vermute, dass es daher irgendwie an der Definition der IR GPIO liegt in meinem Sketch. Aber beim D1 Mini geht es ja auch und ich habe nichts verändert...?
Vielleicht habt ihr eine Idee, wo mein Fehler liegt?
Danke!!digt]