Update IRRemote ESP8266 to 2.6.2 and add ESP32 support
This commit is contained in:
1 parent
2ee18320be
commit
24bcdbc97c
195 files changed
+22963
-4737
No files matched your search
@@ -23,9 +23,7 @@
|
||||
* * 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 <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Samsung.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* IRremoteESP8266: DumbIRRepeater.ino - Record and playback IR codes.
|
||||
* Copyright 2019 David Conran (crankyoldgit)
|
||||
*
|
||||
* This program will try to capture incoming IR messages and replay them back.
|
||||
* It doesn't use any of the advanced detection features, thus it will just
|
||||
* replay the messages at fixed modulated frequency (kFrequency) and a 50% duty
|
||||
* cycle.
|
||||
*
|
||||
* Note:
|
||||
* This might NOT be the frequency of the incoming message, so some replayed
|
||||
* messages may not work. The frequency of incoming messages & duty cycle is
|
||||
* lost at the point of the Hardware IR demodulator. The ESP can't see it.
|
||||
*
|
||||
* W A R N I N G
|
||||
* This code is just for educational/example use only. No help will be given
|
||||
* to you to make it do something else, or to make it work with some
|
||||
* weird device or circuit, or to make it more usable or practical.
|
||||
* If it works for you. Great. If not, Congratulations on changing/fixing it.
|
||||
*
|
||||
* An IR detector/demodulator must be connected to the input, kRecvPin.
|
||||
* An IR LED circuit must be connected to the output, kIrLedPin.
|
||||
*
|
||||
* Example circuit diagrams (both are needed):
|
||||
* https://github.com/markszabo/IRremoteESP8266/wiki#ir-receiving
|
||||
* 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
|
||||
* * Some 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 ESP will interfere.
|
||||
* * Pin 3/RX/RXD0: Any serial transmissions to the ESP 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.
|
||||
*
|
||||
* Changes:
|
||||
* Version 1.0: June, 2019
|
||||
* - Initial version.
|
||||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <IRsend.h>
|
||||
#include <IRrecv.h>
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRutils.h>
|
||||
|
||||
// ==================== start of TUNEABLE PARAMETERS ====================
|
||||
|
||||
// The GPIO an IR detector/demodulator is connected to. Recommended: 14 (D5)
|
||||
const uint16_t kRecvPin = 14;
|
||||
|
||||
// GPIO to use to control the IR LED circuit. Recommended: 4 (D2).
|
||||
const uint16_t kIrLedPin = 4;
|
||||
|
||||
// The Serial connection baud rate.
|
||||
// NOTE: Make sure you set your Serial Monitor to the same speed.
|
||||
const uint32_t kBaudRate = 115200;
|
||||
|
||||
// As this program is a special purpose capture/resender, let's use a larger
|
||||
// than expected buffer so we can handle very large IR messages.
|
||||
// i.e. Up to 512 bits.
|
||||
const uint16_t kCaptureBufferSize = 1024;
|
||||
|
||||
// kTimeout is the Nr. of milli-Seconds of no-more-data before we consider a
|
||||
// message ended.
|
||||
const uint8_t kTimeout = 50; // Milli-Seconds
|
||||
|
||||
// kFrequency is the modulation frequency all messages will be replayed at.
|
||||
const uint16_t kFrequency = 38000; // in Hz. e.g. 38kHz.
|
||||
|
||||
// ==================== end of TUNEABLE PARAMETERS ====================
|
||||
|
||||
// The IR transmitter.
|
||||
IRsend irsend(kIrLedPin);
|
||||
// The IR receiver.
|
||||
IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, false);
|
||||
// Somewhere to store the captured message.
|
||||
decode_results results;
|
||||
|
||||
// This section of code runs only once at start-up.
|
||||
void setup() {
|
||||
irrecv.enableIRIn(); // Start up the IR receiver.
|
||||
irsend.begin(); // Start up the IR sender.
|
||||
|
||||
Serial.begin(kBaudRate, SERIAL_8N1);
|
||||
while (!Serial) // Wait for the serial connection to be establised.
|
||||
delay(50);
|
||||
Serial.println();
|
||||
|
||||
Serial.print("DumbIRRepeater is now running and waiting for IR input "
|
||||
"on Pin ");
|
||||
Serial.println(kRecvPin);
|
||||
Serial.print("and will retransmit it on Pin ");
|
||||
Serial.println(kIrLedPin);
|
||||
}
|
||||
|
||||
// The repeating section of the code
|
||||
void loop() {
|
||||
// Check if an IR message has been received.
|
||||
if (irrecv.decode(&results)) { // We have captured something.
|
||||
// The capture has stopped at this point.
|
||||
|
||||
// Convert the results into an array suitable for sendRaw().
|
||||
// resultToRawArray() allocates the memory we need for the array.
|
||||
uint16_t *raw_array = resultToRawArray(&results);
|
||||
// Find out how many elements are in the array.
|
||||
uint16_t length = getCorrectedRawLength(&results);
|
||||
// Send it out via the IR LED circuit.
|
||||
irsend.sendRaw(raw_array, length, kFrequency);
|
||||
// Resume capturing IR messages. It was not restarted until after we sent
|
||||
// the message so we didn't capture our own message.
|
||||
irrecv.resume();
|
||||
// Deallocate the memory allocated by resultToRawArray().
|
||||
delete [] raw_array;
|
||||
|
||||
// Display a crude timestamp & notification.
|
||||
uint32_t now = millis();
|
||||
Serial.printf(
|
||||
"%06u.%03u: A message that was %d entries long was retransmitted.\n",
|
||||
now / 1000, now % 1000, length);
|
||||
}
|
||||
yield(); // Or delay(milliseconds); This ensures the ESP doesn't WDT reset.
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
[platformio]
|
||||
lib_extra_dirs = ../../
|
||||
src_dir=.
|
||||
|
||||
[common]
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
@@ -36,9 +36,7 @@
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -37,10 +37,13 @@
|
||||
* can check your wifi router for it's address.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#if defined(ESP8266)
|
||||
#include <ESP8266WiFi.h>
|
||||
#endif // ESP8266
|
||||
#if defined(ESP32)
|
||||
#include <WiFi.h>
|
||||
#endif // ESP32
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <WiFiClient.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -0,0 +1,334 @@
|
||||
/*
|
||||
* Send & receive arbitrary IR codes via a web server or MQTT.
|
||||
* Copyright David Conran 2016, 2017, 2018, 2019
|
||||
*/
|
||||
#ifndef EXAMPLES_IRMQTTSERVER_IRMQTTSERVER_H_
|
||||
#define EXAMPLES_IRMQTTSERVER_IRMQTTSERVER_H_
|
||||
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRrecv.h>
|
||||
#include <IRsend.h>
|
||||
#include <IRtimer.h>
|
||||
#include <IRutils.h>
|
||||
#include <IRac.h>
|
||||
|
||||
// ---------------- Start of User Configuration Section ------------------------
|
||||
|
||||
#ifndef MQTT_ENABLE
|
||||
#define MQTT_ENABLE true // Whether or not MQTT is used at all.
|
||||
#endif // MQTT_ENABLE
|
||||
|
||||
// ---------------------- Board Related Settings -------------------------------
|
||||
// NOTE: Make sure you set your Serial Monitor to the same speed.
|
||||
#define BAUD_RATE 115200 // Serial port Baud rate.
|
||||
|
||||
// Change if you need multiple independent send gpios & topics. (MQTT only)
|
||||
const uint8_t kNrOfIrTxGpios = 1;
|
||||
// Default GPIO the IR LED is connected to/controlled by. GPIO 4 = D2.
|
||||
// For an ESP-01 we suggest you use RX/GPIO3/Pin 7. i.e. kDefaultIrLed = 3
|
||||
// Note: A value of -1 means unused.
|
||||
const int8_t kDefaultIrLed = 4; // <=- CHANGE_ME (optional)
|
||||
// Default GPIO the IR demodulator is connected to/controlled by. GPIO 14 = D5.
|
||||
const int8_t kDefaultIrRx = 14; // <=- CHANGE_ME (optional)
|
||||
|
||||
// Enable/disable receiving/decoding IR messages entirely.
|
||||
// Note: IR_RX costs about 40k+ of program memory.
|
||||
#define IR_RX true
|
||||
|
||||
// Should we use PULLUP on the IR Rx gpio?
|
||||
#define IR_RX_PULLUP false
|
||||
|
||||
// --------------------- Network Related Settings ------------------------------
|
||||
const uint16_t kHttpPort = 80; // The TCP port the HTTP server is listening on.
|
||||
// Change to 'true'/'false' if you do/don't want these features or functions.
|
||||
#define USE_STATIC_IP false // Change to 'true' if you don't want to use DHCP.
|
||||
// We obtain our network config via DHCP by default but allow an easy way to
|
||||
// use a static IP config.
|
||||
#if USE_STATIC_IP
|
||||
const IPAddress kIPAddress = IPAddress(10, 0, 1, 78);
|
||||
const IPAddress kGateway = IPAddress(10, 0, 1, 1);
|
||||
const IPAddress kSubnetMask = IPAddress(255, 255, 255, 0);
|
||||
#endif // USE_STATIC_IP
|
||||
|
||||
// See: https://github.com/tzapu/WiFiManager#filter-networks for these settings.
|
||||
#define HIDE_DUPLIATE_NETWORKS false // Should WifiManager hide duplicate SSIDs
|
||||
// #define MIN_SIGNAL_STRENGTH 20 // Minimum WiFi signal stength (percentage)
|
||||
// before we will connect.
|
||||
// The unset default is 8%.
|
||||
// (Uncomment to enable)
|
||||
// Do you want/need mdns enabled? (https://en.wikipedia.org/wiki/Multicast_DNS)
|
||||
#define MDNS_ENABLE true // `false` to disable and save ~21k of program space.
|
||||
|
||||
// ----------------------- HTTP Related Settings -------------------------------
|
||||
#define FIRMWARE_OTA true // Allow remote update of the firmware via http.
|
||||
// Less secure if enabled.
|
||||
// Note: Firmware OTA is also disabled until
|
||||
// a password is set.
|
||||
#define HTML_PASSWORD_ENABLE false // Protect access to the HTML interface.
|
||||
// Note: OTA & GPIO updates are always
|
||||
// passworded.
|
||||
// If you do not set a password, Firmware OTA & GPIO updates will be blocked.
|
||||
|
||||
// ----------------------- MQTT Related Settings -------------------------------
|
||||
#if MQTT_ENABLE
|
||||
const uint32_t kMqttReconnectTime = 5000; // Delay(ms) between reconnect tries.
|
||||
|
||||
#define MQTT_ACK "sent" // Sub-topic we send back acknowledgements on.
|
||||
#define MQTT_SEND "send" // Sub-topic we get new commands from.
|
||||
#define MQTT_RECV "received" // Topic we send received IRs to.
|
||||
#define MQTT_LOG "log" // Topic we send log messages to.
|
||||
#define MQTT_LWT "status" // Topic for the Last Will & Testament.
|
||||
#define MQTT_CLIMATE "ac" // Sub-topic for the climate topics.
|
||||
#define MQTT_CLIMATE_CMND "cmnd" // Sub-topic for the climate command topics.
|
||||
#define MQTT_CLIMATE_STAT "stat" // Sub-topic for the climate stat topics.
|
||||
#define MQTTbroadcastInterval 10 * 60 // Seconds between rebroadcasts
|
||||
|
||||
#define QOS 1 // MQTT broker should queue up any unreceived messages for us
|
||||
// #define QOS 0 // MQTT broker WON'T queue up messages for us. Fire & Forget.
|
||||
#endif // MQTT_ENABLE
|
||||
|
||||
// ------------------------ IR Capture Settings --------------------------------
|
||||
// Should we stop listening for IR messages when we send a message via IR?
|
||||
// Set this to `true` if your IR demodulator is picking up self transmissions.
|
||||
// Use `false` if it isn't or can't see the self-sent transmissions
|
||||
// Using `true` may mean some incoming IR messages are lost or garbled.
|
||||
// i.e. `false` is better if you can get away with it.
|
||||
#define DISABLE_CAPTURE_WHILE_TRANSMITTING true
|
||||
// Let's use a larger than normal buffer so we can handle AirCon remote codes.
|
||||
const uint16_t kCaptureBufferSize = 1024;
|
||||
#if DECODE_AC
|
||||
// Some A/C units have gaps in their protocols of ~40ms. e.g. Kelvinator
|
||||
// A value this large may swallow repeats of some protocols
|
||||
const uint8_t kCaptureTimeout = 50; // Milliseconds
|
||||
#else // DECODE_AC
|
||||
// Suits most messages, while not swallowing many repeats.
|
||||
const uint8_t kCaptureTimeout = 15; // Milliseconds
|
||||
#endif // DECODE_AC
|
||||
// Ignore unknown messages with <10 pulses (see also REPORT_UNKNOWNS)
|
||||
const uint16_t kMinUnknownSize = 2 * 10;
|
||||
#define REPORT_UNKNOWNS false // Report inbound IR messages that we don't know.
|
||||
#define REPORT_RAW_UNKNOWNS false // Report the whole buffer, recommended:
|
||||
// MQTT_MAX_PACKET_SIZE of 1024 or more
|
||||
|
||||
// Should we use and report individual A/C settings we capture via IR if we
|
||||
// can understand the individual settings of the remote.
|
||||
// e.g. Aquire the A/C settings from an actual A/C IR remote and override
|
||||
// any local settings set via MQTT/HTTP etc.
|
||||
#define USE_DECODED_AC_SETTINGS true // `false` to disable. `true` to enable.
|
||||
// Should we allow or ignore an A/C IR remote to override the A/C protocol/model
|
||||
// as set via MQTT or HTTP?
|
||||
// e.g. If `true`, you can use any fully supported A/C remote to control
|
||||
// another brand's or model's A/C unit. `false` means change to the new
|
||||
// protocol/model if we support it via `USE_DECODED_AC_SETTINGS`.
|
||||
#define IGNORE_DECODED_AC_PROTOCOL true
|
||||
// Do we (re-)send the captured & decoded A/C message via the IR_LED?
|
||||
// `false` if you don't want to repeat the captured message.
|
||||
// e.g. Useful if the IR demodulator is located in the path between the remote
|
||||
// and the A/C unit so the command isn't sent twice.
|
||||
// `true` if want it sent anyway.
|
||||
// e.g. The IR demodulator is in a completely different location than than the
|
||||
// actual a/c unit.
|
||||
#define REPLAY_DECODED_AC_MESSAGE false
|
||||
|
||||
// ------------------------ Advanced Usage Only --------------------------------
|
||||
|
||||
#define KEY_PROTOCOL "protocol"
|
||||
#define KEY_MODEL "model"
|
||||
#define KEY_POWER "power"
|
||||
#define KEY_MODE "mode"
|
||||
#define KEY_TEMP "temp"
|
||||
#define KEY_FANSPEED "fanspeed"
|
||||
#define KEY_SWINGV "swingv"
|
||||
#define KEY_SWINGH "swingh"
|
||||
#define KEY_QUIET "quiet"
|
||||
#define KEY_TURBO "turbo"
|
||||
#define KEY_LIGHT "light"
|
||||
#define KEY_BEEP "beep"
|
||||
#define KEY_ECONO "econo"
|
||||
#define KEY_SLEEP "sleep"
|
||||
#define KEY_FILTER "filter"
|
||||
#define KEY_CLEAN "clean"
|
||||
#define KEY_CELSIUS "use_celsius"
|
||||
|
||||
// HTML arguments we will parse for IR code information.
|
||||
#define KEY_TYPE "type" // KEY_PROTOCOL is also checked too.
|
||||
#define KEY_CODE "code"
|
||||
#define KEY_BITS "bits"
|
||||
#define KEY_REPEAT "repeats"
|
||||
|
||||
// GPIO html/config keys
|
||||
#define KEY_TX_GPIO "tx"
|
||||
#define KEY_RX_GPIO "rx"
|
||||
|
||||
// Text for Last Will & Testament status messages.
|
||||
const char* kLwtOnline = "Online";
|
||||
const char* kLwtOffline = "Offline";
|
||||
|
||||
const uint8_t kHostnameLength = 30;
|
||||
const uint8_t kPortLength = 5; // Largest value of uint16_t is "65535".
|
||||
const uint8_t kUsernameLength = 15;
|
||||
const uint8_t kPasswordLength = 20;
|
||||
|
||||
// -------------------------- Debug Settings -----------------------------------
|
||||
// Debug output is disabled if any of the IR pins are on the TX (D1) pin.
|
||||
// See `isSerialGpioUsedByIr()`.
|
||||
// Note: Debug costs ~6k of program space.
|
||||
#ifndef DEBUG
|
||||
#define DEBUG false // Change to 'true' for serial debug output.
|
||||
#endif // DEBUG
|
||||
|
||||
// ----------------- End of User Configuration Section -------------------------
|
||||
|
||||
// Constants
|
||||
#define _MY_VERSION_ "v1.2.0"
|
||||
|
||||
const uint8_t kRebootTime = 15; // Seconds
|
||||
const uint8_t kQuickDisplayTime = 2; // Seconds
|
||||
|
||||
// Gpio related
|
||||
const int8_t kGpioUnused = -1;
|
||||
#if defined(ESP8266)
|
||||
const int8_t kTxGpios[] = {-1, 0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16};
|
||||
const int8_t kRxGpios[] = {-1, 0, 1, 2, 3, 4, 5, 12, 13, 14, 15};
|
||||
#endif // ESP8266
|
||||
#if defined(ESP32)
|
||||
const int8_t kTxGpios[] = {
|
||||
-1, 0, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 28, 29, 30, 31, 32, 33};
|
||||
const int8_t kRxGpios[] = {
|
||||
-1, 1, 2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
||||
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39};
|
||||
#endif // ESP32
|
||||
|
||||
// JSON stuff
|
||||
// Name of the json config file in SPIFFS.
|
||||
const char* kConfigFile = "/config.json";
|
||||
const char* kMqttServerKey = "mqtt_server";
|
||||
const char* kMqttPortKey = "mqtt_port";
|
||||
const char* kMqttUserKey = "mqtt_user";
|
||||
const char* kMqttPassKey = "mqtt_pass";
|
||||
const char* kMqttPrefixKey = "mqtt_prefix";
|
||||
const char* kHostnameKey = "hostname";
|
||||
const char* kHttpUserKey = "http_user";
|
||||
const char* kHttpPassKey = "http_pass";
|
||||
const char* kCommandDelimiter = ",";
|
||||
|
||||
// URLs
|
||||
const char* kUrlRoot = "/";
|
||||
const char* kUrlAdmin = "/admin";
|
||||
const char* kUrlAircon = "/aircon";
|
||||
const char* kUrlSendDiscovery = "/send_discovery";
|
||||
const char* kUrlExamples = "/examples";
|
||||
const char* kUrlGpio = "/gpio";
|
||||
const char* kUrlGpioSet = "/gpio/set";
|
||||
const char* kUrlInfo = "/info";
|
||||
const char* kUrlReboot = "/quitquitquit";
|
||||
const char* kUrlWipe = "/reset";
|
||||
|
||||
#if MQTT_ENABLE
|
||||
const uint32_t kBroadcastPeriodMs = MQTTbroadcastInterval * 1000; // mSeconds.
|
||||
const uint32_t kStatListenPeriodMs = 5 * 1000; // mSeconds
|
||||
const int32_t kMaxPauseMs = 10000; // 10 Seconds.
|
||||
const char* kSequenceDelimiter = ";";
|
||||
const char kPauseChar = 'P';
|
||||
#if defined(ESP8266)
|
||||
const uint32_t kChipId = ESP.getChipId();
|
||||
#endif // ESP8266
|
||||
#if defined(ESP32)
|
||||
const uint32_t kChipId = ESP.getEfuseMac(); // Discard the top 16 bits.
|
||||
#endif // ESP32
|
||||
|
||||
const char* kClimateTopics =
|
||||
"(" KEY_PROTOCOL "|" KEY_MODEL "|" KEY_POWER "|" KEY_MODE "|" KEY_TEMP "|"
|
||||
KEY_FANSPEED "|" KEY_SWINGV "|" KEY_SWINGH "|" KEY_QUIET "|"
|
||||
KEY_TURBO "|" KEY_LIGHT "|" KEY_BEEP "|" KEY_ECONO "|" KEY_SLEEP "|"
|
||||
KEY_FILTER "|" KEY_CLEAN "|" KEY_CELSIUS ")<br>";
|
||||
|
||||
void mqttCallback(char* topic, byte* payload, unsigned int length);
|
||||
String listOfCommandTopics(void);
|
||||
void handleSendMqttDiscovery(void);
|
||||
void subscribing(const String topic_name);
|
||||
void unsubscribing(const String topic_name);
|
||||
void mqttLog(const String mesg);
|
||||
bool mountSpiffs(void);
|
||||
bool reconnect(void);
|
||||
void receivingMQTT(String const topic_name, String const callback_str);
|
||||
void callback(char* topic, byte* payload, unsigned int length);
|
||||
void sendMQTTDiscovery(const char *topic);
|
||||
void doBroadcast(TimerMs *timer, const uint32_t interval,
|
||||
const stdAc::state_t state, const bool retain,
|
||||
const bool force);
|
||||
#endif // MQTT_ENABLE
|
||||
bool isSerialGpioUsedByIr(void);
|
||||
void debug(const char *str);
|
||||
void saveWifiConfigCallback(void);
|
||||
void saveWifiConfig(void);
|
||||
void loadWifiConfigFile(void);
|
||||
String msToHumanString(uint32_t const msecs);
|
||||
String timeElapsed(uint32_t const msec);
|
||||
String timeSince(uint32_t const start);
|
||||
String gpioToString(const int16_t gpio);
|
||||
uint8_t getDefaultIrSendIdx(void);
|
||||
IRsend* getDefaultIrSendPtr(void);
|
||||
int8_t getDefaultTxGpio(void);
|
||||
String listOfTxGpios(void);
|
||||
bool hasUnsafeHTMLChars(String input);
|
||||
String htmlHeader(const String title, const String h1_text = "");
|
||||
String htmlEnd(void);
|
||||
String htmlButton(const String url, const String button,
|
||||
const String text = "");
|
||||
String htmlMenu(void);
|
||||
void handleRoot(void);
|
||||
String addJsReloadUrl(const String url, const uint16_t timeout_s,
|
||||
const bool notify);
|
||||
void handleExamples(void);
|
||||
String htmlSelectBool(const String name, const bool def);
|
||||
String htmlSelectProtocol(const String name, const decode_type_t def);
|
||||
String htmlSelectModel(const String name, const int16_t def);
|
||||
String htmlSelectMode(const String name, const stdAc::opmode_t def);
|
||||
String htmlSelectFanspeed(const String name, const stdAc::fanspeed_t def);
|
||||
String htmlSelectSwingv(const String name, const stdAc::swingv_t def);
|
||||
String htmlSelectSwingh(const String name, const stdAc::swingh_t def);
|
||||
void handleAirCon(void);
|
||||
void handleAirConSet(void);
|
||||
void handleAdmin(void);
|
||||
void handleInfo(void);
|
||||
void handleReset(void);
|
||||
void handleReboot(void);
|
||||
bool parseStringAndSendAirCon(IRsend *irsend, const uint16_t irType,
|
||||
const String str);
|
||||
uint16_t countValuesInStr(const String str, char sep);
|
||||
uint16_t * newCodeArray(const uint16_t size);
|
||||
#if SEND_GLOBALCACHE
|
||||
bool parseStringAndSendGC(IRsend *irsend, const String str);
|
||||
#endif // SEND_GLOBALCACHE
|
||||
#if SEND_PRONTO
|
||||
bool parseStringAndSendPronto(IRsend *irsend, const String str,
|
||||
uint16_t repeats);
|
||||
#endif // SEND_PRONTO
|
||||
#if SEND_RAW
|
||||
bool parseStringAndSendRaw(IRsend *irsend, const String str);
|
||||
#endif // SEND_RAW
|
||||
void handleIr(void);
|
||||
void handleNotFound(void);
|
||||
void setup_wifi(void);
|
||||
void init_vars(void);
|
||||
void setup(void);
|
||||
void loop(void);
|
||||
uint64_t getUInt64fromHex(char const *str);
|
||||
bool sendIRCode(IRsend *irsend, int const ir_type,
|
||||
uint64_t const code, char const * code_str, uint16_t bits,
|
||||
uint16_t repeat);
|
||||
bool sendInt(const String topic, const int32_t num, const bool retain);
|
||||
bool sendBool(const String topic, const bool on, const bool retain);
|
||||
bool sendString(const String topic, const String str, const bool retain);
|
||||
bool sendFloat(const String topic, const float_t temp, const bool retain);
|
||||
stdAc::state_t updateClimate(stdAc::state_t current, const String str,
|
||||
const String prefix, const String payload);
|
||||
bool cmpClimate(const stdAc::state_t a, const stdAc::state_t b);
|
||||
bool sendClimate(const stdAc::state_t prev, const stdAc::state_t next,
|
||||
const String topic_prefix, const bool retain,
|
||||
const bool forceMQTT, const bool forceIR,
|
||||
const bool enableIR = true);
|
||||
bool decodeCommonAc(const decode_results *decode);
|
||||
#endif // EXAMPLES_IRMQTTSERVER_IRMQTTSERVER_H_
|
||||
File diff suppressed because it is too large.
Load diff
@@ -3,26 +3,57 @@ lib_extra_dirs = ../../
|
||||
src_dir=.
|
||||
|
||||
[common]
|
||||
build_flags = -DMQTT_MAX_PACKET_SIZE=512
|
||||
build_flags = -DMQTT_MAX_PACKET_SIZE=768
|
||||
lib_ldf_mode = chain+
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
PubSubClient
|
||||
WifiManager@0.14
|
||||
ArduinoJson@<6.0
|
||||
|
||||
[common_esp8266]
|
||||
lib_deps_external =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
WifiManager@>=0.14
|
||||
|
||||
[common_esp32]
|
||||
lib_deps_external =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
https://github.com/tzapu/WiFiManager.git#development
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
${common_esp8266.lib_deps_external}
|
||||
|
||||
[env:d1_mini]
|
||||
platform=espressif8266
|
||||
framework=arduino
|
||||
board=d1_mini
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
${common_esp8266.lib_deps_external}
|
||||
|
||||
[env:d1_mini_no_mqtt]
|
||||
platform=espressif8266
|
||||
framework=arduino
|
||||
board=d1_mini
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags} -DMQTT_ENABLE=false
|
||||
lib_deps =
|
||||
${common_esp8266.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common_esp32.lib_deps_external}
|
||||
@@ -1,9 +1,11 @@
|
||||
/*
|
||||
* IRremoteESP8266: IRServer - demonstrates sending IR codes controlled from a webserver
|
||||
* Version 0.3 May, 2019
|
||||
* Version 0.2 June, 2017
|
||||
* Copyright 2015 Mark Szabo
|
||||
* Copyright 2019 David Conran
|
||||
*
|
||||
* An IR LED circuit *MUST* be connected to the ESP8266 on a pin
|
||||
* An IR LED circuit *MUST* be connected to the ESP on a pin
|
||||
* as specified by kIrLed below.
|
||||
*
|
||||
* TL;DR: The IR LED needs to be driven by a transistor for a good result.
|
||||
@@ -26,12 +28,17 @@
|
||||
* * 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
|
||||
#if defined(ESP8266)
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
#include <ESP8266mDNS.h>
|
||||
#endif // ESP8266
|
||||
#if defined(ESP32)
|
||||
#include <WiFi.h>
|
||||
#include <WebServer.h>
|
||||
#include <ESPmDNS.h>
|
||||
#endif // ESP32
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <WiFiClient.h>
|
||||
@@ -40,18 +47,27 @@ const char* kSsid = ".....";
|
||||
const char* kPassword = ".....";
|
||||
MDNSResponder mdns;
|
||||
|
||||
#if defined(ESP8266)
|
||||
ESP8266WebServer server(80);
|
||||
#undef HOSTNAME
|
||||
#define HOSTNAME "esp8266"
|
||||
#endif // ESP8266
|
||||
#if defined(ESP32)
|
||||
WebServer server(80);
|
||||
#undef HOSTNAME
|
||||
#define HOSTNAME "esp32"
|
||||
#endif // ESP32
|
||||
|
||||
const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
|
||||
const uint16_t kIrLed = 4; // ESP GPIO pin to use. Recommended: 4 (D2).
|
||||
|
||||
IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message.
|
||||
|
||||
void handleRoot() {
|
||||
server.send(200, "text/html",
|
||||
"<html>" \
|
||||
"<head><title>ESP8266 Demo</title></head>" \
|
||||
"<head><title>" HOSTNAME " Demo</title></head>" \
|
||||
"<body>" \
|
||||
"<h1>Hello from ESP8266, you can send NEC encoded IR" \
|
||||
"<h1>Hello from " HOSTNAME ", 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>" \
|
||||
@@ -104,7 +120,11 @@ void setup(void) {
|
||||
Serial.print("IP address: ");
|
||||
Serial.println(WiFi.localIP().toString());
|
||||
|
||||
if (mdns.begin("esp8266", WiFi.localIP())) {
|
||||
#if defined(ESP8266)
|
||||
if (mdns.begin(HOSTNAME, WiFi.localIP())) {
|
||||
#else // ESP8266
|
||||
if (mdns.begin(HOSTNAME)) {
|
||||
#endif // ESP8266
|
||||
Serial.println("MDNS responder started");
|
||||
}
|
||||
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -16,9 +16,7 @@
|
||||
* Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRrecv.h>
|
||||
#include <IRutils.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
* LG added by Darryl Smith (based on the JVC protocol)
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRrecv.h>
|
||||
#include <IRutils.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -19,27 +19,30 @@
|
||||
* Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009,
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRrecv.h>
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRutils.h>
|
||||
// The following are only needed for extended decoding of A/C Messages
|
||||
#include <ir_Argo.h>
|
||||
#include <ir_Coolix.h>
|
||||
#include <ir_Daikin.h>
|
||||
#include <ir_Fujitsu.h>
|
||||
#include <ir_Goodweather.h>
|
||||
#include <ir_Gree.h>
|
||||
#include <ir_Haier.h>
|
||||
#include <ir_Hitachi.h>
|
||||
#include <ir_Kelvinator.h>
|
||||
#include <ir_Midea.h>
|
||||
#include <ir_Mitsubishi.h>
|
||||
#include <ir_MitsubishiHeavy.h>
|
||||
#include <ir_Panasonic.h>
|
||||
#include <ir_Samsung.h>
|
||||
#include <ir_Sharp.h>
|
||||
#include <ir_Tcl.h>
|
||||
#include <ir_Teco.h>
|
||||
#include <ir_Toshiba.h>
|
||||
#include <ir_Trotec.h>
|
||||
#include <ir_Vestel.h>
|
||||
#include <ir_Whirlpool.h>
|
||||
|
||||
@@ -117,8 +120,15 @@ IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, true);
|
||||
decode_results results; // Somewhere to store the results
|
||||
|
||||
// Display the human readable state of an A/C message if we can.
|
||||
void dumpACInfo(decode_results *results) {
|
||||
void dumpACInfo(const decode_results * const results) {
|
||||
String description = "";
|
||||
#if DECODE_ARGO
|
||||
if (results->decode_type == ARGO) {
|
||||
IRArgoAC ac(0);
|
||||
ac.setRaw(results->state);
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_ARGO
|
||||
#if DECODE_DAIKIN
|
||||
if (results->decode_type == DAIKIN) {
|
||||
IRDaikinESP ac(0);
|
||||
@@ -133,6 +143,13 @@ void dumpACInfo(decode_results *results) {
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_DAIKIN2
|
||||
#if DECODE_DAIKIN216
|
||||
if (results->decode_type == DAIKIN216) {
|
||||
IRDaikin216 ac(0);
|
||||
ac.setRaw(results->state);
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_DAIKIN216
|
||||
#if DECODE_FUJITSU_AC
|
||||
if (results->decode_type == FUJITSU_AC) {
|
||||
IRFujitsuAC ac(0);
|
||||
@@ -154,6 +171,18 @@ void dumpACInfo(decode_results *results) {
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_MITSUBISHI_AC
|
||||
#if DECODE_MITSUBISHIHEAVY
|
||||
if (results->decode_type == MITSUBISHI_HEAVY_88) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.setRaw(results->state);
|
||||
description = ac.toString();
|
||||
}
|
||||
if (results->decode_type == MITSUBISHI_HEAVY_152) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.setRaw(results->state);
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_MITSUBISHIHEAVY
|
||||
#if DECODE_TOSHIBA_AC
|
||||
if (results->decode_type == TOSHIBA_AC) {
|
||||
IRToshibaAC ac(0);
|
||||
@@ -161,6 +190,20 @@ void dumpACInfo(decode_results *results) {
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_TOSHIBA_AC
|
||||
#if DECODE_TROTEC
|
||||
if (results->decode_type == TROTEC) {
|
||||
IRTrotecESP ac(0);
|
||||
ac.setRaw(results->state);
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_TROTEC
|
||||
#if DECODE_GOODWEATHER
|
||||
if (results->decode_type == GOODWEATHER) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.setRaw(results->value); // Goodweather uses value instead of state.
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_GOODWEATHER
|
||||
#if DECODE_GREE
|
||||
if (results->decode_type == GREE) {
|
||||
IRGreeAC ac(0);
|
||||
@@ -196,6 +239,13 @@ void dumpACInfo(decode_results *results) {
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_SAMSUNG_AC
|
||||
#if DECODE_SHARP_AC
|
||||
if (results->decode_type == SHARP_AC) {
|
||||
IRSharpAc ac(0);
|
||||
ac.setRaw(results->state);
|
||||
description = ac.toString();
|
||||
}
|
||||
#endif // DECODE_SHARP_AC
|
||||
#if DECODE_COOLIX
|
||||
if (results->decode_type == COOLIX) {
|
||||
IRCoolixAC ac(0);
|
||||
@@ -250,9 +300,13 @@ void dumpACInfo(decode_results *results) {
|
||||
if (description != "") Serial.println("Mesg Desc.: " + description);
|
||||
}
|
||||
|
||||
// The section of code run only once at start-up.
|
||||
// This section of code runs only once at start-up.
|
||||
void setup() {
|
||||
#if defined(ESP8266)
|
||||
Serial.begin(kBaudRate, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||
#else // ESP8266
|
||||
Serial.begin(kBaudRate, SERIAL_8N1);
|
||||
#endif // ESP8266
|
||||
while (!Serial) // Wait for the serial connection to be establised.
|
||||
delay(50);
|
||||
Serial.println();
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -28,9 +28,7 @@
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
|
||||
@@ -53,7 +51,11 @@ uint8_t samsungState[kSamsungAcStateLength] = {
|
||||
|
||||
void setup() {
|
||||
irsend.begin();
|
||||
#if ESP8266
|
||||
Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);
|
||||
#else // ESP8266
|
||||
Serial.begin(115200, SERIAL_8N1);
|
||||
#endif // ESP8266
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -29,9 +29,7 @@
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -28,9 +28,7 @@
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* IRremoteESP8266: SmartIRRepeater.ino - Record and playback IR codes.
|
||||
* Copyright 2019 David Conran (crankyoldgit)
|
||||
*
|
||||
* This program will try to capture incoming IR messages and tries to
|
||||
* intelligently replay them back.
|
||||
* It uses the advanced detection features of the library, and the custom
|
||||
* sending routines. Thus it will try to use the correct frequencies,
|
||||
* duty cycles, and repeats as it thinks is required.
|
||||
* Anything it doesn't understand, it will try to replay back as best it can,
|
||||
* but at 38kHz.
|
||||
* Note:
|
||||
* That might NOT be the frequency of the incoming message, so some not
|
||||
* recogised messages that are replayed may not work. The frequency & duty
|
||||
* cycle of unknown incoming messages is lost at the point of the Hardware IR
|
||||
* demodulator. The ESP can't see it.
|
||||
*
|
||||
* W A R N I N G
|
||||
* This code is just for educational/example use only. No help will be given
|
||||
* to you to make it do something else, or to make it work with some
|
||||
* weird device or circuit, or to make it more usable or practical.
|
||||
* If it works for you. Great. If not, Congratulations on changing/fixing it.
|
||||
*
|
||||
* An IR detector/demodulator must be connected to the input, kRecvPin.
|
||||
* An IR LED circuit must be connected to the output, kIrLedPin.
|
||||
*
|
||||
* Example circuit diagrams (both are needed):
|
||||
* https://github.com/markszabo/IRremoteESP8266/wiki#ir-receiving
|
||||
* 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
|
||||
* * Some 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 ESP will interfere.
|
||||
* * Pin 3/RX/RXD0: Any serial transmissions to the ESP 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.
|
||||
*
|
||||
* Changes:
|
||||
* Version 1.0: June, 2019
|
||||
* - Initial version.
|
||||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <IRsend.h>
|
||||
#include <IRrecv.h>
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRutils.h>
|
||||
|
||||
// ==================== start of TUNEABLE PARAMETERS ====================
|
||||
|
||||
// The GPIO an IR detector/demodulator is connected to. Recommended: 14 (D5)
|
||||
const uint16_t kRecvPin = 14;
|
||||
|
||||
// GPIO to use to control the IR LED circuit. Recommended: 4 (D2).
|
||||
const uint16_t kIrLedPin = 4;
|
||||
|
||||
// The Serial connection baud rate.
|
||||
// NOTE: Make sure you set your Serial Monitor to the same speed.
|
||||
const uint32_t kBaudRate = 115200;
|
||||
|
||||
// As this program is a special purpose capture/resender, let's use a larger
|
||||
// than expected buffer so we can handle very large IR messages.
|
||||
const uint16_t kCaptureBufferSize = 1024; // 1024 == ~511 bits
|
||||
|
||||
// kTimeout is the Nr. of milli-Seconds of no-more-data before we consider a
|
||||
// message ended.
|
||||
const uint8_t kTimeout = 50; // Milli-Seconds
|
||||
|
||||
// kFrequency is the modulation frequency all UNKNOWN messages will be sent at.
|
||||
const uint16_t kFrequency = 38000; // in Hz. e.g. 38kHz.
|
||||
|
||||
// ==================== end of TUNEABLE PARAMETERS ====================
|
||||
|
||||
// The IR transmitter.
|
||||
IRsend irsend(kIrLedPin);
|
||||
// The IR receiver.
|
||||
IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, false);
|
||||
// Somewhere to store the captured message.
|
||||
decode_results results;
|
||||
|
||||
// This section of code runs only once at start-up.
|
||||
void setup() {
|
||||
irrecv.enableIRIn(); // Start up the IR receiver.
|
||||
irsend.begin(); // Start up the IR sender.
|
||||
|
||||
Serial.begin(kBaudRate, SERIAL_8N1);
|
||||
while (!Serial) // Wait for the serial connection to be establised.
|
||||
delay(50);
|
||||
Serial.println();
|
||||
|
||||
Serial.print("SmartIRRepeater is now running and waiting for IR input "
|
||||
"on Pin ");
|
||||
Serial.println(kRecvPin);
|
||||
Serial.print("and will retransmit it on Pin ");
|
||||
Serial.println(kIrLedPin);
|
||||
}
|
||||
|
||||
// The repeating section of the code
|
||||
void loop() {
|
||||
// Check if an IR message has been received.
|
||||
if (irrecv.decode(&results)) { // We have captured something.
|
||||
// The capture has stopped at this point.
|
||||
decode_type_t protocol = results.decode_type;
|
||||
uint16_t size = results.bits;
|
||||
bool success = true;
|
||||
// Is it a protocol we don't understand?
|
||||
if (protocol == decode_type_t::UNKNOWN) { // Yes.
|
||||
// Convert the results into an array suitable for sendRaw().
|
||||
// resultToRawArray() allocates the memory we need for the array.
|
||||
uint16_t *raw_array = resultToRawArray(&results);
|
||||
// Find out how many elements are in the array.
|
||||
size = getCorrectedRawLength(&results);
|
||||
// Send it out via the IR LED circuit.
|
||||
irsend.sendRaw(raw_array, size, kFrequency);
|
||||
// Deallocate the memory allocated by resultToRawArray().
|
||||
delete [] raw_array;
|
||||
} else if (hasACState(protocol)) { // Does the message require a state[]?
|
||||
// It does, so send with bytes instead.
|
||||
success = irsend.send(protocol, results.state, size / 8);
|
||||
} else { // Anything else must be a simple message protocol. ie. <= 64 bits
|
||||
success = irsend.send(protocol, results.value, size);
|
||||
}
|
||||
// Resume capturing IR messages. It was not restarted until after we sent
|
||||
// the message so we didn't capture our own message.
|
||||
irrecv.resume();
|
||||
|
||||
// Display a crude timestamp & notification.
|
||||
uint32_t now = millis();
|
||||
Serial.printf(
|
||||
"%06u.%03u: A %d-bit %s message was %ssuccessfully retransmitted.\n",
|
||||
now / 1000, now % 1000, size, typeToString(protocol).c_str(),
|
||||
success ? "" : "un");
|
||||
}
|
||||
yield(); // Or delay(milliseconds); This ensures the ESP doesn't WDT reset.
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
[platformio]
|
||||
lib_extra_dirs = ../../
|
||||
src_dir=.
|
||||
|
||||
[common]
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
@@ -23,9 +23,7 @@
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Argo.h>
|
||||
@@ -44,7 +42,7 @@ void loop() {
|
||||
// Set up what we want to send. See ir_Argo.cpp for all the options.
|
||||
ac.setPower(true);
|
||||
ac.setFan(kArgoFan1);
|
||||
ac.setCoolMode(kArgoCoolAuto);
|
||||
ac.setMode(kArgoAuto);
|
||||
ac.setTemp(25);
|
||||
|
||||
#if SEND_ARGO
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -24,9 +24,7 @@
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Daikin.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
// Copyright 2017 Jonny Graham, 2018 David Conran
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Fujitsu.h>
|
||||
@@ -30,11 +28,13 @@ void setup() {
|
||||
Serial.println("Default state of the remote.");
|
||||
printState();
|
||||
Serial.println("Setting desired state for A/C.");
|
||||
ac.setCmd(kFujitsuAcCmdTurnOn);
|
||||
ac.setSwing(kFujitsuAcSwingBoth);
|
||||
// See `fujitsu_ac_remote_model_t` in `ir_Fujitsu.h` for a list of models.
|
||||
ac.setModel(ARRAH2E);
|
||||
ac.setSwing(kFujitsuAcSwingOff);
|
||||
ac.setMode(kFujitsuAcModeCool);
|
||||
ac.setFanSpeed(kFujitsuAcFanHigh);
|
||||
ac.setTemp(24); // 24C
|
||||
ac.setCmd(kFujitsuAcCmdTurnOn);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -23,9 +23,7 @@
|
||||
* * 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 <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Kelvinator.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -23,9 +23,7 @@
|
||||
* * 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 <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Mitsubishi.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/* Copyright 2019 David Conran
|
||||
*
|
||||
* An IR LED circuit *MUST* be connected to the ESP8266 on a pin
|
||||
* as specified by kIrLed below.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <Arduino.h>
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_MitsubishiHeavy.h>
|
||||
|
||||
const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
|
||||
IRMitsubishiHeavy152Ac ac(kIrLed); // Set the GPIO used for sending messages.
|
||||
|
||||
void printState() {
|
||||
// Display the settings.
|
||||
Serial.println("Mitsubishi Heavy A/C remote is in the following state:");
|
||||
Serial.printf(" %s\n", ac.toString().c_str());
|
||||
// Display the encoded IR sequence.
|
||||
unsigned char* ir_code = ac.getRaw();
|
||||
Serial.print("IR Code: 0x");
|
||||
for (uint8_t i = 0; i < kMitsubishiHeavy152StateLength; i++)
|
||||
Serial.printf("%02X", ir_code[i]);
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
ac.begin();
|
||||
Serial.begin(115200);
|
||||
delay(200);
|
||||
|
||||
// Set up what we want to send. See ir_MitsubishiHeavy.(cpp|h) for all the
|
||||
// options.
|
||||
Serial.println("Default state of the remote.");
|
||||
printState();
|
||||
Serial.println("Setting desired state for A/C.");
|
||||
ac.setPower(true); // Turn it on.
|
||||
ac.setFan(kMitsubishiHeavy152FanMed); // Medium Fan
|
||||
ac.setMode(kMitsubishiHeavyCool); // Cool mode
|
||||
ac.setTemp(26); // Celsius
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVAuto); // Swing vertically
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHMiddle); // Swing Horizontally
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Now send the IR signal.
|
||||
Serial.println("Sending IR command to A/C ...");
|
||||
ac.send();
|
||||
printState();
|
||||
delay(5000);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
[platformio]
|
||||
lib_extra_dirs = ../../
|
||||
src_dir=.
|
||||
|
||||
[common]
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
@@ -0,0 +1,72 @@
|
||||
/* Copyright 2017, 2018 David Conran
|
||||
*
|
||||
* An IR LED circuit *MUST* be connected to the ESP8266 on a pin
|
||||
* as specified by kIrLed below.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <Arduino.h>
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Panasonic.h>
|
||||
|
||||
const uint16_t kIrLed = 4; // ESP8266 GPIO pin to use. Recommended: 4 (D2).
|
||||
IRPanasonicAc ac(kIrLed); // Set the GPIO used for sending messages.
|
||||
|
||||
void printState() {
|
||||
// Display the settings.
|
||||
Serial.println("Panasonic A/C remote is in the following state:");
|
||||
Serial.printf(" %s\n", ac.toString().c_str());
|
||||
// Display the encoded IR sequence.
|
||||
unsigned char* ir_code = ac.getRaw();
|
||||
Serial.print("IR Code: 0x");
|
||||
for (uint8_t i = 0; i < kPanasonicAcStateLength; i++)
|
||||
Serial.printf("%02X", ir_code[i]);
|
||||
Serial.println();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
ac.begin();
|
||||
Serial.begin(115200);
|
||||
delay(200);
|
||||
|
||||
// Set up what we want to send. See ir_Panasonic.cpp for all the options.
|
||||
Serial.println("Default state of the remote.");
|
||||
printState();
|
||||
Serial.println("Setting desired state for A/C.");
|
||||
ac.setModel(kPanasonicRkr);
|
||||
ac.on();
|
||||
ac.setFan(kPanasonicAcFanAuto);
|
||||
ac.setMode(kPanasonicAcCool);
|
||||
ac.setTemp(26);
|
||||
ac.setSwingVertical(kPanasonicAcSwingVAuto);
|
||||
ac.setSwingHorizontal(kPanasonicAcSwingHAuto);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// Now send the IR signal.
|
||||
#if SEND_PANASONIC_AC
|
||||
Serial.println("Sending IR command to A/C ...");
|
||||
ac.send();
|
||||
#endif // SEND_PANASONIC_AC
|
||||
printState();
|
||||
delay(5000);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
[platformio]
|
||||
lib_extra_dirs = ../../
|
||||
src_dir=.
|
||||
|
||||
[common]
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
@@ -23,9 +23,7 @@
|
||||
* * 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 <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Toshiba.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
@@ -23,9 +23,7 @@
|
||||
* for your first time. e.g. ESP-12 etc.
|
||||
*/
|
||||
|
||||
#ifndef UNIT_TEST
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
#include <IRremoteESP8266.h>
|
||||
#include <IRsend.h>
|
||||
#include <ir_Trotec.h>
|
||||
|
||||
@@ -6,11 +6,23 @@ src_dir=.
|
||||
build_flags =
|
||||
lib_deps_builtin =
|
||||
lib_deps_external =
|
||||
lib_ldf_mode = chain+
|
||||
|
||||
[env:nodemcuv2]
|
||||
platform = espressif8266
|
||||
framework = arduino
|
||||
board = nodemcuv2
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
${common.lib_deps_external}
|
||||
|
||||
[env:esp32dev]
|
||||
platform = espressif32
|
||||
framework = arduino
|
||||
board = esp32dev
|
||||
lib_ldf_mode = ${common.lib_ldf_mode}
|
||||
build_flags = ${common.build_flags}
|
||||
lib_deps =
|
||||
${common.lib_deps_builtin}
|
||||
|
||||
Reference in new issue
Block a user