From cefeaa3b370f0dced4a6e91c58daecd2c849a5cb Mon Sep 17 00:00:00 2001 From: Jens B Date: Sun, 13 Mar 2016 12:15:28 +0100 Subject: [PATCH 1/8] pin functions based on board depended defaults to support different ESP8266 boad layouts, use board depended constants from "...\esp8266\hardware\esp8266\2.1.0\variants\...\pins_arduino.h" --- Boards.h | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/Boards.h b/Boards.h index 855b6ebe..1ac96965 100644 --- a/Boards.h +++ b/Boards.h @@ -665,22 +665,29 @@ writePort(port, value, bitmask): Write an 8 bit port. #define PIN_TO_PWM(p) PIN_TO_DIGITAL(p) #define PIN_TO_SERVO(p) ((p) - 2) -// ESP8266 generic +// ESP8266 +// hardware: TX0=1, TX1=2, RX0=3, MISO=12, MOSI=13, SCLK=14, CS=15, A0=17 +// board depended defaults: LED_BUILTIN, SDA, SCL +// note: boot mode GPIOs 0, 2 and 15 can be used as outputs (GPIOs 6-11 are in use for flash IO) #elif defined(ESP8266) -#define TOTAL_ANALOG_PINS 0 -#define TOTAL_PINS 17 -#define VERSION_BLINK_PIN 4 -// #define IS_PIN_DIGITAL(p) ((p) == 0 || (p) == 1 || (p) == 2 || (p) == 3 || (p) == 4 || (p) == 5 || (p) == 12 || (p) == 13 || (p) == 14 || (p) == 15 || (p) == 16) //for wifi dont protect serial pins because these things only have 2 pins otherwise -#define IS_PIN_DIGITAL(p) ((p) == 0 || (p) == 2 || (p) == 4 || (p) == 5 || (p) == 12 || (p) == 13 || (p) == 14 || (p) == 15 || (p) == 16) -#define IS_PIN_ANALOG(p) (false) -#define IS_PIN_PWM(p) (false) -#define IS_PIN_SERVO(p) ((p) >= 0 && (p) < MAX_SERVOS) -#define IS_PIN_I2C(p) (false) -#define IS_PIN_SPI(p) (false) +#define TOTAL_ANALOG_PINS 1 +#define TOTAL_PINS 18 // 11 digital + 1 analog + 6 inaccessible +#define VERSION_BLINK_PIN LED_BUILTIN +#define PIN_SERIAL_RX 3 +#define PIN_SERIAL_TX 1 +#define PIN_SERIAL1_TX 2 +#define IS_PIN_DIGITAL(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) <= 16)) +#define IS_PIN_ANALOG(p) ((p) == A0) +#define IS_PIN_PWM(p) IS_PIN_DIGITAL(p) +#define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS) +#define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL) +#define IS_PIN_SPI(p) ((p) >= 12 && (p) <= 15) +#define IS_PIN_INTERRUPT(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) <= 15)) +#define IS_PIN_SERIAL(p) ((p) == 1 || (p) == 3) #define PIN_TO_DIGITAL(p) (p) -#define PIN_TO_ANALOG(p) ((p) - 17) +#define PIN_TO_ANALOG(p) (p) #define PIN_TO_PWM(p) PIN_TO_DIGITAL(p) -#define PIN_TO_SERVO(p) p +#define PIN_TO_SERVO(p) (p) // anything else From fb243ce06faa66f5c694f4209bcb0f3bf89bcf3b Mon Sep 17 00:00:00 2001 From: Jens B Date: Sun, 13 Mar 2016 18:52:49 +0100 Subject: [PATCH 2/8] analog pin mapping fixed requires Arduino core for ESP8266 V2.2 --- Boards.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Boards.h b/Boards.h index 1ac96965..0c83315b 100644 --- a/Boards.h +++ b/Boards.h @@ -685,7 +685,7 @@ writePort(port, value, bitmask): Write an 8 bit port. #define IS_PIN_INTERRUPT(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) <= 15)) #define IS_PIN_SERIAL(p) ((p) == 1 || (p) == 3) #define PIN_TO_DIGITAL(p) (p) -#define PIN_TO_ANALOG(p) (p) +#define PIN_TO_ANALOG(p) ((p) - 17) #define PIN_TO_PWM(p) PIN_TO_DIGITAL(p) #define PIN_TO_SERVO(p) (p) From a375d3a614aa858e2ed0e592cd9340b22255f225 Mon Sep 17 00:00:00 2001 From: Jens B Date: Sun, 13 Mar 2016 21:23:56 +0100 Subject: [PATCH 3/8] VERSION_BLINK_PIN and PIN_SERIAL1_TX removed --- Boards.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/Boards.h b/Boards.h index 0c83315b..43e7e15d 100644 --- a/Boards.h +++ b/Boards.h @@ -672,10 +672,8 @@ writePort(port, value, bitmask): Write an 8 bit port. #elif defined(ESP8266) #define TOTAL_ANALOG_PINS 1 #define TOTAL_PINS 18 // 11 digital + 1 analog + 6 inaccessible -#define VERSION_BLINK_PIN LED_BUILTIN #define PIN_SERIAL_RX 3 #define PIN_SERIAL_TX 1 -#define PIN_SERIAL1_TX 2 #define IS_PIN_DIGITAL(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) <= 16)) #define IS_PIN_ANALOG(p) ((p) == A0) #define IS_PIN_PWM(p) IS_PIN_DIGITAL(p) From e6a09e58fa5edb98fe843a902d31a3a33cc300b9 Mon Sep 17 00:00:00 2001 From: Jens B Date: Fri, 18 Mar 2016 20:43:15 +0100 Subject: [PATCH 4/8] most remaining absolte pin numbers/counts replaced by defines/constants from pins_arduino.h --- Boards.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Boards.h b/Boards.h index 43e7e15d..e8b2cb65 100644 --- a/Boards.h +++ b/Boards.h @@ -666,24 +666,23 @@ writePort(port, value, bitmask): Write an 8 bit port. #define PIN_TO_SERVO(p) ((p) - 2) // ESP8266 -// hardware: TX0=1, TX1=2, RX0=3, MISO=12, MOSI=13, SCLK=14, CS=15, A0=17 -// board depended defaults: LED_BUILTIN, SDA, SCL -// note: boot mode GPIOs 0, 2 and 15 can be used as outputs (GPIOs 6-11 are in use for flash IO) +// note: boot mode GPIOs 0, 2 and 15 can be used as outputs, GPIOs 6-11 are in use for flash IO #elif defined(ESP8266) -#define TOTAL_ANALOG_PINS 1 -#define TOTAL_PINS 18 // 11 digital + 1 analog + 6 inaccessible +#define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS +#define TOTAL_PINS (NUM_DIGITAL_PINS > A0 + NUM_ANALOG_INPUTS ? NUM_DIGITAL_PINS : A0 + NUM_ANALOG_INPUTS) +#define VERSION_BLINK_PIN LED_BUILTIN #define PIN_SERIAL_RX 3 #define PIN_SERIAL_TX 1 -#define IS_PIN_DIGITAL(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) <= 16)) -#define IS_PIN_ANALOG(p) ((p) == A0) +#define IS_PIN_DIGITAL(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) < (NUM_DIGITAL_PINS > A0 + NUM_ANALOG_INPUTS ? NUM_DIGITAL_PINS : A0))) +#define IS_PIN_ANALOG(p) ((p) >= A0 && (p) < A0 + NUM_ANALOG_INPUTS) #define IS_PIN_PWM(p) IS_PIN_DIGITAL(p) #define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS) #define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL) -#define IS_PIN_SPI(p) ((p) >= 12 && (p) <= 15) -#define IS_PIN_INTERRUPT(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) <= 15)) -#define IS_PIN_SERIAL(p) ((p) == 1 || (p) == 3) +#define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK) +#define IS_PIN_INTERRUPT(p) digitalPinToInterrupt(p) +#define IS_PIN_SERIAL(p) ((p) == PIN_SERIAL_RX || (p) == PIN_SERIAL_TX) #define PIN_TO_DIGITAL(p) (p) -#define PIN_TO_ANALOG(p) ((p) - 17) +#define PIN_TO_ANALOG(p) ((p) - A0) #define PIN_TO_PWM(p) PIN_TO_DIGITAL(p) #define PIN_TO_SERVO(p) (p) From 71af575c85422a180d643a5fe471098a0697c6d3 Mon Sep 17 00:00:00 2001 From: Jens B Date: Sun, 20 Mar 2016 20:31:32 +0100 Subject: [PATCH 5/8] config optimizations - Firmata 2.5.1 or higher required - esp8266/Adruino needs to fix macros digitalPinHasPWM and digitalPinToInterrupt - no wifio board support --- Boards.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Boards.h b/Boards.h index e8b2cb65..52bc789b 100644 --- a/Boards.h +++ b/Boards.h @@ -669,13 +669,12 @@ writePort(port, value, bitmask): Write an 8 bit port. // note: boot mode GPIOs 0, 2 and 15 can be used as outputs, GPIOs 6-11 are in use for flash IO #elif defined(ESP8266) #define TOTAL_ANALOG_PINS NUM_ANALOG_INPUTS -#define TOTAL_PINS (NUM_DIGITAL_PINS > A0 + NUM_ANALOG_INPUTS ? NUM_DIGITAL_PINS : A0 + NUM_ANALOG_INPUTS) -#define VERSION_BLINK_PIN LED_BUILTIN +#define TOTAL_PINS A0 + NUM_ANALOG_INPUTS #define PIN_SERIAL_RX 3 #define PIN_SERIAL_TX 1 -#define IS_PIN_DIGITAL(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) < (NUM_DIGITAL_PINS > A0 + NUM_ANALOG_INPUTS ? NUM_DIGITAL_PINS : A0))) +#define IS_PIN_DIGITAL(p) (((p) >= 0 && (p) <= 5) || ((p) >= 12 && (p) < A0)) #define IS_PIN_ANALOG(p) ((p) >= A0 && (p) < A0 + NUM_ANALOG_INPUTS) -#define IS_PIN_PWM(p) IS_PIN_DIGITAL(p) +#define IS_PIN_PWM(p) digitalPinHasPWM(p) #define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS) #define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL) #define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK) From 1f3527ad5a763843581b15b797d184a8aba19028 Mon Sep 17 00:00:00 2001 From: Jens B Date: Tue, 29 Mar 2016 12:28:09 +0200 Subject: [PATCH 6/8] fixed macro IS_PIN_INTERRUPT --- Boards.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Boards.h b/Boards.h index 52bc789b..8f4a3fb0 100644 --- a/Boards.h +++ b/Boards.h @@ -678,7 +678,7 @@ writePort(port, value, bitmask): Write an 8 bit port. #define IS_PIN_SERVO(p) (IS_PIN_DIGITAL(p) && (p) < MAX_SERVOS) #define IS_PIN_I2C(p) ((p) == SDA || (p) == SCL) #define IS_PIN_SPI(p) ((p) == SS || (p) == MOSI || (p) == MISO || (p) == SCK) -#define IS_PIN_INTERRUPT(p) digitalPinToInterrupt(p) +#define IS_PIN_INTERRUPT(p) (digitalPinToInterrupt(p) > NOT_AN_INTERRUPT) #define IS_PIN_SERIAL(p) ((p) == PIN_SERIAL_RX || (p) == PIN_SERIAL_TX) #define PIN_TO_DIGITAL(p) (p) #define PIN_TO_ANALOG(p) ((p) - A0) From ec29b12ec0a09a04a1a3915ab31a563302c38db5 Mon Sep 17 00:00:00 2001 From: Jens B Date: Sun, 3 Apr 2016 17:08:34 +0200 Subject: [PATCH 7/8] new define DEFAULT_PWM_RESOLUTION - default to 8-bit for all architectures and board - ESP8266 default is 10-bit --- Boards.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Boards.h b/Boards.h index 8f4a3fb0..b7c7b054 100644 --- a/Boards.h +++ b/Boards.h @@ -684,6 +684,7 @@ writePort(port, value, bitmask): Write an 8 bit port. #define PIN_TO_ANALOG(p) ((p) - A0) #define PIN_TO_PWM(p) PIN_TO_DIGITAL(p) #define PIN_TO_SERVO(p) (p) +#define DEFAULT_PWM_RESOLUTION 10 // anything else @@ -700,6 +701,9 @@ writePort(port, value, bitmask): Write an 8 bit port. #define IS_PIN_SERIAL(p) 0 #endif +#ifndef DEFAULT_PWM_RESOLUTION +#define DEFAULT_PWM_RESOLUTION 8 +#endif /*============================================================================== * readPort() - Read an 8 bit port From 625cff9ebac5f3b5e095b5ce97687ae2b3cc1ed2 Mon Sep 17 00:00:00 2001 From: Jens B Date: Sun, 3 Apr 2016 17:15:24 +0200 Subject: [PATCH 8/8] examples updated to use define DEFAULT_PWM_RESOLUTION --- examples/StandardFirmata/StandardFirmata.ino | 2 +- examples/StandardFirmataChipKIT/StandardFirmataChipKIT.ino | 2 +- examples/StandardFirmataEthernet/StandardFirmataEthernet.ino | 2 +- .../StandardFirmataEthernetPlus/StandardFirmataEthernetPlus.ino | 2 +- examples/StandardFirmataPlus/StandardFirmataPlus.ino | 2 +- examples/StandardFirmataWiFi/StandardFirmataWiFi.ino | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/StandardFirmata/StandardFirmata.ino b/examples/StandardFirmata/StandardFirmata.ino index e969e5a8..eadee278 100755 --- a/examples/StandardFirmata/StandardFirmata.ino +++ b/examples/StandardFirmata/StandardFirmata.ino @@ -615,7 +615,7 @@ void sysexCallback(byte command, byte argc, byte *argv) } if (IS_PIN_PWM(pin)) { Firmata.write(PIN_MODE_PWM); - Firmata.write(8); // 8 = 8-bit resolution + Firmata.write(DEFAULT_PWM_RESOLUTION); } if (IS_PIN_DIGITAL(pin)) { Firmata.write(PIN_MODE_SERVO); diff --git a/examples/StandardFirmataChipKIT/StandardFirmataChipKIT.ino b/examples/StandardFirmataChipKIT/StandardFirmataChipKIT.ino index 11437a65..c5f53f21 100644 --- a/examples/StandardFirmataChipKIT/StandardFirmataChipKIT.ino +++ b/examples/StandardFirmataChipKIT/StandardFirmataChipKIT.ino @@ -616,7 +616,7 @@ void sysexCallback(byte command, byte argc, byte *argv) } if (IS_PIN_PWM(pin)) { Firmata.write(PIN_MODE_PWM); - Firmata.write(8); // 8 = 8-bit resolution + Firmata.write(DEFAULT_PWM_RESOLUTION); } if (IS_PIN_DIGITAL(pin)) { Firmata.write(PIN_MODE_SERVO); diff --git a/examples/StandardFirmataEthernet/StandardFirmataEthernet.ino b/examples/StandardFirmataEthernet/StandardFirmataEthernet.ino index d0f1e585..2d724107 100644 --- a/examples/StandardFirmataEthernet/StandardFirmataEthernet.ino +++ b/examples/StandardFirmataEthernet/StandardFirmataEthernet.ino @@ -672,7 +672,7 @@ void sysexCallback(byte command, byte argc, byte *argv) } if (IS_PIN_PWM(pin)) { Firmata.write(PIN_MODE_PWM); - Firmata.write(8); // 8 = 8-bit resolution + Firmata.write(DEFAULT_PWM_RESOLUTION); } if (IS_PIN_DIGITAL(pin)) { Firmata.write(PIN_MODE_SERVO); diff --git a/examples/StandardFirmataEthernetPlus/StandardFirmataEthernetPlus.ino b/examples/StandardFirmataEthernetPlus/StandardFirmataEthernetPlus.ino index a1d13aba..eb8b856e 100644 --- a/examples/StandardFirmataEthernetPlus/StandardFirmataEthernetPlus.ino +++ b/examples/StandardFirmataEthernetPlus/StandardFirmataEthernetPlus.ino @@ -680,7 +680,7 @@ void sysexCallback(byte command, byte argc, byte *argv) } if (IS_PIN_PWM(pin)) { Firmata.write(PIN_MODE_PWM); - Firmata.write(8); // 8 = 8-bit resolution + Firmata.write(DEFAULT_PWM_RESOLUTION); } if (IS_PIN_DIGITAL(pin)) { Firmata.write(PIN_MODE_SERVO); diff --git a/examples/StandardFirmataPlus/StandardFirmataPlus.ino b/examples/StandardFirmataPlus/StandardFirmataPlus.ino index 657a9da1..828719c1 100644 --- a/examples/StandardFirmataPlus/StandardFirmataPlus.ino +++ b/examples/StandardFirmataPlus/StandardFirmataPlus.ino @@ -635,7 +635,7 @@ void sysexCallback(byte command, byte argc, byte *argv) } if (IS_PIN_PWM(pin)) { Firmata.write(PIN_MODE_PWM); - Firmata.write(8); // 8 = 8-bit resolution + Firmata.write(DEFAULT_PWM_RESOLUTION); } if (IS_PIN_DIGITAL(pin)) { Firmata.write(PIN_MODE_SERVO); diff --git a/examples/StandardFirmataWiFi/StandardFirmataWiFi.ino b/examples/StandardFirmataWiFi/StandardFirmataWiFi.ino index e206cbc3..067facd8 100644 --- a/examples/StandardFirmataWiFi/StandardFirmataWiFi.ino +++ b/examples/StandardFirmataWiFi/StandardFirmataWiFi.ino @@ -692,7 +692,7 @@ void sysexCallback(byte command, byte argc, byte *argv) } if (IS_PIN_PWM(pin)) { Firmata.write(PIN_MODE_PWM); - Firmata.write(8); // 8 = 8-bit resolution + Firmata.write(DEFAULT_PWM_RESOLUTION); } if (IS_PIN_DIGITAL(pin)) { Firmata.write(PIN_MODE_SERVO);