• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
подробности тут.
 
Сверху Снизу