From aa8f7b31fe16ccb8e26baa5e887126bfca4e24ed Mon Sep 17 00:00:00 2001 From: Marc MERLIN Date: Sun, 19 Mar 2017 20:27:56 -0700 Subject: [PATCH 1/7] Added ESP32 IR receive support (IRsend not implemented yet). - disable a lot of defines not relevant to ESP32, set them to 1 (no-op) - change default IR pin to 35 from 11 - changed serial speed to 115200 (9600 is too slow to keep up with IR input) - irSend disables code that will not compile on ESP32. It won't work, but it won't break compilation either. --- IRremote.cpp | 6 ++++++ boarddefs.h | 13 +++++++++++++ examples/IRrecvDemo/IRrecvDemo.ino | 8 +++++++- examples/IRrecvDump/IRrecvDump.ino | 8 ++++++-- examples/IRrecvDumpV2/IRrecvDumpV2.ino | 4 ++-- irRecv.cpp | 15 +++++++++++++++ irSend.cpp | 3 +++ 7 files changed, 52 insertions(+), 5 deletions(-) diff --git a/IRremote.cpp b/IRremote.cpp index c9907eb..9613bea 100644 --- a/IRremote.cpp +++ b/IRremote.cpp @@ -18,7 +18,9 @@ // Whynter A/C ARC-110WD added by Francesco Meschia //****************************************************************************** +#ifndef ESP32 #include +#endif // Defining IR_GLOBAL here allows us to declare the instantiation of global variables #define IR_GLOBAL @@ -120,7 +122,11 @@ int MATCH_SPACE (int measured_ticks, int desired_us) // As soon as first MARK arrives: // Gap width is recorded; Ready is cleared; New logging starts // +#ifdef ESP32 +void onTimer() +#else ISR (TIMER_INTR_NAME) +#endif { TIMER_RESET; diff --git a/boarddefs.h b/boarddefs.h index 62b6be4..ce8a4f9 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -39,6 +39,10 @@ # define BLINKLED_ON() (PORTD |= B00000001) # define BLINKLED_OFF() (PORTD &= B11111110) +#elif defined(ESP32) +# define BLINKLED 255 +# define BLINKLED_ON() 1 +# define BLINKLED_OFF() 1 #else # define BLINKLED 13 #define BLINKLED_ON() (PORTB |= B00100000) @@ -147,12 +151,21 @@ // #if defined(IR_USE_TIMER2) +#ifdef ESP32 // Used in irSend, not implemented yet (FIXME) +#define TIMER_RESET 1 +#define TIMER_ENABLE_PWM 1 +#define TIMER_DISABLE_PWM Serial.println("IRsend not implemented for ESP32 yet"); +#define TIMER_ENABLE_INTR 1 +#define TIMER_DISABLE_INTR 1 +#define TIMER_INTR_NAME 1 +#else #define TIMER_RESET #define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1)) #define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1))) #define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A)) #define TIMER_DISABLE_INTR (TIMSK2 = 0) #define TIMER_INTR_NAME TIMER2_COMPA_vect +#endif #define TIMER_CONFIG_KHZ(val) ({ \ const uint8_t pwmval = SYSCLOCK / 2000 / (val); \ diff --git a/examples/IRrecvDemo/IRrecvDemo.ino b/examples/IRrecvDemo/IRrecvDemo.ino index 3a49832..4635b2c 100644 --- a/examples/IRrecvDemo/IRrecvDemo.ino +++ b/examples/IRrecvDemo/IRrecvDemo.ino @@ -8,7 +8,11 @@ #include +#ifdef ESP32 +int RECV_PIN = 35; +#else int RECV_PIN = 11; +#endif IRrecv irrecv(RECV_PIN); @@ -16,8 +20,10 @@ decode_results results; void setup() { - Serial.begin(9600); + Serial.begin(115200); + Serial.println("Enabling IRin"); irrecv.enableIRIn(); // Start the receiver + Serial.println("Enabled IRin"); } void loop() { diff --git a/examples/IRrecvDump/IRrecvDump.ino b/examples/IRrecvDump/IRrecvDump.ino index 90b47ba..9a21b56 100644 --- a/examples/IRrecvDump/IRrecvDump.ino +++ b/examples/IRrecvDump/IRrecvDump.ino @@ -15,7 +15,11 @@ * You can change this to another available Arduino Pin. * Your IR receiver should be connected to the pin defined here */ -int RECV_PIN = 11; +#ifdef ESP32 +int RECV_PIN = 35; +#else +int RECV_PIN = 11; +#endif IRrecv irrecv(RECV_PIN); @@ -23,7 +27,7 @@ decode_results results; void setup() { - Serial.begin(9600); + Serial.begin(115200); irrecv.enableIRIn(); // Start the receiver } diff --git a/examples/IRrecvDumpV2/IRrecvDumpV2.ino b/examples/IRrecvDumpV2/IRrecvDumpV2.ino index 7256127..570baba 100644 --- a/examples/IRrecvDumpV2/IRrecvDumpV2.ino +++ b/examples/IRrecvDumpV2/IRrecvDumpV2.ino @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ // Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838) // -int recvPin = 11; +int recvPin = 35; IRrecv irrecv(recvPin); //+============================================================================= @@ -14,7 +14,7 @@ IRrecv irrecv(recvPin); // void setup ( ) { - Serial.begin(9600); // Status message will be sent to PC at 9600 baud + Serial.begin(115200); // Status message will be sent to PC at 9600 baud irrecv.enableIRIn(); // Start the receiver } diff --git a/irRecv.cpp b/irRecv.cpp index 6343856..2f510c4 100644 --- a/irRecv.cpp +++ b/irRecv.cpp @@ -1,5 +1,10 @@ #include "IRremote.h" #include "IRremoteInt.h" + +#ifdef ESP32 +hw_timer_t *timer; +void onTimer(); // defined in IRremote.cpp +#endif //+============================================================================= // Decodes the received IR message @@ -117,6 +122,15 @@ IRrecv::IRrecv (int recvpin, int blinkpin) // void IRrecv::enableIRIn ( ) { +// Interrupt Service Routine - Fires every 50uS +#ifdef ESP32 + // 3 timers, choose #1, 80 divider nanosecond precision, 1 to count up + timer = timerBegin(1, 80, 1); + timerAttachInterrupt(timer, &onTimer, 1); + // every 50ns, autoreload = true + timerAlarmWrite(timer, 50, true); + timerAlarmEnable(timer); +#else cli(); // Setup pulse clock timer interrupt // Prescale /8 (16M/8 = 0.5 microseconds per tick) @@ -130,6 +144,7 @@ void IRrecv::enableIRIn ( ) TIMER_RESET; sei(); // enable interrupts +#endif // Initialize state machine variables irparams.rcvstate = STATE_IDLE; diff --git a/irSend.cpp b/irSend.cpp index 253c941..6191aa6 100644 --- a/irSend.cpp +++ b/irSend.cpp @@ -54,6 +54,8 @@ void IRsend::space (unsigned int time) // void IRsend::enableIROut (int khz) { +// FIXME: implement ESP32 support +#ifndef ESP32 // Disable the Timer2 Interrupt (which is used for receiving IR) TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt @@ -66,6 +68,7 @@ void IRsend::enableIROut (int khz) // CS2 = 000: no prescaling // The top value for the timer. The modulation frequency will be SYSCLOCK / 2 / OCR2A. TIMER_CONFIG_KHZ(khz); +#endif } //+============================================================================= From 1b56da6cc73ec787e3d570e9906d80fad01933df Mon Sep 17 00:00:00 2001 From: Marc MERLIN Date: Sun, 19 Mar 2017 21:28:14 -0700 Subject: [PATCH 2/7] Rename ESP32 timer name so that it doesn't conflict with other timers. --- IRremote.cpp | 2 +- irRecv.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/IRremote.cpp b/IRremote.cpp index 9613bea..b438bc1 100644 --- a/IRremote.cpp +++ b/IRremote.cpp @@ -123,7 +123,7 @@ int MATCH_SPACE (int measured_ticks, int desired_us) // Gap width is recorded; Ready is cleared; New logging starts // #ifdef ESP32 -void onTimer() +void IRTimer() #else ISR (TIMER_INTR_NAME) #endif diff --git a/irRecv.cpp b/irRecv.cpp index 2f510c4..a15ac0f 100644 --- a/irRecv.cpp +++ b/irRecv.cpp @@ -3,7 +3,7 @@ #ifdef ESP32 hw_timer_t *timer; -void onTimer(); // defined in IRremote.cpp +void IRTimer(); // defined in IRremote.cpp #endif //+============================================================================= @@ -126,7 +126,7 @@ void IRrecv::enableIRIn ( ) #ifdef ESP32 // 3 timers, choose #1, 80 divider nanosecond precision, 1 to count up timer = timerBegin(1, 80, 1); - timerAttachInterrupt(timer, &onTimer, 1); + timerAttachInterrupt(timer, &IRTimer, 1); // every 50ns, autoreload = true timerAlarmWrite(timer, 50, true); timerAlarmEnable(timer); From eae9de43076fb839cad9c1371ceac7c0579f7b46 Mon Sep 17 00:00:00 2001 From: Marc MERLIN Date: Fri, 31 Mar 2017 21:52:52 -0700 Subject: [PATCH 3/7] Cleaned up ESP32 integration, reverted ESP32 ifdefs on irreceive examples. - fixed indenting on existing code in a few places for consistency - introduced IR_TIMER_USE_ESP32 for ifdefs within the code as per request - added comments explaining what's missing for irsend support on ESP32 - IRrecvDemo.ino gets a warning before and after interrupt is enabled in case it causes a crash TESTED=IoTuz ESP32 board and original 328p arduino to make sure current code did not break. --- IRremote.cpp | 11 +++---- boarddefs.h | 40 ++++++++++++++++++-------- examples/IRrecvDemo/IRrecvDemo.ino | 8 ++---- examples/IRrecvDump/IRrecvDump.ino | 4 --- examples/IRrecvDumpV2/IRrecvDumpV2.ino | 4 +-- irRecv.cpp | 2 ++ irSend.cpp | 2 +- 7 files changed, 42 insertions(+), 29 deletions(-) diff --git a/IRremote.cpp b/IRremote.cpp index b438bc1..e811cfc 100644 --- a/IRremote.cpp +++ b/IRremote.cpp @@ -18,16 +18,17 @@ // Whynter A/C ARC-110WD added by Francesco Meschia //****************************************************************************** -#ifndef ESP32 -#include -#endif - // Defining IR_GLOBAL here allows us to declare the instantiation of global variables #define IR_GLOBAL # include "IRremote.h" # include "IRremoteInt.h" #undef IR_GLOBAL +#ifndef IR_TIMER_USE_ESP32 +#include +#endif + + //+============================================================================= // The match functions were (apparently) originally MACROs to improve code speed // (although this would have bloated the code) hence the names being CAPS @@ -122,7 +123,7 @@ int MATCH_SPACE (int measured_ticks, int desired_us) // As soon as first MARK arrives: // Gap width is recorded; Ready is cleared; New logging starts // -#ifdef ESP32 +#ifdef IR_TIMER_USE_ESP32 void IRTimer() #else ISR (TIMER_INTR_NAME) diff --git a/boarddefs.h b/boarddefs.h index ce8a4f9..c126b54 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -39,13 +39,14 @@ # define BLINKLED_ON() (PORTD |= B00000001) # define BLINKLED_OFF() (PORTD &= B11111110) +// No system LED on ESP32, disable blinking #elif defined(ESP32) # define BLINKLED 255 # define BLINKLED_ON() 1 # define BLINKLED_OFF() 1 #else # define BLINKLED 13 - #define BLINKLED_ON() (PORTB |= B00100000) +# define BLINKLED_ON() (PORTB |= B00100000) # define BLINKLED_OFF() (PORTB &= B11011111) #endif @@ -129,14 +130,16 @@ // ATtiny84 #elif defined(__AVR_ATtiny84__) - #define IR_USE_TIMER1 // tx = pin 6 + #define IR_USE_TIMER1 // tx = pin 6 //ATtiny85 #elif defined(__AVR_ATtiny85__) - #define IR_USE_TIMER_TINY0 // tx = pin 1 + #define IR_USE_TIMER_TINY0 // tx = pin 1 // Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc // ATmega48, ATmega88, ATmega168, ATmega328 +#elif defined(ESP32) + #define IR_TIMER_USE_ESP32 #else //#define IR_USE_TIMER1 // tx = pin 9 #define IR_USE_TIMER2 // tx = pin 3 @@ -151,21 +154,12 @@ // #if defined(IR_USE_TIMER2) -#ifdef ESP32 // Used in irSend, not implemented yet (FIXME) -#define TIMER_RESET 1 -#define TIMER_ENABLE_PWM 1 -#define TIMER_DISABLE_PWM Serial.println("IRsend not implemented for ESP32 yet"); -#define TIMER_ENABLE_INTR 1 -#define TIMER_DISABLE_INTR 1 -#define TIMER_INTR_NAME 1 -#else #define TIMER_RESET #define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1)) #define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1))) #define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A)) #define TIMER_DISABLE_INTR (TIMSK2 = 0) #define TIMER_INTR_NAME TIMER2_COMPA_vect -#endif #define TIMER_CONFIG_KHZ(val) ({ \ const uint8_t pwmval = SYSCLOCK / 2000 / (val); \ @@ -551,6 +545,28 @@ #define TIMER_PWM_PIN 1 /* ATtiny85 */ +//--------------------------------------------------------- +// ESP32 (ESP8266 should likely be added here too) +// + +// ESP32 has it own timer API and does not use these macros, but to avoid ifdef'ing +// them out in the common code, they are defined to no-op. This allows the code to compile +// (which it wouldn't otherwise) but irsend will not work until ESP32 specific code is written +// for that -- merlin +// As a warning, sending timing specific code from an ESP32 can be challenging if you need 100% +// reliability because the arduino code may be interrupted and cause your sent waveform to be the +// wrong length. This is specifically an issue for neopixels which require 800Khz resolution. +// IR may just work as is with the common code since it's lower frequency, but if not, the other +// way to do this on ESP32 is using the RMT built in driver like in this incomplete library below +// https://github.com/ExploreEmbedded/ESP32_RMT +#elif defined(IR_TIMER_USE_ESP32) +#define TIMER_RESET 1 +#define TIMER_ENABLE_PWM 1 +#define TIMER_DISABLE_PWM Serial.println("IRsend not implemented for ESP32 yet"); +#define TIMER_ENABLE_INTR 1 +#define TIMER_DISABLE_INTR 1 +#define TIMER_INTR_NAME 1 + //--------------------------------------------------------- // Unknown Timer // diff --git a/examples/IRrecvDemo/IRrecvDemo.ino b/examples/IRrecvDemo/IRrecvDemo.ino index 4635b2c..3e2d280 100644 --- a/examples/IRrecvDemo/IRrecvDemo.ino +++ b/examples/IRrecvDemo/IRrecvDemo.ino @@ -8,11 +8,7 @@ #include -#ifdef ESP32 -int RECV_PIN = 35; -#else int RECV_PIN = 11; -#endif IRrecv irrecv(RECV_PIN); @@ -20,7 +16,9 @@ decode_results results; void setup() { - Serial.begin(115200); + Serial.begin(9600); + // In case the interrupt driver crashes on setup, give a clue + // to the user what's going on. Serial.println("Enabling IRin"); irrecv.enableIRIn(); // Start the receiver Serial.println("Enabled IRin"); diff --git a/examples/IRrecvDump/IRrecvDump.ino b/examples/IRrecvDump/IRrecvDump.ino index 9a21b56..990c3f6 100644 --- a/examples/IRrecvDump/IRrecvDump.ino +++ b/examples/IRrecvDump/IRrecvDump.ino @@ -15,11 +15,7 @@ * You can change this to another available Arduino Pin. * Your IR receiver should be connected to the pin defined here */ -#ifdef ESP32 -int RECV_PIN = 35; -#else int RECV_PIN = 11; -#endif IRrecv irrecv(RECV_PIN); diff --git a/examples/IRrecvDumpV2/IRrecvDumpV2.ino b/examples/IRrecvDumpV2/IRrecvDumpV2.ino index 570baba..7256127 100644 --- a/examples/IRrecvDumpV2/IRrecvDumpV2.ino +++ b/examples/IRrecvDumpV2/IRrecvDumpV2.ino @@ -6,7 +6,7 @@ //------------------------------------------------------------------------------ // Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838) // -int recvPin = 35; +int recvPin = 11; IRrecv irrecv(recvPin); //+============================================================================= @@ -14,7 +14,7 @@ IRrecv irrecv(recvPin); // void setup ( ) { - Serial.begin(115200); // Status message will be sent to PC at 9600 baud + Serial.begin(9600); // Status message will be sent to PC at 9600 baud irrecv.enableIRIn(); // Start the receiver } diff --git a/irRecv.cpp b/irRecv.cpp index a15ac0f..6631fb7 100644 --- a/irRecv.cpp +++ b/irRecv.cpp @@ -124,6 +124,8 @@ void IRrecv::enableIRIn ( ) { // Interrupt Service Routine - Fires every 50uS #ifdef ESP32 + // ESP32 has a proper API to setup timers, no weird chip macros needed + // simply call the readable API versions :) // 3 timers, choose #1, 80 divider nanosecond precision, 1 to count up timer = timerBegin(1, 80, 1); timerAttachInterrupt(timer, &IRTimer, 1); diff --git a/irSend.cpp b/irSend.cpp index 6191aa6..c3ef3ff 100644 --- a/irSend.cpp +++ b/irSend.cpp @@ -54,7 +54,7 @@ void IRsend::space (unsigned int time) // void IRsend::enableIROut (int khz) { -// FIXME: implement ESP32 support +// FIXME: implement ESP32 support, see IR_TIMER_USE_ESP32 in boarddefs.h #ifndef ESP32 // Disable the Timer2 Interrupt (which is used for receiving IR) TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt From 6b8f2bdbfcca1c8b9db38418312d7a621e6f606b Mon Sep 17 00:00:00 2001 From: Marc MERLIN Date: Fri, 31 Mar 2017 22:01:31 -0700 Subject: [PATCH 4/7] move comment about 'or else' chips that use TIMER2. --- boarddefs.h | 4 ++-- examples/IRrecvDump/IRrecvDump.ino | 2 +- irRecv.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/boarddefs.h b/boarddefs.h index c126b54..925c92a 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -136,11 +136,11 @@ #elif defined(__AVR_ATtiny85__) #define IR_USE_TIMER_TINY0 // tx = pin 1 -// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc -// ATmega48, ATmega88, ATmega168, ATmega328 #elif defined(ESP32) #define IR_TIMER_USE_ESP32 #else +// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, Nano, etc +// ATmega48, ATmega88, ATmega168, ATmega328 //#define IR_USE_TIMER1 // tx = pin 9 #define IR_USE_TIMER2 // tx = pin 3 diff --git a/examples/IRrecvDump/IRrecvDump.ino b/examples/IRrecvDump/IRrecvDump.ino index 990c3f6..fa25cd8 100644 --- a/examples/IRrecvDump/IRrecvDump.ino +++ b/examples/IRrecvDump/IRrecvDump.ino @@ -23,7 +23,7 @@ decode_results results; void setup() { - Serial.begin(115200); + Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } diff --git a/irRecv.cpp b/irRecv.cpp index 6631fb7..12b0806 100644 --- a/irRecv.cpp +++ b/irRecv.cpp @@ -1,7 +1,7 @@ #include "IRremote.h" #include "IRremoteInt.h" -#ifdef ESP32 +#ifdef IR_TIMER_USE_ESP32 hw_timer_t *timer; void IRTimer(); // defined in IRremote.cpp #endif From 88b294a0cd898c20ab7026f55f612eab718370c1 Mon Sep 17 00:00:00 2001 From: Marc MERLIN Date: Fri, 31 Mar 2017 22:32:48 -0700 Subject: [PATCH 5/7] change no-op defines from '1' to ''. --- boarddefs.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/boarddefs.h b/boarddefs.h index 925c92a..17e2551 100644 --- a/boarddefs.h +++ b/boarddefs.h @@ -560,12 +560,12 @@ // way to do this on ESP32 is using the RMT built in driver like in this incomplete library below // https://github.com/ExploreEmbedded/ESP32_RMT #elif defined(IR_TIMER_USE_ESP32) -#define TIMER_RESET 1 -#define TIMER_ENABLE_PWM 1 +#define TIMER_RESET +#define TIMER_ENABLE_PWM #define TIMER_DISABLE_PWM Serial.println("IRsend not implemented for ESP32 yet"); -#define TIMER_ENABLE_INTR 1 -#define TIMER_DISABLE_INTR 1 -#define TIMER_INTR_NAME 1 +#define TIMER_ENABLE_INTR +#define TIMER_DISABLE_INTR +#define TIMER_INTR_NAME //--------------------------------------------------------- // Unknown Timer From 9133814e60e905f2495e850a96c3fe768238d5aa Mon Sep 17 00:00:00 2001 From: Marc MERLIN Date: Fri, 31 Mar 2017 23:10:07 -0700 Subject: [PATCH 6/7] Rev'ed to 2.2.4. --- Contributors.md | 1 + README.md | 1 + changelog.md | 3 +++ library.json | 2 +- 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Contributors.md b/Contributors.md index ae24890..bf1e64d 100644 --- a/Contributors.md +++ b/Contributors.md @@ -18,5 +18,6 @@ These are the active contributors of this project that you may contact if there - [ElectricRCAircraftGuy](https://github.com/electricrcaircraftguy): Active Contributor - [philipphenkel](https://github.com/philipphenkel): Active Contributor - [MCUdude](https://github.com/MCUdude): Contributor +- [marcmerlin](https://github.com/marcmerlin): Contributor (ESP32 port) Note: This list is being updated constantly so please let [z3t0](https://github.com/z3t0) know if you have been missed. diff --git a/README.md b/README.md index 2ec302c..8ecf112 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ Tutorials and more information will be made available on [the official homepage] - ATmega8535, 16, 32, 164, 324, 644, 1284, - ATmega64, 128 - ATtiny 84 / 85 +- ESP32 (receive only) We are open to suggestions for adding support to new boards, however we highly recommend you contact your supplier first and ask them to provide support from their side. diff --git a/changelog.md b/changelog.md index 0702ddc..dc01c98 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,6 @@ +## 2.2.4 - 2017/03/31 +- Added ESP32 IR receive support [PR #427](https://github.com/z3t0/Arduino-IRremote/pull/425) + ## 2.2.3 - 2017/03/27 - Fix calculation of pause length in LEGO PF protocol [PR #427](https://github.com/z3t0/Arduino-IRremote/pull/427) diff --git a/library.json b/library.json index de93d16..4f29e7b 100644 --- a/library.json +++ b/library.json @@ -7,7 +7,7 @@ "type": "git", "url": "https://github.com/z3t0/Arduino-IRremote.git" }, - "version": "2.2.3", + "version": "2.2.4", "frameworks": "arduino", "platforms": "atmelavr", "authors" : From 419c948c29ae8f6813071459b4940a20b747e8a0 Mon Sep 17 00:00:00 2001 From: Marc MERLIN Date: Sat, 1 Apr 2017 08:32:37 -0700 Subject: [PATCH 7/7] Fixed rev to 2.3.3 and added info on timer used. --- README.md | 1 + changelog.md | 2 +- library.json | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8ecf112..305c7bd 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ We are open to suggestions for adding support to new boards, however we highly r | [ATmega8535 ATmega16, ATmega32](https://github.com/MCUdude/MightyCore) | **13** | **1** | | [ATmega64, ATmega128](https://github.com/MCUdude/MegaCore) | **13** | **1** | | ATmega1280, ATmega2560 | 5, 6, **9**, 11, 46 | 1, **2**, 3, 4, 5 | +| [ESP32](http://esp32.net/) | N/A (not supported) | **1** | | [Teensy 1.0](https://www.pjrc.com/teensy/) | **17** | **1** | | [Teensy 2.0](https://www.pjrc.com/teensy/) | 9, **10**, 14 | 1, 3, **4_HS** | | [Teensy++ 1.0 / 2.0](https://www.pjrc.com/teensy/) | **1**, 16, 25 | 1, **2**, 3 | diff --git a/changelog.md b/changelog.md index dc01c98..81339f2 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,4 @@ -## 2.2.4 - 2017/03/31 +## 2.3.3 - 2017/03/31 - Added ESP32 IR receive support [PR #427](https://github.com/z3t0/Arduino-IRremote/pull/425) ## 2.2.3 - 2017/03/27 diff --git a/library.json b/library.json index 4f29e7b..d8cd523 100644 --- a/library.json +++ b/library.json @@ -7,7 +7,7 @@ "type": "git", "url": "https://github.com/z3t0/Arduino-IRremote.git" }, - "version": "2.2.4", + "version": "2.3.3", "frameworks": "arduino", "platforms": "atmelavr", "authors" :