Bonjours j'ai 2 problèmes avec ma télécommande virtuelle (nodemcu) Alexa et TV codec ir exemple
Le premier
j'ai rajouté une touche Netflix ne fonctionne pas
Le deuxième
Tout fonctionne ai au bout d'un certain tant ma télécommande virtuelle ne réagit plus je suis obligé de dire a Alexa d'éteindre la télé et après sa remarche
Je débute sur arduino voici mon code et merci d'avance
include
include
include
include
include
include
include
//IR includes and vars
include
include
include
define IR_LED 4 //TODO: Change to your digital pin for IR. default D2
IRsend irsend(IR_LED);
//Start of including vars
//Variables starting with 'TV' are ir commands for the TV
//Variables starting with 'TELE' are ir commands for DECODER
const unsigned long TV_POWER_H = 0xD5F2A;
const unsigned long TV_VOLUP_H = 0xD0F2F;
const unsigned long TV_VOLDOWN_H = 0xD1F2E;
const unsigned long TV_INPUT_H = 0x5CFA3;
const unsigned long TV_UP_H = 0xA6F59;
const unsigned long TV_DOWN_H = 0xA7F58;
const unsigned long TV_MUTE_H = 0xC0F3F;
const unsigned long TV_P_UP_H = 0xD2F2D;
const unsigned long TV_P_DOWN_H = 0xD3F2C;
const unsigned long TV_1 = 0xCEF31;
const unsigned long TV_2 = 0xCDF32;
const unsigned long TV_3 = 0xCCF33;
const unsigned long TV_4 = 0xCBF34;
const unsigned long TV_5 = 0xCAF35;
const unsigned long TV_6 = 0xC9F36;
const unsigned long TV_7 = 0xC8F37;
const unsigned long TV_8 = 0xC7F38;
const unsigned long TV_9 = 0xC6F39;
const unsigned long TV_0 = 0xCFF30;
const unsigned long TV_NETFLIX_H = 0x10FEF;
const unsigned long TV_OK = 0xBFF4;
const unsigned long DELAY_BETWEEN_COMMANDS = 100;
//end ir includes and vars
define API_KEY "" // TODO: Change to your sinric API Key. Your API Key is displayed on sinric.com dashboard
define SSID_NAME "" // TODO: Change to your Wifi network SSID
define WIFI_PASSWORD "" // TODO: Change to your Wifi network password
// try again every 5000ms if connection has failed
webSocket.setReconnectInterval(5000); // If you see 'class WebSocketsClient' has no member named 'setReconnectInterval' error update arduinoWebSockets
}
void loop() {
webSocket.loop();
if (isConnected) {
uint64_t now = millis();
// Send heartbeat in order to avoid disconnections during ISP resetting IPs over night. Thanks @MacSass
if ((now - heartbeatTimestamp) > HEARTBEAT_INTERVAL) {
heartbeatTimestamp = now;
webSocket.sendTXT("H");
}
}
}
// deviceId is the ID assgined to your smart-home-device in sinric.com dashboard. Copy it from dashboard and paste it here
void turnOn(String deviceId) {
if (deviceId == DEVICE_ID) // Device ID of first device
{
Serial.print("Turn on device id: ");
Serial.println(deviceId);
send_ir_TV(TV_POWER_H, 24);
}
}
void turnOff(String deviceId) {
if (deviceId == DEVICE_ID) // Device ID of first device
{
Serial.print("Turn off Device ID: ");
Serial.println(deviceId);
send_ir_TV(TV_POWER_H, 24);
}
}
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
switch (type) {
case WStype_DISCONNECTED:
isConnected = false;
Serial.printf("[webSocketEvent] Webservice disconnected from server!\n");
break;
case WStype_CONNECTED: {
isConnected = true;
Serial.printf("[webSocketEvent] Service connected to server at url: %s\n", payload);
Serial.printf("[webSocketEvent] Waiting for commands from server ...\n");
}
break;
case WStype_TEXT: {
Serial.printf("[webSocketEvent] get text: %s\n", payload);
String deviceId = json ["deviceId"];
String action = json ["action"];
if (action == "setPowerState") {
// alexa, turn on tv ==> {"deviceId":"xx","action":"setPowerState","value":"ON"}
String value = json ["value"];
if (value == "ON") {
turnOn(deviceId);
} else {
turnOff(deviceId);
}
} else if (action == "SetMute") {
// alexa, mute tv ==> {"deviceId":"xxx","action":"SetMute","value":{"mute":true}}
bool mute = json ["value"]["mute"];
setMute(mute);
} else if (action == "SetNetflix") {
// alexa, mute tv ==> {"deviceId":"xxx","action":"SetMute","value":{"mute":true}}
bool netflix = json ["value"]["netflix"];
setNetflix(netflix);
} else if (action == "AdjustVolume") {
// alexa, turn the volume down on tv by 20 ==> {"deviceId":"xxx","action":"AdjustVolume","value":{"volume":-20,"volumeDefault":false}}
// alexa, lower the volume on tv ==> {"deviceId":"xx","action":"AdjustVolume","value":{"volume":-10,"volumeDefault":true}}
const char* kcvolume = json ["value"]["volume"];
bool kvdefault = json["value"]["volumeDefault"];
int volume = atoi(kcvolume);
adjustVolume(volume, kvdefault);
}
else if (action == "ChangeChannel") {
//alexa, change channel to 200 on tv ==> {"deviceId":"xx","action":"ChangeChannel","value":{"channel":{},"channelMetadata":{"name":"CH9-200"}}}
//alexa, change channel to pbs on tv ==> {"deviceId":"xx","action":"ChangeChannel","value":{"channel":{},"channelMetadata":{"name":"pbs"}}}
String value = json ["value"]["channel"]["number"];
setChannel(value);
}
else if (action == "SkipChannels") {
//Alexa, next channel on tv ==> {"deviceId":"xx","action":"SkipChannels","value":{"channelCount":1}}
// Alexa may say Sorry, TV is not responding. but command works
const char* kchannels = json ["value"]["channelCount"];
int skip_ch = atoi(kchannels);
skipChannel(skip_ch);
}
else if (action == "Previous" || action == "Play") {
// alexa, previous on tv ==> {"deviceId":"xx","action":"Previous","value":{}}
// alexa, resume tv ==> {"deviceId":"xx","action":"Play","value":{}}
// Alexa, pause tv ==> says I dont know that one...
// for others check https://developer.amazon.com/docs/device-apis/alexa-playbackcontroller.html
}
else if (action == "SelectInput") {
// alexa, change the input to hdmi ==> {"deviceId":"xx","action":"","value":{"input":"HDMI"}}
String value = json ["value"]["input"];
Serial.println("ChangeChannel arrived with value:");
Serial.println(value);
setInput(value);
}
}
break;
case WStype_BIN:
Serial.printf("[webSocketEvent] get binary length: %u\n", length);
break;
default: break;
}
}
// If you are going to use a push button to on/off the switch manually, use this function to update the status on the server
// so it will reflect on Alexa app.
// eg: setPowerStateOnServer("deviceid", "ON")
// Call ONLY If status changed. DO NOT CALL THIS IN loop() and overload the server.
void setPowerStateOnServer(String deviceId, String value) {
Bonjours j'ai 2 problèmes avec ma télécommande virtuelle (nodemcu) Alexa et TV codec ir exemple Le premier j'ai rajouté une touche Netflix ne fonctionne pas Le deuxième Tout fonctionne ai au bout d'un certain tant ma télécommande virtuelle ne réagit plus je suis obligé de dire a Alexa d'éteindre la télé et après sa remarche Je débute sur arduino voici mon code et merci d'avance
include
include
include
include
include
include
include
//IR includes and vars
include
include
include
define IR_LED 4 //TODO: Change to your digital pin for IR. default D2
IRsend irsend(IR_LED);
//Start of including vars //Variables starting with 'TV' are ir commands for the TV //Variables starting with 'TELE' are ir commands for DECODER
const unsigned long TV_POWER_H = 0xD5F2A; const unsigned long TV_VOLUP_H = 0xD0F2F; const unsigned long TV_VOLDOWN_H = 0xD1F2E;
const unsigned long TV_INPUT_H = 0x5CFA3; const unsigned long TV_UP_H = 0xA6F59; const unsigned long TV_DOWN_H = 0xA7F58; const unsigned long TV_MUTE_H = 0xC0F3F; const unsigned long TV_P_UP_H = 0xD2F2D; const unsigned long TV_P_DOWN_H = 0xD3F2C; const unsigned long TV_1 = 0xCEF31; const unsigned long TV_2 = 0xCDF32; const unsigned long TV_3 = 0xCCF33; const unsigned long TV_4 = 0xCBF34; const unsigned long TV_5 = 0xCAF35; const unsigned long TV_6 = 0xC9F36; const unsigned long TV_7 = 0xC8F37; const unsigned long TV_8 = 0xC7F38; const unsigned long TV_9 = 0xC6F39; const unsigned long TV_0 = 0xCFF30; const unsigned long TV_NETFLIX_H = 0x10FEF; const unsigned long TV_OK = 0xBFF4;
const unsigned long DELAY_BETWEEN_COMMANDS = 100; //end ir includes and vars
define API_KEY "" // TODO: Change to your sinric API Key. Your API Key is displayed on sinric.com dashboard
define SSID_NAME "" // TODO: Change to your Wifi network SSID
define WIFI_PASSWORD "" // TODO: Change to your Wifi network password
define DEVICE_ID ""
define SERVER_URL "iot.sinric.com"
define SERVER_PORT 80
define HEARTBEAT_INTERVAL 300000 // 5 Minutes
ESP8266WiFiMulti WiFiMulti; WebSocketsClient webSocket; WiFiClient client;
uint64_t heartbeatTimestamp = 0; bool isConnected = false;
void setPowerStateOnServer(String deviceId, String value); void webSocketEvent(WStype_t type, uint8_t * payload, size_t length); void send_ir_TV(unsigned long type, int len);
void setup() { Serial.begin(115200); irsend.begin(); WiFiMulti.addAP(SSID_NAME, WIFI_PASSWORD); Serial.println(); Serial.print("Connecting to Wifi: "); Serial.println(SSID_NAME);
// Waiting for Wifi connect while (WiFiMulti.run() != WL_CONNECTED) { delay(500); Serial.print("."); } if (WiFiMulti.run() == WL_CONNECTED) { Serial.println(""); Serial.print("WiFi connected. "); Serial.print("IP address: "); Serial.println(WiFi.localIP()); }
// server address, port and URL webSocket.begin(SERVER_URL, SERVER_PORT, "/");
// event handler webSocket.onEvent(webSocketEvent); webSocket.setAuthorization("apikey", API_KEY);
// try again every 5000ms if connection has failed webSocket.setReconnectInterval(5000); // If you see 'class WebSocketsClient' has no member named 'setReconnectInterval' error update arduinoWebSockets }
void loop() { webSocket.loop();
if (isConnected) { uint64_t now = millis();
} }
// deviceId is the ID assgined to your smart-home-device in sinric.com dashboard. Copy it from dashboard and paste it here
void skipChannel(int channels) { if (channels < 0) { Serial.print("Channel skip down: "); Serial.println(channels); send_ir_TV(TV_P_DOWN_H, 24); } else if (channels > 0) { Serial.print("Channel skip up: "); Serial.println(channels); send_ir_TV(TV_P_UP_H, 24); } }
void adjustVolume(int adjustVolume, bool kvdefault) { if (adjustVolume < 0) { Serial.print("Volume down: "); Serial.println(adjustVolume); if (kvdefault) { send_ir_TV(TV_VOLDOWN_H, 24); } else { for (int i = 0; i < -adjustVolume; i++ ) { send_ir_TV(TV_VOLDOWN_H, 24); delay(DELAY_BETWEEN_COMMANDS); } } } else if (adjustVolume > 0) { Serial.print("Volume up: "); Serial.println(adjustVolume); if (kvdefault) { send_ir_TV(TV_VOLUP_H, 24); } else { for (int i = 0; i < adjustVolume; i++ ) { send_ir_TV(TV_VOLUP_H, 24); delay(DELAY_BETWEEN_COMMANDS); } } } }
void setMute(bool mute) { Serial.print("mute: "); Serial.println(mute); send_ir_TV(TV_MUTE_H, 24); } void setNetflix(bool netflix) { Serial.print("netflix: "); Serial.println(netflix); send_ir_TV(TV_NETFLIX_H, 24); }
void setChannel(String ch) { Serial.print("Changing channel: "); Serial.println(ch); for (unsigned int i = 0; i < ch.length(); i++) { switch (ch[i]) { case '1': send_ir_TV(TV_1, 24); break; case '2': send_ir_TV(TV_2, 24); break; case '3': send_ir_TV(TV_3, 24); break; case '4': send_ir_TV(TV_4, 24); break; case '5': send_ir_TV(TV_5, 24); break; case '6': send_ir_TV(TV_6, 24); break; case '7': send_ir_TV(TV_7, 24); break; case '8': send_ir_TV(TV_8, 24); break; case '9': send_ir_TV(TV_9, 24); break; case '0': send_ir_TV(TV_0, 24); break; } delay(DELAY_BETWEEN_COMMANDS); } delay(DELAY_BETWEEN_COMMANDS); send_ir_TV(TV_OK, 24); }
// use this to send an ir message to the TV void send_ir_TV(unsigned long type, int len) { irsend.sendNikai(type, len); }
void setInput(String value) { Serial.print("Next input selected: "); send_ir_TV(TV_INPUT_H, 24); delay(DELAY_BETWEEN_COMMANDS); send_ir_TV(TV_DOWN_H, 24); }
void turnOn(String deviceId) { if (deviceId == DEVICE_ID) // Device ID of first device { Serial.print("Turn on device id: "); Serial.println(deviceId); send_ir_TV(TV_POWER_H, 24); } }
void turnOff(String deviceId) { if (deviceId == DEVICE_ID) // Device ID of first device { Serial.print("Turn off Device ID: "); Serial.println(deviceId); send_ir_TV(TV_POWER_H, 24); } }
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { switch (type) { case WStype_DISCONNECTED: isConnected = false; Serial.printf("[webSocketEvent] Webservice disconnected from server!\n"); break; case WStype_CONNECTED: { isConnected = true; Serial.printf("[webSocketEvent] Service connected to server at url: %s\n", payload); Serial.printf("[webSocketEvent] Waiting for commands from server ...\n"); } break; case WStype_TEXT: { Serial.printf("[webSocketEvent] get text: %s\n", payload);
if ARDUINOJSON_VERSION_MAJOR == 5
endif
if ARDUINOJSON_VERSION_MAJOR == 6
endif
} }
// If you are going to use a push button to on/off the switch manually, use this function to update the status on the server // so it will reflect on Alexa app. // eg: setPowerStateOnServer("deviceid", "ON")
// Call ONLY If status changed. DO NOT CALL THIS IN loop() and overload the server. void setPowerStateOnServer(String deviceId, String value) {
if ARDUINOJSON_VERSION_MAJOR == 5
DynamicJsonBuffer jsonBuffer; JsonObject& root = jsonBuffer.createObject();
endif
if ARDUINOJSON_VERSION_MAJOR == 6
DynamicJsonDocument root(1024);
endif
root["deviceId"] = deviceId; root["action"] = "setPowerState"; root["value"] = value; StreamString databuf;
if ARDUINOJSON_VERSION_MAJOR == 5
root.printTo(databuf);
endif
if ARDUINOJSON_VERSION_MAJOR == 6
serializeJson(root, databuf);
endif
webSocket.sendTXT(databuf); }