diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5a0f71364..b8bb36cef 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -65,5 +65,6 @@ The attached binaries can also be downloaded from http://ota.tasmota.com/tasmota - Change redesigning ESP8266 GPIO internal representation in line with ESP32 - Change new IR Raw compact format (#9444) - Change MAX31865 driver to support up to 6 thermocouples selected by ``MX31865 CS`` instead of ``SSPI CS`` (#9103) +- Change A4988 optional microstep pin selection - Add optional support for Mitsubishi Electric HVAC by David Gwynne (#9237) - Add optional support for Orno WE517-Modbus energy meter by Maxime Vincent (#9353) diff --git a/tasmota/CHANGELOG.md b/tasmota/CHANGELOG.md index 28234a417..5d8b7ed5f 100644 --- a/tasmota/CHANGELOG.md +++ b/tasmota/CHANGELOG.md @@ -8,6 +8,7 @@ - Change redesigning ESP8266 GPIO internal representation in line with ESP32 - Change new IR Raw compact format (#9444) - Change MAX31865 driver to support up to 6 thermocouples selected by ``MX31865 CS`` instead of ``SSPI CS`` (#9103) +- Change A4988 optional microstep pin selection - Add optional support for Mitsubishi Electric HVAC by David Gwynne (#9237) - Add optional support for Orno WE517-Modbus energy meter by Maxime Vincent (#9353) diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 3fcbd11d9..b62240e49 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -100,8 +100,9 @@ enum UserSelectablePins { GPIO_ZIGBEE_TX, GPIO_ZIGBEE_RX, // Zigbee Serial interface GPIO_RDM6300_RX, // RDM6300 RX GPIO_IBEACON_TX, GPIO_IBEACON_RX, // HM17 IBEACON Serial interface - GPIO_A4988_DIR, GPIO_A4988_STP, GPIO_A4988_ENA, // A4988 interface - GPIO_A4988_MS1, GPIO_A4988_MS2, GPIO_A4988_MS3, // A4988 microstep + GPIO_A4988_DIR, GPIO_A4988_STP, GPIO_A4988_ENA, GPIO_A4988_MS1, // A4988 interface + GPIO_SPARE1, // Do not use + GPIO_SPARE2, // Do not use GPIO_DDS2382_TX, GPIO_DDS2382_RX, // DDS2382 Serial interface GPIO_DDSU666_TX, GPIO_DDSU666_RX, // DDSU666 Serial interface GPIO_SM2135_CLK, GPIO_SM2135_DAT, // SM2135 PWM controller @@ -212,7 +213,9 @@ const char kSensorNames[] PROGMEM = D_SENSOR_ZIGBEE_TXD "|" D_SENSOR_ZIGBEE_RXD "|" D_SENSOR_RDM6300_RX "|" D_SENSOR_IBEACON_TX "|" D_SENSOR_IBEACON_RX "|" - D_SENSOR_A4988_DIR "|" D_SENSOR_A4988_STP "|" D_SENSOR_A4988_ENA "|" D_SENSOR_A4988_MS1 "|" D_SENSOR_A4988_MS2 "|" D_SENSOR_A4988_MS3 "|" + D_SENSOR_A4988_DIR "|" D_SENSOR_A4988_STP "|" D_SENSOR_A4988_ENA "|" D_SENSOR_A4988_MS1 "|" + "s1|" + "s2|" D_SENSOR_DDS2382_TX "|" D_SENSOR_DDS2382_RX "|" D_SENSOR_DDSU666_TX "|" D_SENSOR_DDSU666_RX "|" D_SENSOR_SM2135_CLK "|" D_SENSOR_SM2135_DAT "|" @@ -261,6 +264,7 @@ const char kSensorNamesFixed[] PROGMEM = D_SENSOR_USER; #define MAX_MAX31865S 6 +#define MAX_A4988_MSS 3 #define MAX_WEBCAM_DATA 8 #define MAX_WEBCAM_HSD 3 @@ -293,10 +297,16 @@ const uint16_t kGpioNiceList[] PROGMEM = { #endif AGPIO(GPIO_LEDLNK), // Link led AGPIO(GPIO_LEDLNK_INV), // Inverted link led + +/*-------------------------------------------------------------------------------------------*\ + * Protocol specifics +\*-------------------------------------------------------------------------------------------*/ + #ifdef USE_I2C AGPIO(GPIO_I2C_SCL), // I2C SCL AGPIO(GPIO_I2C_SDA), // I2C SDA #endif + #ifdef USE_SPI AGPIO(GPIO_SPI_MISO), // SPI MISO AGPIO(GPIO_SPI_MOSI), // SPI MOSI @@ -320,6 +330,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_TXD), // Serial interface AGPIO(GPIO_RXD), // Serial interface +/*-------------------------------------------------------------------------------------------*\ + * Single wire sensors +\*-------------------------------------------------------------------------------------------*/ + #ifdef USE_DHT AGPIO(GPIO_DHT11), // DHT11 AGPIO(GPIO_DHT22), // DHT21, DHT22, AM2301, AM2302, AM2321 @@ -334,7 +348,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_LMT01), // LMT01, count pulses on GPIO #endif -// Light +/*-------------------------------------------------------------------------------------------*\ + * Light +\*-------------------------------------------------------------------------------------------*/ + #ifdef USE_LIGHT #ifdef USE_WS2812 AGPIO(GPIO_WS2812), // WS2812 Led string @@ -368,13 +385,16 @@ const uint16_t kGpioNiceList[] PROGMEM = { #endif #endif // USE_LIGHT +/*-------------------------------------------------------------------------------------------*\ + * Transmission sensors +\*-------------------------------------------------------------------------------------------*/ + #if defined(USE_IR_REMOTE) || defined(USE_IR_REMOTE_FULL) AGPIO(GPIO_IRSEND), // IR remote #if defined(USE_IR_RECEIVE) || defined(USE_IR_REMOTE_FULL) AGPIO(GPIO_IRRECV), // IR receiver #endif #endif - #ifdef USE_RC_SWITCH AGPIO(GPIO_RFSEND), // RF transmitter AGPIO(GPIO_RFRECV), // RF receiver @@ -396,7 +416,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_HX711_DAT), // HX711 Load Cell data #endif -// Energy sensors +/*-------------------------------------------------------------------------------------------*\ + * Energy sensors +\*-------------------------------------------------------------------------------------------*/ + #ifdef USE_ENERGY_SENSOR #ifdef USE_HLW8012 AGPIO(GPIO_NRG_SEL), // HLW8012/HLJ-01 Sel output (1 = Voltage) @@ -466,7 +489,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { #endif #endif // USE_ENERGY_SENSOR -// Serial +/*-------------------------------------------------------------------------------------------*\ + * Serial sensors +\*-------------------------------------------------------------------------------------------*/ + #ifdef USE_SERIAL_BRIDGE AGPIO(GPIO_SBR_TX), // Serial Bridge Serial interface AGPIO(GPIO_SBR_RX), // Serial Bridge Serial interface @@ -543,6 +569,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_BOILER_OT_RX), #endif +/*-------------------------------------------------------------------------------------------*\ + * Other sensors +\*-------------------------------------------------------------------------------------------*/ + #ifdef USE_MGC3130 AGPIO(GPIO_MGC3130_XFER), AGPIO(GPIO_MGC3130_RESET), @@ -561,9 +591,7 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_A4988_STP), // A4988 step pin // folowing are not mandatory AGPIO(GPIO_A4988_ENA), // A4988 enabled pin - AGPIO(GPIO_A4988_MS1), // A4988 microstep pin1 - AGPIO(GPIO_A4988_MS2), // A4988 microstep pin2 - AGPIO(GPIO_A4988_MS3), // A4988 microstep pin3 + AGPIO(GPIO_A4988_MS1) + MAX_A4988_MSS, // A4988 microstep pin1 to pin3 #endif #ifdef USE_DEEPSLEEP AGPIO(GPIO_DEEPSLEEP), @@ -590,6 +618,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_MIEL_HVAC_RX), // Mitsubishi Electric HVAC RX pin #endif +/*-------------------------------------------------------------------------------------------*\ + * ESP32 specifics +\*-------------------------------------------------------------------------------------------*/ + #ifdef ESP32 #ifdef USE_WEBCAM AGPIO(GPIO_WEBCAM_PWDN), @@ -610,6 +642,11 @@ const uint16_t kGpioNiceList[] PROGMEM = { AGPIO(GPIO_ETH_PHY_MDC), AGPIO(GPIO_ETH_PHY_MDIO), // Ethernet #endif // USE_ETHERNET + +/*-------------------------------------------------------------------------------------------*\ + * ESP32 multiple Analog / Digital converter inputs +\*-------------------------------------------------------------------------------------------*/ + AGPIO(GPIO_ADC_INPUT) + MAX_ADCS, // Analog inputs AGPIO(GPIO_ADC_TEMP) + MAX_ADCS, // Thermistor AGPIO(GPIO_ADC_LIGHT) + MAX_ADCS, // Light sensor @@ -621,6 +658,10 @@ const uint16_t kGpioNiceList[] PROGMEM = { #endif // ESP32 }; +/*-------------------------------------------------------------------------------------------*\ + * ESP8266 single Analog / Digital converter input +\*-------------------------------------------------------------------------------------------*/ + #ifdef ESP8266 const uint16_t kAdcNiceList[] PROGMEM = { GPIO_NONE, // Not used @@ -1151,8 +1192,8 @@ const uint16_t kGpioConvert[] PROGMEM = { AGPIO(GPIO_A4988_STP), // A4988 step pin AGPIO(GPIO_A4988_ENA), // A4988 enabled pin AGPIO(GPIO_A4988_MS1), // A4988 microstep pin1 - AGPIO(GPIO_A4988_MS2), // A4988 microstep pin2 - AGPIO(GPIO_A4988_MS3), // A4988 microstep pin3 + AGPIO(GPIO_A4988_MS1) +1, // A4988 microstep pin2 + AGPIO(GPIO_A4988_MS1) +2, // A4988 microstep pin3 AGPIO(GPIO_DDS2382_TX), // DDS2382 Serial interface AGPIO(GPIO_DDS2382_RX), // DDS2382 Serial interface AGPIO(GPIO_DDSU666_TX), // DDSU666 Serial interface diff --git a/tasmota/xdrv_25_A4988_Stepper.ino b/tasmota/xdrv_25_A4988_Stepper.ino index 48f559314..f70ed76f0 100644 --- a/tasmota/xdrv_25_A4988_Stepper.ino +++ b/tasmota/xdrv_25_A4988_Stepper.ino @@ -45,8 +45,8 @@ void A4988Init(void) A4988_stp_pin = Pin(GPIO_A4988_STP); A4988_ena_pin = Pin(GPIO_A4988_ENA); A4988_ms1_pin = Pin(GPIO_A4988_MS1); - A4988_ms2_pin = Pin(GPIO_A4988_MS2); - A4988_ms3_pin = Pin(GPIO_A4988_MS3); + A4988_ms2_pin = Pin(GPIO_A4988_MS1, 1); + A4988_ms3_pin = Pin(GPIO_A4988_MS1, 2); A4988_spr = 200; A4988_rpm = 30; A4988_mis = 1; @@ -93,7 +93,7 @@ void CmndDoTurn(void) { } void CmndSetMIS(void) { - if (PinUsed(GPIO_A4988_MS1) && PinUsed(GPIO_A4988_MS2) && PinUsed(GPIO_A4988_MS3) && (XdrvMailbox.data_len > 0)) { + if (PinUsed(GPIO_A4988_MS1) && PinUsed(GPIO_A4988_MS1, 1) && PinUsed(GPIO_A4988_MS1, 2) && (XdrvMailbox.data_len > 0)) { short newMIS = strtoul(XdrvMailbox.data,nullptr,10); myA4988->setMIS(newMIS); ResponseCmndDone();