• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как программно (из самого скетча) определить тип ESP

kotyara12

New member
Добрый день!

Возникла необходимость адаптировать код с ESP8266 на ESP32. Соответственно некоторые функции и библиотеки в них отличаются. Как в скетче (своих библиотеках) определить, для какого собственно чипа создается скетч???
 

enjoynering

Well-known member
с помощью макросов например:

Код:
#if defined(__AVR__)
#include <avr/pgmspace.h>                  //use for PROGMEM Arduino AVR
#elif defined(ESP8266) || defined(ESP32)
#include <pgmspace.h>                      //use for PROGMEM Arduino ESP8266
#elif defined(_VARIANT_ARDUINO_STM32_)
#include <avr/pgmspace.h>                  //use for PROGMEM Arduino STM32
#endif

а вот так можно отключать библиотеки, чтоб экономить место на флешке. дано библотека MAX31855 и два класса. первый использует железный SPI, а второй ногодрыг aka bit-bang.
в железном MAX31855.h пишем:

Код:
#ifndef  MAX31855_SOFT_SPI                 //enable upload spi.h
#include <SPI.h>
#endif
в ногодрыге MAX31855_soft.h пишем:

Код:
#define MAX31855_SOFT_SPI //disable upload spi.h

#include <MAX31855.h>
теперь когда мы используем #include <MAX31855_soft.h>, у сначало грузится макрос MAX31855_SOFT_SPI, а потом грузится все из MAX31855soft.h где есть проверка о том, что если макроса MAX31855_SOFT_SPI нет то грузить SPI.h, если MAX31855_SOFT_SPI есть то пропустить загрузку SPI.h

подробности тут.
 

enjoynering

Well-known member
вот еще пример. вызов Wire.requestFrom() в arduino framework для STM32 отличается от всех остальных framework-ов (avr, esp ...) .
поэтому в HTU21D.cpp делаем так:

Код:
  /* read serial_2 -> SNB3**, SNB2, CRC */
  #if defined(_VARIANT_ARDUINO_STM32_)
  Wire.requestFrom(HTU21D_ADDRESS, 3);
  #else
  Wire.requestFrom(HTU21D_ADDRESS, 3, true);                //true, stop message after transmission & releas the I2C bus
  #endif
подробности тут.
 
Сверху Снизу