5.10.0 20171201 * Upgrade library ArduinoJson to 5.11.2 * Upgrade library IRRemoteEsp8266 to 2.2.1 + 2 commits but disabled some protocols (code size reduction) * Upgrade library NeoPixelBus to 2.2.9 * Upgrade library OneWire to 2.3.3 + 6 commits and disabled CRC lookup-table (#define ONEWIRE_CRC8_TABLE 0) (code size reduction) * Update library PubSubClient to 2.6 + 9 commits and additional delay (#790) * Update core_esp8266_wiring_digital.c to latest (staged) level * Patch library I2Cdevlib-Core for esp8266-core 2.4.0-rc2 compatibility * Remove command EnergyReset 1..3 now replaced by ENergyReset1 to EnergyReset3 * Remove spaces in JSON messages (code size reduction) * Renamed xsns_05_ds18x20.ino to xsns_05_ds18x20_legacy.ino still using library OneWire and providing dynamic sensor scan * Fix possible iram1_0_seg compile error by shrinking ICACHE_RAM_ATTR code usage * Fix PWM watchdog timeout if Dimmer is set to 100 or Color set to 0xFF (#1146) * Fix Sonoff Bridge Learn Mode hang caused by unrecognised RF code (#1181) * Fix blank console log window by using XML character encoding (#1187) * Fix wrong response name for command HlwISet (#1214) * Fix DHT type sensor timeout recognition by distinguish "signal already there" from "timeout" (#1233) * Add fixed color options 1..12 to command Color * Add + (plus) and - (minus) to commands Dimmer (+10/-10), Speed and Scheme * Add + (plus) and - (minus) to command Color to select 1 out of 12 preset colors * Add + (plus) and - (minus) to command Ct to control ColdWarm led ColorTemperature (+34/-34) * Add commands EnergyReset1 0..42500, EnergyReset2 0..42500 and EnergyReset3 0..42500000 * to (Re)set Energy Today, Yesterday or Total respectively in Wh (#406, #685, #1202) * Add optional ADS1115 driver as alternative for unsupported I2Cdevlib in esp8266-core 2.4.0-rc2 * Add support for INA219 Voltage and Current sensor to be enabled in user_config.h with define USE_INA219 * Add support for Arilux LC11 (Clearing RF home code when selecting no Arilux module) * Add support for WS2812 RGBW ledstrips to be enabled in user_config.h with define USE_WS2812_CTYPE (#1156) * Add SettingsSaveAll routine to command SaveData to be used before controlled power down (#1202) * Add option PUSHBUTTON_TOGGLE (SwitchMode 7) to allow toggling on any switch change (#1221) * Add new xdrv_05_ds18x20.ino free from library OneWire and add the following features: * Add support for DS1822 * Add forced setting of 12-bit resolution for selected device types (#1222) * Add read temperature retry counter (#1215) * Fix lost sensors by performing sensor probe at restart only thereby removing dynamic sensor probe (#1215) * Fix sensor address sorting using ascending sort on sensor type followed by sensor address * Rewrite JSON resulting in shorter message allowing more sensors in default firmware image: * "DS18B20-1":{"Id":"00000483C23A","Temperature":19.5},"DS18B20-2":{"Id":"0000048EC44C","Temperature":19.6} * Add additional define in user_config.h to select either single sensor (defines disabled), new multi sensor (USE_DS18X20) or legacy multi sensor (USE_DS18X20_LEGACY) * Add clock support for more different pixel counts (#1226) * Add support for Sonoff Dual R2 (#1249) * Add FriendlyName to web page tab and add program information to web page footer (#1275)
122 lines
3.6 KiB
C++
122 lines
3.6 KiB
C++
/*
|
|
* IRremoteESP8266: IRServer - demonstrates sending IR codes controlled from a webserver
|
|
* Version 0.2 June, 2017
|
|
* Copyright 2015 Mark Szabo
|
|
*
|
|
* An IR LED circuit *MUST* be connected to ESP8266 pin 4 (D2).
|
|
*
|
|
* TL;DR: The IR LED needs to be driven by a transistor for a good result.
|
|
*
|
|
* Suggested circuit:
|
|
* https://github.com/markszabo/IRremoteESP8266/wiki#ir-sending
|
|
*
|
|
* Common mistakes & tips:
|
|
* * Don't just connect the IR LED directly to the pin, it won't
|
|
* have enough current to drive the IR LED effectively.
|
|
* * Make sure you have the IR LED polarity correct.
|
|
* See: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity
|
|
* * Typical digital camera/phones can be used to see if the IR LED is flashed.
|
|
* Replace the IR LED with a normal LED if you don't have a digital camera
|
|
* when debugging.
|
|
* * Avoid using the following pins unless you really know what you are doing:
|
|
* * Pin 0/D3: Can interfere with the boot/program mode & support circuits.
|
|
* * Pin 1/TX/TXD0: Any serial transmissions from the ESP8266 will interfere.
|
|
* * Pin 3/RX/RXD0: Any serial transmissions to the ESP8266 will interfere.
|
|
* * ESP-01 modules are tricky. We suggest you use a module with more GPIOs
|
|
* for your first time. e.g. ESP-12 etc.
|
|
*/
|
|
#ifndef UNIT_TEST
|
|
#include <Arduino.h>
|
|
#endif
|
|
#include <ESP8266WiFi.h>
|
|
#include <ESP8266WebServer.h>
|
|
#include <ESP8266mDNS.h>
|
|
#include <IRremoteESP8266.h>
|
|
#include <IRsend.h>
|
|
#include <WiFiClient.h>
|
|
|
|
const char* ssid = ".....";
|
|
const char* password = ".....";
|
|
MDNSResponder mdns;
|
|
|
|
ESP8266WebServer server(80);
|
|
|
|
IRsend irsend(4); // An IR LED is controlled by GPIO pin 4 (D2)
|
|
|
|
void handleRoot() {
|
|
server.send(200, "text/html",
|
|
"<html>" \
|
|
"<head><title>ESP8266 Demo</title></head>" \
|
|
"<body>" \
|
|
"<h1>Hello from ESP8266, you can send NEC encoded IR" \
|
|
"signals from here!</h1>" \
|
|
"<p><a href=\"ir?code=16769055\">Send 0xFFE01F</a></p>" \
|
|
"<p><a href=\"ir?code=16429347\">Send 0xFAB123</a></p>" \
|
|
"<p><a href=\"ir?code=16771222\">Send 0xFFE896</a></p>" \
|
|
"</body>" \
|
|
"</html>");
|
|
}
|
|
|
|
void handleIr() {
|
|
for (uint8_t i = 0; i < server.args(); i++) {
|
|
if (server.argName(i) == "code") {
|
|
uint32_t code = strtoul(server.arg(i).c_str(), NULL, 10);
|
|
irsend.sendNEC(code, 32);
|
|
}
|
|
}
|
|
handleRoot();
|
|
}
|
|
|
|
void handleNotFound() {
|
|
String message = "File Not Found\n\n";
|
|
message += "URI: ";
|
|
message += server.uri();
|
|
message += "\nMethod: ";
|
|
message += (server.method() == HTTP_GET)?"GET":"POST";
|
|
message += "\nArguments: ";
|
|
message += server.args();
|
|
message += "\n";
|
|
for (uint8_t i = 0; i < server.args(); i++)
|
|
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
|
|
server.send(404, "text/plain", message);
|
|
}
|
|
|
|
void setup(void) {
|
|
irsend.begin();
|
|
|
|
Serial.begin(115200);
|
|
WiFi.begin(ssid, password);
|
|
Serial.println("");
|
|
|
|
// Wait for connection
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
delay(500);
|
|
Serial.print(".");
|
|
}
|
|
Serial.println("");
|
|
Serial.print("Connected to ");
|
|
Serial.println(ssid);
|
|
Serial.print("IP address: ");
|
|
Serial.println(WiFi.localIP());
|
|
|
|
if (mdns.begin("esp8266", WiFi.localIP())) {
|
|
Serial.println("MDNS responder started");
|
|
}
|
|
|
|
server.on("/", handleRoot);
|
|
server.on("/ir", handleIr);
|
|
|
|
server.on("/inline", [](){
|
|
server.send(200, "text/plain", "this works as well");
|
|
});
|
|
|
|
server.onNotFound(handleNotFound);
|
|
|
|
server.begin();
|
|
Serial.println("HTTP server started");
|
|
}
|
|
|
|
void loop(void) {
|
|
server.handleClient();
|
|
}
|