Mit Hilfe von Mikrocontrollern wir einem ESP32, ESP8266, Arduino oder Raspberry kann man sich in den Twitch-Chat einklinken und diesen überwachen. Und am anderen Ende der Leitung ist ein Mikrocontroller ein guter Ort, um Output zu generieren.
Blinkende Lichter, Nebelmaschine, Roboterarm?
Bunt blinkende Lichter wären ein gängiges und leicht umzusetzendes Beispiel, doch die Möglichkeiten sind endlos. In diesem Beispiel wartet der Controller darauf, das jemand im Chat !led1, !led2 oder !led3 schreibt. Daraufhin blink die Onboard-LED. An dieser Stelle habe ich den Code kompakt gehalten, um die Übersicht nicht zu verlieren. Du kannst den Code leicht für eigene Vorhaben anpassen.
Warum ein ESP32?
Der ESP32 ist ein extrem günstiger Mikrocontroller mit vielen Funktionen. Insbesondere die WiFi-Funktionalität ist der Grund, warum die Wahl auf den ESP fällt. Einen Arduino könnte man ebenfalls ins Netzwerk einbinden. Diese Lösung wäre aber nicht nur aufwändiger, sondern auch um einige Euro teurer. Ein Raspberry empfinde ich als völlig überdimensioniert und zu teuer für solch einfache Aufgaben.
Vorwort zum Code:
Der Code ist absolut basic. Dein Mikrocontroller würde nun auf die Phrasen !led1, !led2 und !led3 hören und die Onboard-LED zum blinken bringen. Einmal, zweimal oder eben dreimal. Nicht mehr, nicht weniger. Das macht er aber auch nur, wenn Du NETZWERKNAME, NETZWERKPASSWORT und DEINKANALNAME entsprechend änderst, damit der Bot weiß, in welchem Netzwerk er sich einbinden soll und welchem Chat er beachten soll.
Code:
#include <IRCClient.h>
#include <WiFi.h>
#include <SPI.h>
#define WIFI_SSID "NETZWERKNAME"
#define WIFI_PASSWORD "NETZWERKPASSWORT"
#define IRC_SERVER "irc.chat.twitch.tv"
#define IRC_PORT 6667
#define IRC_CHANNEL "#DEINKANALNAME"
String IRC_NICKNAME;
WiFiClient wifiClient;
IRCClient client(IRC_SERVER, IRC_PORT, wifiClient);
void callback(IRCMessage ircMessage) {
// PRIVMSG ignoring CTCP messages
if (ircMessage.command == "PRIVMSG" && ircMessage.text[0] != '\001') {
String message("<" + ircMessage.nick + "> " + ircMessage.text);
Serial.println(message);
if (String(ircMessage.text).startsWith("!licht")) {
String colorStr = String(ircMessage.text);
colorStr.replace("!led", "");
if (colorStr == "1") {
// Code oder Funktion
} else if (colorStr == "2") {
// Code oder Funktion
} else if (colorStr == "3") {
// Code oder Funktion
}
}
return;
}
Serial.println(ircMessage.original);
}
void debugSentCallback(String data) { Serial.println(data); }
void setup() {
Serial.begin(115200);
// generate random string and prepend 'justinfan' for anonymous twitch login
IRC_NICKNAME = "justinfan" + String(random(1000000, 9999999));
Serial.println("Connecting to Wifi");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (!WiFi.isConnected()) {
Serial.print(".");
delay(50);
}
Serial.println(" Connected to Wifi");
client.setCallback(callback);
client.setSentCallback(debugSentCallback);
}
void loop() {
if (!client.connected()) {
Serial.println("Attempting IRC connection...");
// Attempt to connect
if (client.connect(IRC_NICKNAME, "")) {
client.sendRaw("JOIN " + String(IRC_CHANNEL));
Serial.println("connected");
} else {
Serial.println("failed... try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
return;
}
client.loop();
}
Artikelserie zu Mikrocontrollern
Dies ist der erste Artikel einer ganzen Serie. Da Du nun weißt, wie Du einen ESP32 grundlegend mit dem Twitch-Chat verbindest, kannst Du nun alles weitere entwickeln. In weiteren Artikeln zeige ich dann mit konkreten Anwendungen, wie Du den Code anpassen könntest. Wenn Du direkt Zugang zu allen Scripten magst, dann schau mal in meinem GitHub.
Du hast Fragen?
Ich freue mich über Deinen Kommentar! Oder noch besser: schau doch mal bei mir im Stream auf twitch vorbei, dann können wir live über alles schnacken.