Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * IRremoteESP8266: IRrecvDumpV2 - dump details of IR codes with IRrecv
- * An IR detector/demodulator must be connected to the input kRecvPin.
- *
- * Copyright 2009 Ken Shirriff, http://arcfn.com
- * Copyright 2017-2019 David Conran
- *
- * Example circuit diagram:
- * https://github.com/crankyoldgit/IRremoteESP8266/wiki#ir-receiving
- *
- * Based on Ken Shirriff's IrsendDemo Version 0.1 July, 2009,
- * https://github.com/crankyoldgit/IRremoteESP8266
- * Combined with https://github.com/tzapu/WiFiManager for easier use
- * By Kris Occhipinti 2022 https://pastebin.com/edit/cjiRBCbe
- */
- #include <Arduino.h>
- #include <assert.h>
- #include <IRrecv.h>
- #include <IRremoteESP8266.h>
- #include <IRac.h>
- #include <IRtext.h>
- #include <IRutils.h>
- #include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
- #include <ESP8266WebServer.h>
- ESP8266WebServer server(80);
- String data = "Please Press a Button on Your Remote\n";
- void handleRoot() {
- server.send(200, "text/html", String(data));
- }
- 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);
- }
- // ==================== start of TUNEABLE PARAMETERS ====================
- // An IR detector/demodulator is connected to GPIO pin 14
- // e.g. D5 on a NodeMCU board.
- // Note: GPIO 16 won't work on the ESP8266 as it does not have interrupts.
- // Note: GPIO 14 won't work on the ESP32-C3 as it causes the board to reboot.
- #ifdef ARDUINO_ESP32C3_DEV
- const uint16_t kRecvPin = 10; // 14 on a ESP32-C3 causes a boot loop.
- #else // ARDUINO_ESP32C3_DEV
- const uint16_t kRecvPin = 14; // pin 14 is D5 on wemos ESP
- #endif // ARDUINO_ESP32C3_DEV
- // The Serial connection baud rate.
- // i.e. Status message will be sent to the PC at this baud rate.
- // Try to avoid slow speeds like 9600, as you will miss messages and
- // cause other problems. 115200 (or faster) is recommended.
- // 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/decoder, let us use a larger
- // than normal buffer so we can handle Air Conditioner remote codes.
- const uint16_t kCaptureBufferSize = 1024;
- // kTimeout is the Nr. of milli-Seconds of no-more-data before we consider a
- // message ended.
- // This parameter is an interesting trade-off. The longer the timeout, the more
- // complex a message it can capture. e.g. Some device protocols will send
- // multiple message packets in quick succession, like Air Conditioner remotes.
- // Air Coniditioner protocols often have a considerable gap (20-40+ms) between
- // packets.
- // The downside of a large timeout value is a lot of less complex protocols
- // send multiple messages when the remote's button is held down. The gap between
- // them is often also around 20+ms. This can result in the raw data be 2-3+
- // times larger than needed as it has captured 2-3+ messages in a single
- // capture. Setting a low timeout value can resolve this.
- // So, choosing the best kTimeout value for your use particular case is
- // quite nuanced. Good luck and happy hunting.
- // NOTE: Don't exceed kMaxTimeoutMs. Typically 130ms.
- #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 kTimeout = 50;
- #else // DECODE_AC
- // Suits most messages, while not swallowing many repeats.
- const uint8_t kTimeout = 15;
- #endif // DECODE_AC
- // Alternatives:
- // const uint8_t kTimeout = 90;
- // Suits messages with big gaps like XMP-1 & some aircon units, but can
- // accidentally swallow repeated messages in the rawData[] output.
- //
- // const uint8_t kTimeout = kMaxTimeoutMs;
- // This will set it to our currently allowed maximum.
- // Values this high are problematic because it is roughly the typical boundary
- // where most messages repeat.
- // e.g. It will stop decoding a message and start sending it to serial at
- // precisely the time when the next message is likely to be transmitted,
- // and may miss it.
- // Set the smallest sized "UNKNOWN" message packets we actually care about.
- // This value helps reduce the false-positive detection rate of IR background
- // noise as real messages. The chances of background IR noise getting detected
- // as a message increases with the length of the kTimeout value. (See above)
- // The downside of setting this message too large is you can miss some valid
- // short messages for protocols that this library doesn't yet decode.
- //
- // Set higher if you get lots of random short UNKNOWN messages when nothing
- // should be sending a message.
- // Set lower if you are sure your setup is working, but it doesn't see messages
- // from your device. (e.g. Other IR remotes work.)
- // NOTE: Set this value very high to effectively turn off UNKNOWN detection.
- const uint16_t kMinUnknownSize = 12;
- // How much percentage lee way do we give to incoming signals in order to match
- // it?
- // e.g. +/- 25% (default) to an expected value of 500 would mean matching a
- // value between 375 & 625 inclusive.
- // Note: Default is 25(%). Going to a value >= 50(%) will cause some protocols
- // to no longer match correctly. In normal situations you probably do not
- // need to adjust this value. Typically that's when the library detects
- // your remote's message some of the time, but not all of the time.
- const uint8_t kTolerancePercentage = kTolerance; // kTolerance is normally 25%
- // Legacy (No longer supported!)
- //
- // Change to `true` if you miss/need the old "Raw Timing[]" display.
- #define LEGACY_TIMING_INFO false
- // ==================== end of TUNEABLE PARAMETERS ====================
- // Use turn on the save buffer feature for more complete capture coverage.
- IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, true);
- decode_results results; // Somewhere to store the results
- // 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);
- // Perform a low level sanity checks that the compiler performs bit field
- // packing as we expect and Endianness is as we expect.
- assert(irutils::lowLevelSanityCheck() == 0);
- Serial.printf("\n" D_STR_IRRECVDUMP_STARTUP "\n", kRecvPin);
- #if DECODE_HASH
- // Ignore messages with less than minimum on or off pulses.
- irrecv.setUnknownThreshold(kMinUnknownSize);
- #endif // DECODE_HASH
- irrecv.setTolerance(kTolerancePercentage); // Override the default tolerance.
- irrecv.enableIRIn(); // Start the receiver
- ///WiFi Manager Setup///
- WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP
- // it is a good practice to make sure your code sets wifi mode how you want it.
- // put your setup code here, to run once:
- //WiFiManager, Local intialization. Once its business is done, there is no need to keep it around
- WiFiManager wm;
- // reset settings - wipe stored credentials for testing
- // these are stored by the esp library
- //wm.resetSettings();
- // Automatically connect using saved credentials,
- // if connection fails, it starts an access point with the specified name ( "AutoConnectAP"),
- // if empty will auto generate SSID, if password is blank it will be anonymous AP (wm.autoConnect())
- // then goes into a blocking loop awaiting configuration and will return success result
- bool res;
- // res = wm.autoConnect(); // auto generated AP name from chipid
- res = wm.autoConnect("IR_ESP"); // anonymous ap
- //res = wm.autoConnect("AutoConnectAP","password"); // password protected ap
- if(!res) {
- Serial.println("Failed to connect");
- // ESP.restart();
- }
- else {
- //if you get here you have connected to the WiFi
- Serial.println("connected...yeey :)");
- }
- ///webserver setup///
- server.on("/", handleRoot);
- server.on("/inline", [](){
- server.send(200, "text/plain", "this works as well");
- });
- server.onNotFound(handleNotFound);
- server.begin();
- }
- // The repeating section of the code
- void loop() {
- // Check if the IR code has been received.
- if (irrecv.decode(&results)) {
- // Display a crude timestamp.
- uint32_t now = millis();
- Serial.printf(D_STR_TIMESTAMP " : %06u.%03u\n", now / 1000, now % 1000);
- // Check if we got an IR message that was to big for our capture buffer.
- if (results.overflow)
- Serial.printf(D_WARN_BUFFERFULL "\n", kCaptureBufferSize);
- // Display the library version the message was captured with.
- Serial.println(D_STR_LIBRARY " : v" _IRREMOTEESP8266_VERSION_STR "\n");
- // Display the tolerance percentage if it has been change from the default.
- if (kTolerancePercentage != kTolerance)
- Serial.printf(D_STR_TOLERANCE " : %d%%\n", kTolerancePercentage);
- // Display the basic output of what we found.
- Serial.print(resultToHumanReadableBasic(&results));
- // Display any extra A/C info if we have it.
- String description = IRAcUtils::resultAcToString(&results);
- if (description.length()) Serial.println(D_STR_MESGDESC ": " + description);
- yield(); // Feed the WDT as the text output can take a while to print.
- #if LEGACY_TIMING_INFO
- // Output legacy RAW timing info of the result.
- Serial.println(resultToTimingInfo(&results));
- yield(); // Feed the WDT (again)
- #endif // LEGACY_TIMING_INFO
- // Output the results as source code
- Serial.println(resultToSourceCode(&results));
- data+="<pre>";
- data+=resultToSourceCode(&results);
- data+="</pre>\n";
- data+="<script>setTimeout(location.reload.bind(location), 1000);</script>";
- Serial.println(); // Blank line between entries
- yield(); // Feed the WDT (again)
- }
- server.handleClient();
- }
Add Comment
Please, Sign In to add comment