Hola que tal este es mi primer post siendo un novato y navegando por Internet con la poca información que hay en estos temas de IoT con este modulo y los asistentes personales vengo con este código para ESP8266 que lo que hace es emitir infrarrojos y mediante sinric (skill de alexa) y la app de alexa en México podemos controlar nuestra tv mediante la voz.
Este proyecto consta de dos partes siendo la primera recibiendo los codigos IR del control remoto.
Mi principal duda en este código es saber como conecto el infrarrojo IR para que me de el codigo de recepcion :
#include <Arduino.h>
#include <SoftwareSerial.h>
// IR Controller is connected to WeMos D1, D2
SoftwareSerial mySerial(D1, D2); // RX, TX
void start_learning_mode();
void read_ir_signal();
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
mySerial.begin(9600); // Start communicating with IR controller
start_learning_mode();
}
void loop() {
if (mySerial.available()) {
// Read the data from buffer
read_ir_signal();
}
}
void start_learning_mode() {
Serial.println("Turnning on learning mode ..");
// Start learning mode by sending 224 (0xe0 in hex) to the ir controller
uint8_t data[] = {0xe0};
mySerial.write((uint8_t*)data, sizeof(data));
// Read the device response
int len = 0;
int r;
unsigned long timeout = 700;
unsigned long start = millis();
int buffer[1];
memset(buffer, 0, sizeof(buffer));
while (millis() - start < timeout) {
if (mySerial.available()) {
buffer[0] = mySerial.read();
}
yield();
}
if(buffer[0] == 255) { // ff
Serial.println("Error starting..");
}
else {
Serial.println("Ready to record the remote. Press any button now..");
}
}
void read_ir_signal() {
int len = 0;
int c;
unsigned long timeout = 700;
unsigned long start = millis();
int buffer[512];
memset(buffer, 0, sizeof(buffer));
while ((millis() - start < timeout)) {
if (mySerial.available()) {
c = mySerial.read();
buffer[len++] = c;
//Serial.print(c);
//Serial.println(",");
}
yield();
}
String ir_signal = "";
unsigned int num = 0;
for (int idx = 0; idx < len; idx++) {
ir_signal += buffer[idx];
// If not the last index, append "," to string
if(idx+1 != len ) {
ir_signal += ",";
}
// Ignore the last digit in the array. It is the checksum
if(idx != len -1) {
num += buffer[idx];
}
}
byte received_checksum = (byte)num;
int ir_signal_checksum = buffer[len -1];
if(received_checksum == ir_signal_checksum) {
Serial.println("Your ir signal:");
Serial.println(ir_signal);
} else {
Serial.println("Invalid checksum:");
}
}
Autor es kakopappa en GitHub
La segunda parte es esta con el ESP8266 quiero saber de igual manera como conectar el emisor IR:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <functional>
#include <SoftwareSerial.h>
void prepareIds();
boolean connectWifi();
boolean connectUDP();
void startHttpServer();
void turnOnTv();
void turnOffTv();
const char* ssid = "Aruna"; //TODO: replace wifi-name
const char* password = "********"; //TODO: replace wifi-password
String device_name = "tv"; //TODO: Change to your device name
unsigned int localPort = 1900; // local port to listen on
WiFiUDP UDP;
boolean udpConnected = false;
IPAddress ipMulti(239, 255, 255, 250);
unsigned int portMulti = 1900; // local port to listen on
ESP8266WebServer HTTP(80);
boolean wifiConnected = false;
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
String serial;
String persistent_uuid;
boolean cannotConnectToWifi = false;
SoftwareSerial mySerial(D1, D2); // RX, TX
char* turnOnIrCode = "152,35,181,140, ....."; // Replace your IR code
char* turnOffIrCode = "152,35,181,140, ....."; // Replace your IR code
}
Solo es una parte del codigo , lo que me interesa saber es como conectar el IR