Угадай кто я
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRsend.h>
#include <LittleFS.h>
// если WEMOS
const uint8_t PIN_IR_TX = 4;//ножка подключения ИК-диода (GPIO4 (D2)-WEMOS D1 R1/GPIO14 -TIWE3S)
const uint8_t PIN_IR_RX = 5; //ножка подключения Фотодиода (GPIO13 (D7)-WEMOS D1 R1/GPIO5 -TIWE3S)
const uint8_t LED_BUILT = 2; //ножка подключения светодиода (GPIO2 (на плате)-WEMOS D1 R1/GPIO4 -TIWE3S)
const uint16_t CAPTURE_BUFFER_SIZE = 256;
const uint8_t TIMEOUT = 45; // 15
static const char irTypes[][14] PROGMEM = { "UNKNOWN", "UNUSED", "RC5", "RC6", "NEC", "SONY", "PANASONIC", "JVC", "SAMSUNG", "WHYNTER",
"AIWA_RC_T501", "LG", "SANYO", "MITSUBISHI", "DISH", "SHARP", "COOLIX", "DAIKIN", "DENON", "KELVINATOR", "SHERWOOD", "MITSUBISHI_AC",
"RCMM", "SANYO_LC7461", "RC5X", "GREE", "PRONTO", "NEC_LIKE", "ARGO", "TROTEC" };
// Установить имя своей сети - SSID и пароль
const char* ssid = "MTS838FT_486C53"; // Имя wifi сети
const char* password = "40159989"; //пароль в wifi сети роутера
IPAddress local_IP(192, 168, 10, 1); // IP-адрес устройства в wifi сети роутера (это адрес первого приемо-передатчика)
IPAddress gateway(192, 168, 10, 1);
IPAddress subnet(255, 255, 255, 0);
ESP8266WebServer server(80);
IRrecv irRX(PIN_IR_RX, CAPTURE_BUFFER_SIZE, TIMEOUT, true);
IRsend irTX(PIN_IR_TX);
decode_results results;
String code1 { "ИНФРОКРАСНЫЙ" };
String code2 { " ПУЛЬТ" };
String kn[] { "1000000001", "2000000002","3000000003","4000000004","5000000005","6000000006","7000000007","8000000008","9000000009"}; // массив кодов кнопок
String mem {"000"}; // номер кнопки при присвоения кода
String strRead = "pointer-events: none;color: #FF9033;"; // строка блокирования кнопки "СЧИТАТЬ КОД"
String strIzm = ""; // строка блокирования кнопки "ИЗМЕНИТЬ"
String strWrite = "pointer-events: none;color: #000;"; // строка блокирования кнопки "СОХРАНИТЬ В ПУЛЬТЕ"
//********************************
void setup() {
Serial.begin(115200);
delay(100);
pinMode(PIN_IR_TX, OUTPUT);
pinMode(PIN_IR_RX, INPUT);
pinMode(LED_BUILT, OUTPUT);
digitalWrite(LED_BUILT, HIGH);
irRX.enableIRIn();
irTX.begin();
// создаем точку доступа Wi-Fi сети
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(local_IP, gateway, subnet);
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
server.on("/", handle_OnConnect);//исполнить handle_OnConnect при пустом запросе
server.on("/command", handle_command);//исполнить handle_command при запросе command
server.on("/read", handle_read);//исполнить handle_read при запросе read
server.on("/remem", handle_remem);//исполнить handle_remem при запросе remem
server.on("/change", handle_change);//исполнить handle_change при запросе remem
server.onNotFound(handle_NotFound);//исполнить handle_NotFound при неизвестном запросе
server.begin();
Serial.println("HTTP server started");
if(!LittleFS.begin()){
Serial.println("An Error has occurred while mounting SPIFFS");
return;
}
File file = LittleFS.open("/d.txt", "r");
if(!file){
Serial.println("Failed to open file for reading");
return;
}
else
{
//Serial.println(file.size());
int ii = 0; // для определения конца чтения
while(ii < 9){
file.seek(ii*12);
kn[ii] = file.readString();
//Serial.println(kn[ii]);
ii++;
}
file.close();
}
}
Угадай кто я
//*******************************************************
void loop() {
server.handleClient();//приём http запросов
}
//*******************************
void handle_OnConnect(){
server.send(200, "text/html", SendHTML());
}
//*******************************
void handle_change() {
strRead = "";
strIzm = "pointer-events: none;color: #3368FF;";
strWrite = "";
server.send(200, "text/html", SendHTML());
}
//*******************************
void handle_command() {
irRX.disableIRIn();
char charBuf[14];
mem = server.arg(0); // запоминаем номер кнопки для которой надо внести код
server.arg(1).toCharArray(charBuf, 14);
irTX.sendNEC(strtoul(charBuf,NULL,16),32);
irRX.enableIRIn();
server.send(200, "text/html", SendHTML());
}
//*******************************
void handle_read() {
digitalWrite(LED_BUILT,LOW); // зажигаем светодиод
Serial.print("\n read IR_code");
int i=0;
while ((!irRX.decode(&results))&&i<40)// ждем сигнала с пульта 20 секунд
{
delay(500);
Serial.print(".");
i = i+1;
}
if(i<40){
code1 = String(FPSTR(irTypes[results.decode_type - UNKNOWN]));
code2 = String((uint32_t)results.value,HEX);
if(mem =="kn1") kn[0] = code2; // заносим код в соответствующую ячейку-кнопку
else if(mem == "kn2") kn[1] = code2;
else if(mem == "kn3") kn[2] = code2;
else if(mem == "kn4") kn[3] = code2;
else if(mem == "kn5") kn[4] = code2;
else if(mem == "kn6") kn[5] = code2;
else if(mem == "kn7") kn[6] = code2;
else if(mem == "kn8") kn[7] = code2;
else if(mem == "kn9") kn[8] = code2;
}
else {
irRX.resume();
code1 = "UNKNOWN";
code2 = "0";
}
server.send(200, "text/html", SendHTML());
digitalWrite(LED_BUILT,HIGH); // гасим светодиод
}
//*******************************
void handle_remem() {
digitalWrite(LED_BUILT,LOW); // зажигаем светодиод
Serial.print("\n remem IR_code");
File file = LittleFS.open("/d.txt", "w");
if(!file){
Serial.println("Failed to open file for writing");
return;
}
int ii = 0;
while(ii < 9){
file.write((char *)kn[ii].c_str(),12);
ii++;
}
file.close();
strRead = "pointer-events: none;color: #FF9033;"; // блокируем кнопку "СЧИТАТЬ КОД"
strIzm = ""; // активируем кнопку "ИЗМЕНИТЬ"
strWrite = "pointer-events: none;color: #000;"; // блокируем кнопку "СОХРАНИТЬ В ПУЛЬТЕ"
server.send(200, "text/html", SendHTML());
digitalWrite(LED_BUILT,HIGH); // гасим светодиод
}
//**********************************
void handle_NotFound(){
server.send(404, "text/plain", "Not found");
}
//**********************************
String SendHTML(){
String ptr = "<!DOCTYPE html> <html>\n";
ptr +="<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n";
ptr +="<title>IR pult</title>\n";
ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr +=".table {width: 90%; height: 100%; border: 2px solid #000;margin: auto;}\n";
ptr +=".button {display: block;width: auto; height: auto; background-color: #1abc9c;border: none;color: white;padding: 50px 50px;text-align: center;text-decoration: none;font-size: 35px;margin: 15px auto 15px;cursor: pointer;border-radius: 24px;}\n";
ptr +=".button:active {background-color: #2c3e50;}\n";
ptr +="</style>\n";
ptr +="</head>\n";
ptr +="<body>\n";
ptr +="<h1>" + code1 + "|" + code2 + "</h1>\n";
ptr +="<h3 style=\"font-size: 12px;\">Для запоминания кнопки пульта телевизора - нажать кнопку ИЗМЕНИТЬ. Затем нажать одну из 9-ти кнопок на экране смартфона, затем нажать СЧИТАТЬ КОД. Когда загориться светодиод, поднести пульт телевизора к контроллеру, нажать на нём кнопку. Посде появления кода на экране, можно проверить работу запрограмированной кнопки на смартфоне. Повторить считывание кодов для всех 9-ти кнопок на смартфоне. В конце нажать СОХРАНИТЬ В ПУЛЬТЕ - все коды сохраняться в контроллере.</h3>\n";
ptr +="<table class=\"table\"><tr><td>\n";