Je TV bedienen met Alexa: Arduino & ESP8266 Setup
Onderdelen en benodigdheden
| Arduino UNO | 1 |
| NodeMCU ESP8266 Breakout Board | 1 |
| IR-zender/ontvanger (met 100Ω weerstand in serie) | 1 |
Benodigde tools en machines
- Soldeerbout
Apps en online diensten
- Arduino IDE
Over dit project
Alexa gebruiken om je TV te bedienen!
Intro: Dit project laat zien hoe je Alexa kunt gebruiken om commando's te sturen en je TV te bedienen door er tegen te praten. Alles wat je TV-afstandsbediening kan, kan Alexa ook. We gaan de IR-signalen van de afstandsbediening opnemen en Alexa deze laten herhalen wanneer je spraakcommando's geeft. Hier zijn de stappen of bekijk deze YouTube-video:
Stap 1: Vereiste bibliotheken downloaden
Download de volgende bibliotheken en plaats ze in je Arduino IDE bibliotheken-map:
- ESPAsyncTCP - GitHub
- ESPAsyncUDP - GitHub
- FauxMoESP - Bitbucket Downloads
Stap 2: NodeMCU (WiFi-module) programmeren
Open de ESP8266-Alexa.ino sketch en upload deze naar je NodeMCU (download de board-info via Board Manager in Arduino IDE). Je hoeft alleen de WiFi-gegevens en de Apparatenamen aan te passen.
Je kunt de Apparatenamen aanpassen in de ESP8266-Alexa.ino sketch en de Signalen die uitgezonden worden in de IR-Alexa-Send.ino sketch:
Stap 3: IR-signalen van TV-afstandsbediening uitlezen
Upload de IR_REMOTE_read.ino sketch naar je Arduino om de afstandsbediening-signalen te lezen en de ontvangen IR-signalen te registreren voor later gebruik, zoals in deze tutorial getoond:
Stap 4: Arduino programmeren om TV IR-signalen via Alexa te sturen
Open IR-Alexa-Send.ino in de Arduino IDE en upload het naar je Arduino Uno (vergeet niet het bord te wijzigen in UNO).
Voed beide modules en verbind de draden tussen ze. Zorg dat de IR-zender is aangesloten op terminal 3 van de UNO. Zie het bijgevoegde schema voor meer informatie:
Stap 5: Het project testen met Alexa
Ga nu in je Amazon Alexa-app op je mobiele apparaat of PC, ga naar Smart Home en druk op "Apparaten toevoegen" om elk van de commando's te vinden die je in de ESP8266-Alexa.ino sketch hebt ingesteld.
Zodra ze gevonden zijn, kun je ze testen met een van de volgende commando-structuren:
- "Alexa, zet APPAREELNAAM aan"
- "Alexa, zet APPAREELNAAM aan"
- "Alexa, zet de APPAREELNAAM aan"
- "Alexa, zet de APPAREELNAAM aan"
Code
ESP8266-Alexa.ino (voor NodeMCU)
Deze code emuleert een "WEMO"-apparaat via Arduino IDE voor de NodeMCU-chip.
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
// WiFi Credentials
#define WIFI_SSID "linksys"
#define WIFI_PASS ""
#define SERIAL_BAUDRATE 115200
fauxmoESP fauxmo;
void wifiSetup() {
WiFi.mode(WIFI_STA);
Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println();
Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}
#define RELAY_PIN1 13
#define RELAY_PIN2 2
#define RELAY_PIN3 14
#define RELAY_PIN4 15
void setup() {
pinMode(RELAY_PIN1, OUTPUT); digitalWrite(RELAY_PIN1, LOW);
pinMode(RELAY_PIN2, OUTPUT); digitalWrite(RELAY_PIN2, LOW);
pinMode(RELAY_PIN3, OUTPUT); digitalWrite(RELAY_PIN3, LOW);
pinMode(RELAY_PIN4, OUTPUT); digitalWrite(RELAY_PIN4, LOW);
Serial.begin(SERIAL_BAUDRATE);
Serial.println();
Serial.println();
Serial.println("FauxMo demo sketch");
Serial.println("After connection, ask Alexa/Echo to 'turn pixels on' or 'off' or 'turn relay on' or 'off'");
wifiSetup();
// Alexa Apparatenamen
fauxmo.addDevice("TV");
fauxmo.addDevice("GregsNetflix");
fauxmo.addDevice("Sleep");
fauxmo.addDevice("Office");
fauxmo.onMessage(callback);
}
void callback(uint8_t device_id, const char * device_name, bool state) {
Serial.printf("[MAIN] %s state: %s\n", device_name, state ? "ON" : "OFF");
if (strcmp(device_name, "TV") == 0) {
if (state) digitalWrite(RELAY_PIN1, HIGH);
else digitalWrite(RELAY_PIN1, HIGH); // Let op: beide HIGH? Check originele code
}
if (strcmp(device_name, "GregsNetflix") == 0) {
if (state) digitalWrite(RELAY_PIN2, HIGH);
else digitalWrite(RELAY_PIN2, LOW);
}
if (strcmp(device_name, "Sleep") == 0) {
if (state) digitalWrite(RELAY_PIN3, HIGH);
else digitalWrite(RELAY_PIN3, LOW);
}
if (strcmp(device_name, "Office") == 0) {
if (state) digitalWrite(RELAY_PIN4, HIGH);
else digitalWrite(RELAY_PIN4, LOW);
}
}
void loop() {
fauxmo.handle();
delay(500);
digitalWrite(RELAY_PIN1, LOW);
digitalWrite(RELAY_PIN2, LOW);
digitalWrite(RELAY_PIN3, LOW);
digitalWrite(RELAY_PIN4, LOW);
}
IR-Alexa-Send.ino (voor Arduino UNO)
Deze code leest signalen van de NodeMCU en stuurt de juiste IR-signalen uit via de IR-zenddiode.
#include <IRremote.h>
IRsend irsend;
#define a 4
#define b 5
#define c 6
#define d 7
void setup() {
Serial.begin(9600);
pinMode(a, INPUT);
pinMode(b, INPUT);
pinMode(c, INPUT);
pinMode(d, INPUT);
}
void loop() {
if (digitalRead(a) == HIGH) {
irsend.sendNEC(0x57E3E817, 32); // Power Code
Serial.println("TV");
delay(500);
}
if (digitalRead(b) == HIGH) {
irsend.sendNEC(0x57E354AB, 32); // Enter Key
delay(2000);
irsend.sendNEC(0x57E39867, 32); // Up Key
delay(1000);
irsend.sendNEC(0x57E39867, 32); // Up Key
delay(1000);
irsend.sendNEC(0x57E39867, 32); // Up Key
delay(1000);
irsend.sendNEC(0x57E3B44B, 32); // Right Key
delay(1000);
irsend.sendNEC(0x57E354AB, 32); // Enter
delay(2000);
irsend.sendNEC(0x57E354AB, 32); // Enter
Serial.println("The Office");
delay(500);
}
if (digitalRead(c) == HIGH) {
irsend.sendNEC(0x57E38679, 32); // Options Button
delay(1500);
irsend.sendNEC(0x57E3CC33, 32); // Down key
delay(700);
irsend.sendNEC(0x57E3CC33, 32); // Down key
delay(700);
irsend.sendNEC(0x57E3CC33, 32); // Down key
delay(700);
irsend.sendNEC(0x57E3CC33, 32); // Down key
delay(700);
irsend.sendNEC(0x57E3B44B, 32); // Right Key
delay(700);
irsend.sendNEC(0x57E3B44B, 32); // Right Key
delay(900);
irsend.sendNEC(0x57E38679, 32); // Options Button
Serial.println("Sleep Timer");
delay(500);
}
if (digitalRead(d) == HIGH) {
irsend.sendNEC(0x57E34AB5, 32); // Netflix Code
Serial.println("Greg's Netflix");
delay(500);
}
}
IR_REMOTE_read.ino (voor Arduino om IR-codes uit te lezen)
Gebruik deze code op je Arduino om de kliks van je afstandsbediening te lezen via de IR-ontvanger.
//2017.06.22
#include <IRremote.h>
#include <LiquidCrystal.h>
/* LCD AANSLUITING (LINKS NAAR RECHTS, PINNEN BOVENZIJDE)
* GND - VCC - POT MIDDEN - 12 - GND - 11 - NIETS - NIETS - NIETS - NIETS - 5 - 4 - 9 - 2 - VCC - GND
* POT MOET 5V EN GND HEBBEN EN KAN GEDRAAID WORDEN VOOR LCD CONTRAST
*/
LiquidCrystal lcd(12, 11, 5, 4, 9, 2); // 9 ipv 3 (NODIG VOOR ZENDER)
int receiverpin = 10;
IRrecv irrecv(receiverpin);
decode_results results;
void setup() {
lcd.begin(16, 2);
pinMode(receiverpin, INPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume();
lcd.clear();
lcd.print(results.value, HEX);
delay(150);
}
}
Schema
Productieproces
- Industriële Touchscreen Repareren Of Vervangen: Expert Beslissingsgids
- Anticonceptiepil: Geschiedenis, Voordelen, Risico's en Productie
- Je plafondventilator bedienen met Alexa: Stap-voor-stap handleiding
- Een Arduino LED besturen met Cortana via Bluetooth op Windows 10
- Pro Gids: Metalen Boren met Uw Machine – Expert Tips
- Word meester in autoreparaties: DIY-tips voor betrouwbaarheid en besparing
- Bescherming van Industriële Besturingssystemen: Bewezen Strategieën & Best Practices
- Acht Bewezen Stappen om Uw Procescontrolsysteem te Diagnosticeren en Repareren
- Uw PC Opwekken op Afstand met PLCnext via Wake-on-LAN
- Industriële besturingssystemen overstappen naar draadloze netwerken
- Waarom thermohardende composieten de ideale keuze zijn voor moderne manufacturing