TV-Tutorial - IR-Transceiver
In diesem Abschnitt zeigen wir dir, wie du deinen Fernseher mit einem IR-Transceiver steuerst und ihn dann per Sprache über Alexa, Google Home oder SmartThings bedienst.
Voraussetzungen :
- ESP8285 ESP-01M IR-Transceiver x1.
In diesem Tutorial verwenden wir den ESP8285 ESP-01M IR-Transceiver, eine beliebte und leicht online erhältliche Option. Wir konzentrieren uns zwar auf dieses spezielle Modul, aber die Konzepte lassen sich auch auf andere 38-kHz-Infrarotsender anwenden.

Kurze Einführung zum ESP8285 ESP-01M IR-Transceiver
Ein Infrarot-ESP8285-WLAN-Transceiver-Modul ist eine Platine, die zwei Funktionen vereint:
Infrarot-(IR)-Transceiver: Dieser Teil ermöglicht es dem Modul, Infrarotsignale zu senden und zu empfangen. Der IR-Sender ist mit GPIO4 verbunden, der IR-Empfänger mit GPIO14
ESP8285 Wi-Fi-Modul: Dies ist ein separater Chip auf der Platine, der dem Modul die Verbindung mit einem WLAN-Netzwerk ermöglicht. Der ESP8285 ist ein ESP8266 mit 1M Flash, der hohen Temperaturen bis zu 125 Grad Celsius widersteht.
Firmware hochladen : Verbinde den Jumper GPIO01 mit GND.
Firmware ausführen : Entferne den Jumper und stecke den USB-Programmer wieder ein
Verdrahtung

| ESP8285 | TTL |
|---|---|
| 5V | 5V |
| GND | GND |
| TX | RX |
| RX | TX |
Bevor wir die Integration mit Sinric Pro vornehmen, solltest du prüfen, ob das Relais richtig verdrahtet ist und du IR-Signale aufzeichnen kannst.
Schritt 1: IR aufzeichnen
-
Installiere IRremoteESP8266
-
Klicke auf die Menüpunkte „Sketch“ -> „Include Library“ -> „Manage Libraries…“.
-
Gib
IRremoteESP8266in das Suchfeld „Filter your search…“ oben rechts ein. -
Klicke auf das Suchergebnis
IRremoteESP8266. -
Wähle die Version, die du installieren möchtest, und klicke auf
Install.
-
-
Verbinde den Jumper
GPIO0mitGND, um die Firmware hochzuladen. -
Flashe IRrecvDumpV3. Der Sketch muss nicht geändert werden. Er verwendet bereits die richtigen GPIO-Pins.

-
Entferne den Jumper zwischen
GPIO0undGNDund stecke den USB-Programmer wieder ein. Jetzt führt der ESP-Chip den SketchIRrecvDumpV3aus. Stelle die Arduino Serial BaudRate auf115200, um die Logs zu sehen. -
Zeit, die Power-on-Taste deiner TV-Fernbedienung aufzuzeichnen.

Im Arduino Serial Monitor werden die IR-Codes dann etwa so ausgegeben.
Kopiere das rawData-Array

Schritt 2: IR senden
#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
const uint16_t kIrLed = 4;
IRsend irsend(kIrLed);
uint16_t rawData[3] = {9004, 2218, 586}; // TODO: Change this to your remote control power button
void setup() {
irsend.begin();
Serial.begin(115200);
}
void loop() {
Serial.println("a rawData capture from dump");
irsend.sendRaw(rawData, 3 /* IR len */, 38 /* kHz */); // TODO: adjust IR len according to rawData length.
delay(2000);
}
Flashe den obigen Sketch und entferne den Jumper, um die Firmware auszuführen.
Wenn der Sketch das Signal sendet, sollte sich der Fernseher ein- oder ausschalten. Jetzt kannst du den Vorgang wiederholen, um weitere Tasten wie Lautstärke lauter, leiser, Stummschaltung usw. aufzuzeichnen.
Schritt 3 : Ein neues TV-Gerät in Sinric Pro anlegen
-
Melde dich an bei deinem Sinric Pro Konto, gehe links im Menü zu Devices und klicke oben links auf Add Device.
-
Gib den Gerätenamen TV, die Beschreibung TV ein und wähle als Gerätetyp TV.
-
Klicke auf Others und dann auf Save


- Kopiere Device Id, App Key und App Secret Halte diese Werte geheim. TEILE SIE NICHT IN ÖFFENTLICHEN FOREN!
Schritt 2 : Programmierung
2.1 Sinric Pro Bibliothek installieren

2.2 Vollständiger Code
Jetzt können wir den SinricPro TV Sketch mit den IR-Codes vervollständigen.
// #define ENABLE_DEBUG
#define SINRICPRO_NOSSL
#ifdef ENABLE_DEBUG
#define DEBUG_ESP_PORT Serial
#define NODEBUG_WEBSOCKETS
#define NDEBUG
#endif
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#include "SinricPro.h"
#include "SinricProTV.h"
#define WIFI_SSID "YOUR-WIFI-SSID"
#define WIFI_PASS "YOUR-WIFI-PASSWORD"
#define APP_KEY "YOUR-APP-KEY" // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx"
#define APP_SECRET "YOUR-APP-SECRET" // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx"
#define TV_ID "YOUR-DEVICE-ID" // Should look like "5dc1564130xxxxxxxxxxxxxx"
#define BAUD_RATE 115200
const uint16_t kIrLed = 4;
IRsend irsend(kIrLed);
bool tvPowerState;
bool onPowerState(const String &deviceId, bool &state) {
Serial.printf("TV turned %s\r\n", state?"on":"off");
tvPowerState = state; // set powerState
/*
Protocol : NEC
Code : 0x20DF10EF (32 Bits)
uint16_t rawData[71] = {9032, 4476, 582, 544, 582, 546, 582, 1652, 582, 546, 582, 544, 582, 546, 582, 546, 582, 546, 582, 1654, 582, 1654, 582, 544, 582, 1654, 582, 1654, 582, 1654, 582, 1654, 582, 1654, 582, 546, 582, 544, 584, 544, 582, 1654, 582, 546, 582, 546, 582, 546, 582, 546, 582, 1654, 582, 1654, 582, 1652, 582, 546, 582, 1654, 582, 1654, 582, 1654, 582, 1654, 582, 41158, 9004, 2222, 582}; // NEC 20DF10EF
uint32_t address = 0x4;
uint32_t command = 0x8;
uint64_t data = 0x20DF10EF;
*/
uint16_t rawData[71] = {9032, 4476, 582, 544, 582, 546, 582, 1652, 582, 546, 582, 544, 582, 546, 582, 546, 582, 546, 582, 1654, 582, 1654, 582, 544, 582, 1654, 582, 1654, 582, 1654, 582, 1654, 582, 1654, 582, 546, 582, 544, 584, 544, 582, 1654, 582, 546, 582, 546, 582, 546, 582, 546, 582, 1654, 582, 1654, 582, 1652, 582, 546, 582, 1654, 582, 1654, 582, 1654, 582, 1654, 582, 41158, 9004, 2222, 582}; // NEC 20DF10EF
irsend.sendRaw(rawData, 71 /* IR len */, 38 /* kHz */);
return true;
}
// setup function for WiFi connection
void setupWiFi() {
Serial.printf("\r\n[Wifi]: Connecting");
#if defined(ESP8266)
WiFi.setSleepMode(WIFI_NONE_SLEEP);
WiFi.setAutoReconnect(true);
#elif defined(ESP32)
WiFi.setSleep(false);
WiFi.setAutoReconnect(true);
#endif
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.printf(".");
delay(250);
}
IPAddress localIP = WiFi.localIP();
Serial.printf("connected!\r\n[WiFi]: IP-Address is %d.%d.%d.%d\r\n", localIP[0], localIP[1], localIP[2], localIP[3]);
}
// setup function for SinricPro
void setupSinricPro() {
// add device to SinricPro
SinricProTV& myTV = SinricPro[TV_ID];
// set callback functions to device
myTV.onPowerState(onPowerState);
// For other https://github.com/sinricpro/esp8266-esp32-sdk/blob/master/examples/TV/TV.ino
// myTV.onAdjustVolume(onAdjustVolume);
// myTV.onChangeChannel(onChangeChannel);
// myTV.onChangeChannelNumber(onChangeChannelNumber);
// myTV.onMediaControl(onMediaControl);
// myTV.onMute(onMute);
// myTV.onSelectInput(onSelectInput);
// myTV.onSetVolume(onSetVolume);
// myTV.onSkipChannels(onSkipChannels);
// setup SinricPro
SinricPro.onConnected([](){ Serial.printf("Connected to SinricPro\r\n"); });
SinricPro.onDisconnected([](){ Serial.printf("Disconnected from SinricPro\r\n"); });
SinricPro.begin(APP_KEY, APP_SECRET);
}
void setupIR() {
irsend.begin();
}
// main setup function
void setup() {
setupIR();
Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n");
setupWiFi();
setupSinricPro();
}
void loop() {
SinricPro.handle();
}
Diesen Code auf GitHub Gist ansehen
Jetzt kannst du den Fernseher auch über die Sinric Pro App, Google Home und Alexa steuern.
Fehlerbehebung
Mögliche Lösungen für dein Problem findest du auf unserer Seite Troubleshooting.
Verwandte Tutorials
- ESP32 oder ESP8266 mit Alexa und Google Home steuern
- 433-MHz-RF-Geräte mit einem RF-Sender
- Switch-Tutorial Teil 1: ein Relais ein- und ausschalten
This document is open source. See a typo? Please create an issue