ESP8266 enable second I2C bus

This commit is contained in:
Theo Arends
2026-03-12 14:03:09 +01:00
parent 450819a7ab
commit a08ced3de4
5 changed files with 10 additions and 64 deletions
+1 -2
View File
@@ -5,13 +5,13 @@ All notable changes to this project will be documented in this file.
## [15.3.0.2]
### Added
- ESP8266 redesigned I2C Wire driver to support second I2C bus
- Environment sensors CCS811, SGP30 and SGP40 second I2C bus support
- Real Time Clocks BM8563, PCF85063 and PCF85363 second I2C bus support
### Breaking Changed
### Changed
- ESP8266 redesigned I2C Wire driver to support second I2C bus
- Adafruit_BusIO library from v1.11.0 to v1.17.4
- Adafruit_CCS811 library from v1.0.0.14 to v1.1.3
- Adafruit SGP30 library from v1.2.0 to v2.0.3
@@ -142,7 +142,6 @@ All notable changes to this project will be documented in this file.
- Berry `tasmota.micros()` to get time in microseconds (#24192)
- Support for AGS02MA TVOC sensor (#24109)
## [15.0.1.5] 20251011
### Changed
- ESP32 Platform from 2025.11.30 to 2025.11.31, Framework (Arduino Core) from v3.1.5 to v3.1.6 and IDF from v5.3.4.251110 to v5.3.4.251110 (#24146)
- Refactored DALI using TasmotaDali library v1.0.0 adding frame receive buffer
+1 -1
View File
@@ -117,6 +117,7 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Support for JSON value pair `"ARCH"` in template being either ESP8266, ESP32, ESP32C2, ESP32C3, ESP32C5, ESP32C6, ESP32H2, ESP32H4, ESP32P4, ESP32S2 or ESP32S3
- Support for Sensirion SCD42 and SCD43 CO2 sensor
- Support for Sensirion STCC4 CO2 sensor
- ESP8266 redesigned I2C Wire driver to support second I2C bus
- Environment sensors CCS811, SGP30 and SGP40 second I2C bus support
- Real Time Clocks BM8563, PCF85063 and PCF85363 second I2C bus support
- I2S full duplex, auto rx sample rate [#24469](https://github.com/arendst/Tasmota/issues/24469)
@@ -129,7 +130,6 @@ The latter links can be used for OTA upgrades too like ``OtaUrl https://ota.tasm
- Adafruit SGP40 library from v1.1.0 to v1.1.4
- Sensirion Core library from v0.6.0 to v0.7.2
- LVGL library from v9.4.0 to v9.5.0 [#24470](https://github.com/arendst/Tasmota/issues/24470)
- ESP8266 redesigned I2C Wire driver to support second I2C bus
- SHT1x software reset I2C bus after initial (un)detection
- Matter improved parameters handling [#24471](https://github.com/arendst/Tasmota/issues/24471)
@@ -33,14 +33,14 @@ extern "C"
/*** so bad ****/
// https://github.com/esp8266/Arduino/issues/3063#issuecomment-786266957
#define MAX_TWI_INSTANCES 5
#define MAX_TWI_INSTANCES 2
typedef void (*fn_timer)(void *);
typedef void (*fn_event)(ETSEvent *e);
typedef void (*fn_sclChange)();
typedef void (*fn_sdaChange)();
int timers = 0;
Twi *twi_instances[5];
Twi *twi_instances[2];
void ICACHE_RAM_ATTR timer0(void *n)
{
twi_instances[0]->onTimer(n);
@@ -49,18 +49,6 @@ void ICACHE_RAM_ATTR timer1(void *n)
{
twi_instances[1]->onTimer(n);
}
void ICACHE_RAM_ATTR timer2(void *n)
{
twi_instances[2]->onTimer(n);
}
void ICACHE_RAM_ATTR timer3(void *n)
{
twi_instances[3]->onTimer(n);
}
void ICACHE_RAM_ATTR timer4(void *n)
{
twi_instances[4]->onTimer(n);
}
void eventTask0(ETSEvent *e)
{
twi_instances[0]->eventTask(e);
@@ -69,18 +57,6 @@ void eventTask1(ETSEvent *e)
{
twi_instances[1]->eventTask(e);
}
void eventTask2(ETSEvent *e)
{
twi_instances[2]->eventTask(e);
}
void eventTask3(ETSEvent *e)
{
twi_instances[3]->eventTask(e);
}
void eventTask4(ETSEvent *e)
{
twi_instances[4]->eventTask(e);
}
void ICACHE_RAM_ATTR sclChange0()
{
@@ -102,40 +78,10 @@ void ICACHE_RAM_ATTR sdaChange1()
twi_instances[1]->onSdaChange();
}
void ICACHE_RAM_ATTR sclChange2()
{
twi_instances[2]->onSclChange();
}
void ICACHE_RAM_ATTR sdaChange2()
{
twi_instances[2]->onSdaChange();
}
void ICACHE_RAM_ATTR sclChange3()
{
twi_instances[3]->onSclChange();
}
void ICACHE_RAM_ATTR sdaChange3()
{
twi_instances[3]->onSdaChange();
}
void ICACHE_RAM_ATTR sclChange4()
{
twi_instances[4]->onSclChange();
}
void ICACHE_RAM_ATTR sdaChange4()
{
twi_instances[4]->onSdaChange();
}
fn_event twi_eventTasks[] = {&eventTask0, &eventTask1, &eventTask2, &eventTask3, &eventTask4};
fn_sclChange twi_sdaChanges[] = {&sdaChange0, &sdaChange1, &sdaChange2, &sdaChange3, &sdaChange4};
fn_sdaChange twi_sclChanges[] = {&sclChange0, &sclChange1, &sclChange2, &sclChange3, &sclChange4};
fn_timer twi_timers[] = {&timer0, &timer1, &timer2, &timer3, &timer4};
fn_event twi_eventTasks[] = {&eventTask0, &eventTask1};
fn_sclChange twi_sdaChanges[] = {&sdaChange0, &sdaChange1};
fn_sdaChange twi_sclChanges[] = {&sclChange0, &sclChange1};
fn_timer twi_timers[] = {&timer0, &timer1};
fn_timer getTimer(Twi *obj)
{
+2
View File
@@ -117,6 +117,8 @@ const char WIFI_HOSTNAME[] = WIFI_DEFAULT_HOSTNAME; // Override by user_confi
#define ARDUINO_CORE_RELEASE "2.7.8"
#endif // ARDUINO_ESP8266_RELEASE
#define USE_I2C_BUS2 // Add support for second I2C bus on ESP8266
#ifndef USE_ADC_VCC
#define USE_ADC
#else
-1
View File
@@ -644,7 +644,6 @@
#define I2CDRIVERS_128_159 0xFFFFFFFF // Enable I2CDriver128 to I2CDriver159
#ifdef USE_I2C
// #define USE_I2C_BUS2 // Add experimental support for second I2C bus on ESP8266 (+0k6k code)
// #define USE_SHT // [I2cDriver8] Enable SHT1X sensor (+1k4 code)
// #define USE_HTU // [I2cDriver9] Enable HTU21/SI7013/SI7020/SI7021 sensor (I2C address 0x40) (+1k5 code)
// #define USE_BMP // [I2cDriver10] Enable BMP085/BMP180/BMP280/BME280 sensors (I2C addresses 0x76 and 0x77) (+4k4 code)