В этой статье я расскажу об одном из своих любительских проектов на ESP8266 - метеостанции на Arduino.

Да! Это очередная метеостанция на Arduino :)

Но не спешите закрывать эту статью, у этого проекта есть своя изюминка, а именно автономная работа без использования аккумуляторов и батарей в суровых условиях уральской зимы.

Для профессионалов эта статья будет не очень интересна, а для тех, кто любит мастерить своими руками и узнавать что-то новое - прошу к прочтению.

В статье я буду часто говорить про Arduino, притом что собственно сама Arduino Uno (или другая модель) в проекте не использовалась. Но поскольку использовались SDK Arduino и Arduino-библиотеки, будем считать этот проект Arduino-проектом.

Идея

Метеостанций на Arduino такое великое множество, что это, наверное, самый популярный проект после моргания светодиодом у начинающих.

Мне хотелось чтобы, у меня за окном на балконе было какое-то устройство, собирающее погодные данные: температуру, влажность и давление. Также устройство будет измерять напряжение питания, чтобы можно было понимать, как все хорошо/плохо с питанием в ночное время суток.

Устройство должно работать 24/7 и не требовать обслуживания.

Данные должны передаваться в реальном времени после каждого изменения (раз в полчаса) по Wi-Fi на домашний MQTT-сервер. Результаты измерений можно будет посмотреть в панели управления с примитивной веб-мордой.

Самое сложное определиться с питанием устройства. Идею тянуть провода на балкон я сразу отмел как эстетически неправильную. Литиевый аккумулятор тоже не подойдет, особенно в условиях уральской зимы он будет быстро разряжаться и деградировать. Литиевая батарея, возможно, бы подошла, но не для питания ESP и точно не для подключения по Wi-Fi.

Для питания метеостанции решено было поставить солнечную батарею и ионистор для накопления энергии. Были опасения, что в ночное время суток ESP съест весь заряд ионистора. Но даже если бы это и случилось, то ионистор не боится полного разряда, в отличие от литиевых аккумуляторов.

Ионистор для питания ESP8266 хорош еще тем, что может отдавать очень высокий ток. А у ESP8266 всегда была с этим проблема, при недостаточном питании по току - модуль может зависнуть. Такое бывает, например, если вы подключаете ESP8266 к DC-DC преобразователю питания, который не дает нужное значение по току.

Компоненты

Набор компонентов
Набор компонентов
  • ESP-01S (ESP8266). Маленький и недорогой модуль. Есть у него один большой недостаток с выходом из глубокого сна, но попробуем это исправить напильником ?

  • Обвязка для ESP-01S (керамический конденсатор 0.1uF и резистор 10K).

  • INA226 (вольтметр/амперметр, I2C, 3.3V); Будем измерять напряжение на ионисторе и отправлять данные на сервер.

  • HTU31D (датчик температуры и влажности, I2C, 3.3V).

  • BMP280 (датчик атмосферного давления, I2C, 3.3V). Этот датчик еще умеет измерять температуру, но мы не будем использовать этот функционал;

  • Ионистор (D-типа 3.8V Farah, 100F); Емкость в 100F была выбрана с небольшим запасом. Всегда можно регулировать интервал измерения, чем дольше устройство находится в режиме сна, тем меньше тратится энергии и наоборот.

  • Солнечные панели (8 штук, 0.5W, 5V). Ох, уж не знаю что там прислали китайцы, но панелей я решил заказать побольше. Чтобы даже в самую пасмурную зимнюю погоду метеостанция могла работать. Возможно этих панелей можно было поставить гораздо меньше, например 6 или вообще 4.

  • DC-DC преобразователь (600mA, input 3-15V, output 3.3V). Импульсный преобразователь, который будет понижать напряжение с солнечных панелей (5V), до 3.3V и заряжать ионистор. Самое главное не подать на ионистор напряжение выше 3.8V, это приведет к его повреждению.

  • Диод Шоттки. Без него в ночное время суток ионистор начнет разряжаться через солнечную батарею. То есть ток потечет назад, а нам это не нужно.

  • Универсальная печатная плата (в те годы я не умел делать платы фоторезистом, поэтому будем колхозить).

  • Пластиковый корпус (обычная коробка из ABS-пластика).

  • Неодимовые магниты (для надежного крепления корпуса к внешней части балкона).

  • MQTT-сервер/веб-морда Для MQTT-сервера я использовал Mosquitto. Веб приложение было написано самостоятельно на React/Nest.JS . Веб-приложение слушало события на MQTT-сервере и при их наступлении сохраняло данные в базе. Веб-приложение после авторизации пускало на страницу, где отображались данные в виде графиков (температура/влажность/напряжение на ионисторе).

Собираем устройство

ESP-01

ESP-01
ESP-01

Как я писал выше в ESP-01 есть проблема с выходом из глубокого сна. ESP-01 можно легко отправить в глубокий сон вызвав ESP.deepSleep(timeout, mode), но модуль никогда из него не выйдет. Для решения этой проблемы мы должны соединить контакты RESET и GPIO16. Это довольно непросто сделать из-за малого размера контактов. Когда таймаут нахождения в глубоком сне истечет, то на контакте GPIO16 появится низкий уровень напряжения (LOW), будучи подключенным к RESET, он перезагрузит ESP-01.

ESP-01 доработанный
ESP-01 доработанный

Также нам нужно добавить немного обвязки для корректной работы ESP-01:

  • Конденсатор 0.1uF между RESET и GND. Этот конденсатор обеспечивает кратковременное замыкание контакта RESET на землю при включении питания, что гарантирует надежный сброс модуля.

  • Резистор 10K между RESET и VCC. Этот резистор подтягивает контакт RESET к высокому уровню, когда он не заземлен. Это предотвращает случайный сброс модуля из-за шума или помех.

Питание

Питание модуля
Питание модуля

Ионистор подключаем напрямую к выходным контактам +/- DC-DC преобразователя. К этим же контактам подключаем ESP-01 и сенсоры (к VCC и GND).

На вход DC-DC преобразователя подключим солнечную батарею. Перед плюсовым контактом DC-DC преобразователя поставим диод Шоттки, чтобы в ночное время суток ионистор не начал разряжаться через солнечную батарею.

Ионистор
Ионистор

Пару слов об ионисторе. Я использовал ионистор или как еще его называют суперконденсатор на 100F, 3.8V. Он мне понравился малым саморазрядом. Для питания ESP-01 ионистор дает хороший ток, модуль у меня ни разу не зависал. Стоят ионисторы немало, ионистор на 100F обошелся мне в 800 руб. По виду и весу ионистор напоминает обычный электролитический конденсатор. Также нужно, иметь в виду что, ионисторы не вечны, в зависимости от условий эксплуатации он может прослужить вам от 5 до 10 лет.

Солнечные батареи

Блоки солнечных батарей были соединены параллельно и приклеены на пластиковую доску.

Солнечная панель
Солнечная панель
Солнечная панель
Солнечная панель

Готовая панель с 8 солнечными батареями была аккуратно размещена на балконе. Наверное, можно было поиграться с углом падения солнечных лучей и придумать более удачное решение для наибольшей эффективности. Но я решил не заморачиваться с этим.

Солнечную панель я поставил впритык к окну на улицу, чтобы как можно больше света попадало на нее. Было бы еще эффективнее вынести ее на улицу, но для этого пришлось бы делать герметизацию.

Солнечная панель
Солнечная панель

Модули датчиков

Все модули датчиков подключаем по I2C к ESP-01. Питание у датчиков будет такое же, как у ESP-01 (3.3V).

Я использовал обычные гребенки с контактами, чтобы можно было легко доставать модули (для других проектов). Думаю, что для более правильной версии проекта контакты должны быть припаяны оловом для надежности соединения.

Модули датчиков
Модули датчиков

Корпус устройства

К корпусу устройства были надежно приклеены магниты для крепления на подоконнике. Сам корпус был обработан герметиком.

Белые провода, торчащие из корпуса, соединяется проводами солнечной панели.

Пластиковый колпачок используется для вывода вентиляционных отверстий. Под внешним колпачком находится еще один защищающий от влаги. Смысл в том, чтобы воздух мог достигнуть датчиков, а вот для влаги это было бы проблематично.

При наличии 3D принтера уверен, что можно придумать что-то в разы лучше.

Корпус устройства
Корпус устройства
Корпус устройства
Корпус устройства

Схема подключения модулей

Схема подключения модулей
Схема подключения модулей

Пишем прошивку

Для программирования я использовал PlatformIO.

Код прошивки:

// main.cpp
#include <Adafruit_BMP280.h>
#include <Adafruit_HTU31D.h>
#include <Arduino.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <INA226_WE.h>
#include <PubSubClient.h>
#include <Wire.h> // I2C

#define uS_TO_M_FACTOR 6e7                            // Количество микросекунд в минуте
#define DEEP_SLEEP_TIMEOUT (int)(30 * uS_TO_M_FACTOR) // Продолжительность глубокого сна (в минутах)
#define RECONNECTION_LIMIT 3 // Число допустимых попыток переподключения
#define RECONNECTION_DELAY 500 // Задержка перед переподключением (в миллисекундах)
#define WIFI_SSID "ENTER WI-FI SSID"
#define WIFI_PASSWORD "ENTER WI-FI PASSWORD"
#define MQTT_SERVER "ENTER MQTT SERVER IP ADDRESS"
#define MQTT_PORT 1883
#define MQTT_CLIENT_ID "Weather Station"
#define MQTT_TOPIC "devices/weather-station/status"

#define BMP280_I2C 0x76
#define HTU31D_I2C 0x40
#define INA226_I2C 0x41

Adafruit_BMP280 bmp = Adafruit_BMP280();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();
Adafruit_HTU31D htu = Adafruit_HTU31D();
INA226_WE ina226 = INA226_WE(INA226_I2C);
WiFiClient espClient;
PubSubClient client(espClient);

struct sensors_data {
  float temperature;
  float humidity;
  float pressure;
  float voltage;
};

struct sensors_data sensors_data;

float convertHumidity(float hPa) {
  float one_mmHg_in_Pa = 101325.0 / 760.0;
  return (hPa * 100.0) / one_mmHg_in_Pa;
}

void bmpEnable(bool val) {
  if (val) {
    bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, Adafruit_BMP280::SAMPLING_X16, Adafruit_BMP280::SAMPLING_X16,
                    Adafruit_BMP280::FILTER_X16, Adafruit_BMP280::STANDBY_MS_1);
  } else {
    bmp.setSampling(Adafruit_BMP280::MODE_SLEEP, Adafruit_BMP280::SAMPLING_NONE, Adafruit_BMP280::SAMPLING_NONE,
                    Adafruit_BMP280::FILTER_OFF, Adafruit_BMP280::STANDBY_MS_4000);
  }
}

void update_sensors_data() {
  // HTU sensor
  htu.enableHeater(true); // Enable power
  sensors_event_t humidity_event, temperature_event;
  htu.getEvent(&humidity_event, &temperature_event);
  htu.enableHeater(false); // Disable power
  sensors_data.temperature = temperature_event.temperature;
  sensors_data.humidity = humidity_event.relative_humidity;

  // BMP sensor
  bmpEnable(true);
  sensors_event_t pressure_event;
  bmp_pressure->getEvent(&pressure_event);
  bmpEnable(false);
  sensors_data.pressure = convertHumidity(pressure_event.pressure);

  // INA sensor
  ina226.powerUp();
  ina226.readAndClearFlags();
  sensors_data.voltage = ina226.getBusVoltage_V();
  ina226.powerDown();
}

bool wifi_connect() {
  if (WiFi.SSID() != "") {
    WiFi.begin(); // Быстрое подключение к ранее запомненной Wi-Fi точке (обычно менее 1 сек).
  } else {
    WiFi.persistent(true); // Разрешить запись данных о последнем Wi-Fi подключении в память
    WiFi.mode(WIFI_STA);
    WiFi.setAutoConnect(true); // При включении подключаться к последней точке доступа
    WiFi.setAutoReconnect(false); // Переподключаться при неудачном подключении
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // Долгое подключение (обычно около 5 сек).
  }
  int conn_result = WiFi.waitForConnectResult();
  return conn_result == WL_CONNECTED;
}

void mqtt_subscribe_cb(char *topic, byte *payload, unsigned int length) {}

bool send_message(char *message) {
  client.setServer(MQTT_SERVER, MQTT_PORT);

  int count = 0;
  while (!client.connect(MQTT_CLIENT_ID)) {
    count += 1;
    if (count == RECONNECTION_LIMIT) {
      return false;
    }
    delay(RECONNECTION_DELAY);
  }

  client.publish(MQTT_TOPIC, message);
  client.disconnect();
  return true;
}

bool send_sensors_message() {
  StaticJsonDocument<256> doc;
  char message[256];
  doc["temperature"] = sensors_data.temperature;
  doc["humidity"] = sensors_data.humidity;
  doc["pressure"] = sensors_data.pressure;
  doc["voltage"] = sensors_data.voltage;
  serializeJson(doc, message);
  return send_message(message);
}

bool start_htu() {
  int count = 0;
  while (!htu.begin(HTU31D_I2C)) {
    count += 1;
    if (count == RECONNECTION_LIMIT) {
      return false;
    }
    delay(RECONNECTION_DELAY);
  };
  htu.enableHeater(false);
  return true;
}

bool start_bmp() {
  int count = 0;
  while (!bmp.begin(BMP280_I2C)) {
    count += 1;
    if (count == RECONNECTION_LIMIT) {
      return false;
    }
    delay(RECONNECTION_DELAY);
  }
  bmpEnable(false);
  return true;
}

bool start_ina() {
  int count = 0;
  while (!ina226.init()) {
    count += 1;
    if (count == RECONNECTION_LIMIT) {
      return false;
    }
    delay(RECONNECTION_DELAY);
  }
  ina226.powerDown();
  return true;
}

void setup() {
#if defined(BOARD_ESP_01S) || defined(BOARD_ESP_01)
  Wire.begin(2, 0); // Настройка I2C (SDA, SCL)
#endif

#ifdef BOARD_ESP_01S
#define LED_BUILTIN 2 // Для ESP-01S
#endif

#ifdef BOARD_ESP_01
#define LED_BUILTIN 1 // Для ESP-01
#endif

  pinMode(LED_BUILTIN, OUTPUT);

  if (start_htu() && start_bmp() && start_ina()) {
    update_sensors_data();

    if (wifi_connect()) {
      send_sensors_message();
    }
  }

  // WAKE_RF_DEFAULT - проснуться с включенным модулем Wi-Fi
  ESP.deepSleep(DEEP_SLEEP_TIMEOUT, WAKE_RF_DEFAULT);
}

void loop() {}

Настройки PlatformIO для ESP-01 и ESP-01S:

; platformio.ini
[env:esp_01]
platform = espressif8266
board = esp01_1m
framework = arduino
upload_speed = 3000000
monitor_speed = 74880
lib_deps =
	knolleary/pubsubclient@^2.8
	adafruit/Adafruit BMP280 Library@^2.3.0
	adafruit/Adafruit HTU31D Library@^1.1.0
	bblanchon/ArduinoJson@^6.18.3
	wollewald/INA226_WE@^1.2.3
build_flags = -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK3 -D BOARD_ESP_01
board_build.f_cpu = 80000000L

[env:esp_01s]
platform = espressif8266
board = esp01_1m
framework = arduino
upload_speed = 3000000
monitor_speed = 74880
lib_deps =
	knolleary/pubsubclient@^2.8
	adafruit/Adafruit BMP280 Library@^2.3.0
	adafruit/Adafruit HTU31D Library@^1.1.0
	bblanchon/ArduinoJson@^6.18.3
	wollewald/INA226_WE@^1.2.3
build_flags = -D PIO_FRAMEWORK_ARDUINO_ESPRESSIF_SDK3 -D BOARD_ESP_01S
board_build.f_cpu = 80000000L

Проблемы

Проверка на герметичность

После пары дождливых дней в сентябре моя метеостанция показывала очень высокие показатели влажности, около 90%. Я не поверил в эти результаты, ведь дождя за окном уже не было. Как оказалось, сильный дождь смог залить станцию водой через вентиляционные отверстия в верхней части корпуса.

Пришлось разбирать корпус, сушить плату и все содержимое. Благо внизу был хороший зазор между дном и самой платой, поэтому сильно начинка станции не пострадала. Я сделал дополнительный пластиковый колпачок внутри у вентиляционных отверстий, чтобы вода не могла попасть внутрь и снова загерметизировал корпус.

Больше эта проблема не возникала. Показания влажности были примерно равны тем, что доступны в интернете. Если бы у меня был 3D-принтер, то корпус можно было сделать намного лучше. Важно сделать так, чтобы при попадании воды сверху, ваш корпус не позволял ей стекать через вентиляционные отверстия вниз.

Морозные и пасмурные дни

Ночью метеостанция использует энергию, запасенную в ионисторе в дневное время. Зимой иногда солнца бывает мало, но станции его хватало. Видимо, большая солнечная батарея успевала заряжать ионистор до нужных значений.

Иногда было тревожно, когда шел сильный снег и уже в 4 часа дня было темно. Мне казалось, что вот сегодня точно заряда в ионисторе не хватит и станция перестанет присылать показания погоды. Но нет, даже в самый темный день все обходилось. По моим подсчетам у ионистора всегда был запас энергии на 3-4 часа до наступления рассвета.

Зимний холод тоже оказывал влияние на ионистор. Чем ниже температура, тем как бы больше тратилось энергии на каждое измерение. Я думаю в холодное время просто усиливался саморазряд ионистора.

Несмотря ни на что, всю зиму станция работала без перебоев, заряда в ионисторе хватало на всю ночь с запасом.

Подведем итоги

Погодная станция
Погодная станция

Ионистор и солнечная батарея - вполне годное решение для питания автономных устройств. Особенно в тех условиях, где литиевый аккумулятор не подходит (отрицательные температуры). Хоть сам ионистор не вечен, но такие устройства могут работать годами, а может, и десятилетиями, не требуя обслуживания.

Солнечная батарея в этом проекте смотрится очень громоздко. Думаю ее размеры, можно сократить за счет увеличения емкости ионистора или выбора другого более экономичного по питанию модуля вместо ESP.

Модуль ESP-01 я бы заменил на что-то другое. ESP не подходит для проектов с малым энергопотреблением. При использовании Wi-Fi в ESP-01 потребление энергии слишком велико (от 70 мА до 200 мА). Просто тогда он был у меня под рукой и его миниатюрный размер идеально подходил для проекта. Сейчас я бы подобрал какой-нибудь модуль Bluetooth у Nordic Semiconductor с низким энергопотреблением.

Корпус устройства нужно лучше продумать. Он не должен нагреваться летом и промокать осенью в дождливое время. Главное вентиляционные отверстия не должны давать возможность воде пробираться внутрь устройства. Плата устройства не должна быть впритык ко дну корпуса. Если влага всё-таки проберется вовнутрь, это не позволит плате намокнуть.

Это был интересный опыт, устройство проработало практически год без обслуживания, передавая данные на MQTT-сервер через каждые полчаса. Больше всего мне понравилось, что устройство не требовало обслуживания. Автономная работа таких девайсов впечатляет. Ионистор удивительный радиокомпонент, “миниатюрная батарейка” способная отдавать высокие токи, который вполне может пригодиться для накопления энергии для автономных проектов (систем автополива на даче, уличных светильников и т.п.).

Спасибо, что дочитали эту статью до конца, удачных самоделок!

Комментарии (42)


  1. peacemakerv
    02.05.2024 07:18
    +4

    И ни одного графика за год работы ?


    1. pkolt Автор
      02.05.2024 07:18
      +2

      Да, вы правы! С графиком это было бы интереснее.

      К сожалению, данные у меня не сохранились, а сама метеостанция сейчас находится в другом городе.


      1. ez2
        02.05.2024 07:18

        А почему данные не сохранились?


  1. S-trace
    02.05.2024 07:18
    +4

    У ионисторов есть проблема - у них рабочий график напряжения линейно падает до нуля в процессе разряда, то есть регулярно может быть так, что энергии в ионисторе ещё довольно много, а вот его напряжение уже просело ниже предела питания ESP. Что вы сделали чтобы решить эту проблему?

    Или вы просто запитали ESP напрямую от ионистора?

    Если так - можно подумать о том, чтобы использовать второй ионистор поменьше (или даже просто конденсатор, надо по ёмкости смотреть) и второй DC-DC для его зарядки, а также схему по типу "джоуль-вор", способную работать начиная от 0.3V на входе, чтобы на маленьком ионисторе напряжение поддерживалось равным примерно 3.3V, а его ёмкости хватало бы на проведение одного-двух измерений.

    После измерения отправляем ESP в сон, а джоуль-вор и DC-DC потихоньку заряжают маленький ионистор от большого, высасывая из большого энергию на напряжении, от которого ESP уже не может работать (от 2.6V и ниже).

    Возможно, таким образом получится значительно "увеличить ёмкость" ионистора и уменьшить необходимое количество солнечных батарей, или же улучшить надёжность, чтобы не приходилось беспокоиться о разрядке.

    Можно даже попробовать питать второй DC-DC также от солнечной батареи паралельно с джоуль-вором (есть солнце - заряжаем маленький ионистор также как большой, от батареи, нет солнца - джоуль-вор и большой ионистор вступают в работу).


    1. pkolt Автор
      02.05.2024 07:18

      Да, я запитал ESP просто от ионистора напрямую. Действительно, дополнительный DC-DC преобразователь сможет выжать больше из ионистора. Спасибо, идея хорошая!


      1. S-trace
        02.05.2024 07:18

        Мне не попадались такие сверхнизковольные dc-dc, поэтому и упомянул "джоуль-вор" - их на германиевых транзисторах строят, они открываются от 0.3v

        Только маломощные они, и выходное напряжение не стабилизировано - поэтому не получится напрямую питать ESP, а придётся потихоньку заряжать ионистор. И нормальный dc-dc, чтобы не перезарядить ионистор.


    1. tigreavecdesailes
      02.05.2024 07:18

      Можно ещё взять ионистор на 5В и подключить его ДО dc-dc, прямо к солнечной батарее.


      1. S-trace
        02.05.2024 07:18

        Можно, но проблему использования всей ёмкости ионистора это не решит. С таким же успехом можно просто увеличить трехвольтовый ионистор.


        1. Buharovsky
          02.05.2024 07:18
          +1

          Можно взять ионистор не на 5В, а больше и соединить панели последовательно. А уже после ионистора понижайку.


  1. riky
    02.05.2024 07:18

    мне кажется батареи дорого выходят. не сбалансировано.
    рассмотреть бы другие варианты, например 1 солнечная + 18650. тут смысл в том что одна 18650 может её месяц питать, если она изредка будет подзаряжаться - то все ок.
    мне кажется если взять МК поэкономнее то и 2450 проработает зиму. да в -30 может и не будет работать но если широта не слишком большая - то таких дней не так и много.


    1. peacemakerv
      02.05.2024 07:18

      -


  1. iqp
    02.05.2024 07:18
    +1

    Если взять микроконтроллер с ультранизким потреблением, передатчик LoRa, то ни ионистор, ни солнечные панели не нужны, на батарейке годы может работать.


    1. ximik666
      02.05.2024 07:18
      +1

      Наш комплект из atmega+датчик влажности, темературы, освещенности,lora модулем и 2-AA батарейкамии живет уже 4 год и даже не думает выключаться.


      1. pkolt Автор
        02.05.2024 07:18

        А какой lora модуль вы используете если не секрет? Насколько я помню lora рассчитан на большие расстояния и мощность. Или есть какие-то экономичные по питанию варианты?


        1. ximik666
          02.05.2024 07:18
          +1

          Если интересно, то вот https://habr.com/ru/articles/668460/

          Lora модули самые дешевые и обычные. Уже не помню регулировали мы там мощность или нет, но вот время передачи сигнала для экономии времени работы точно отлаживали.

          И Lora модули в нашем случае были очень экономичные.


  1. Vilos
    02.05.2024 07:18

    Самое главное не подать на ионистор ток выше 3.8V

    Исправьте пожалуйста, я конечно понимаю что вы имели ввиду, но это очень уж режет глаз, подается напряжение, а не ток. Ток - протекает. Вас читают и дети тоже, не нужно учить их неправильному. Начинающие, пропустите и не читайте эту ремарку автора...она "корявая".


    1. pkolt Автор
      02.05.2024 07:18

      Исправил! Опечатался, спасибо за вашу внимательность.


  1. peacemakerv
    02.05.2024 07:18
    +1

    Просто для сведения: только что закончил эксперимент: от одной 18650 на 3 Ач (емкость проверена и подтверждена измерением через какую-то заряжалку liitokala) ESP8266 читающая акселерометр 1 раз в 7 минут (всё остальное время - deepsleep) и отправляющая json через wifi на сервер проработала полтора месяца (при разряде до 3.2В с 4.2).


    1. ThingCrimson
      02.05.2024 07:18
      +1

      Позволю себе тогда дополнить своей статистикой от трёх измерителей на ESP8266 ESP-12E плюс AM2320 (I2C mode), питание от 18650 2 А*ч через LDO TH7333-A; раз в 10 минут просыпаемся из deepSleep(), меряем температуру и влажность, отправляем через WiFi, засыпаем. От одного до полутора месяцев (с 4.2 до 3.3В), сильно зависит от скорости подключения к WiFi AP (в зависимости от расстояния и кучи других факторов от 9 до 15 секунд активного энергопотребления).


      1. peacemakerv
        02.05.2024 07:18
        +1

        Ну, примерно тоже самое - чуть реже, но на меньшей батарейке.

        У себя забыл добавить, что главное у меня - это обесточить CH340 на NodeMCU плате (ногу отпаял), без этого постоянно она жрет 7 мА, с вся работа на несколько суток суммарно (точно уже не помню).


  1. xSVPx
    02.05.2024 07:18
    +2

    Лет пять назад была статья подобного датчика собранного чуть ли не в пробирке. Т.е. он висел просто за бортом на дереве. Но там человек сильно экономил электричество.

    В вашем варианте все это непонятно зачем. С тем же успехом можно было электричество из розетки подвести...


    1. Buharovsky
      02.05.2024 07:18
      +1

      С тем же успехом можно было электричество из розетки подвести...

      Подумал про это же, когда увидел, что панель внутри, а датчик снаружи - провода никуда не делись.


  1. Ig_B
    02.05.2024 07:18
    +2

    htu.enableHeater(true); // Enable power

    Это включение встроенного нагревателя для предотвращения конденсации влаги на сенсоре. Имеет смысл включать, если влажность высокая и имеет тенденцию к повышению.


  1. sav13
    02.05.2024 07:18
    +1

    Немного из собственного опыта:

    1. К сожалению, это не совсем ионисторы. Это гибридные суперконденсаторы LIC (химические) - промежуточное звено между суперконденсатором и аккумулятором. К сожалению, они имеют ограничения по минимальной температуре -20С, что делает их уличное применения на большей части территории РФ малопригодным. Также они не допускают разряда ниже 2.5В (также как и аккумуляторы)
      https://en.cda-cap.com/index.php/product/lic/

    2. ESP8266 пора уже отправить на свалку с его костылем пробуждения от сна через GPIO16. Особенно для автономных устройств. Есть ведь отличный заменитель ESP32C3 с потреблением 5мкА deepSleep. Хотя для батареечных/ионисторынх устройств предпочтительнее использовать ZigBEE/LoRa/BLE И прочие LowerPower устройства.

    3. В ESP, к сожалению, нет контроля напряжения питания, как например в большинстве AVR. Да еще и программа во внешней памяти, которая вполне может заглючить при низком напряжении питания, что приведет к зависанию контроллера. Лечится монитором питания типа MAX706 на 2.7-2.9В

    4. В декабре длинными ночами и короткими пасмурными днями такая система все таки уйдет в Offline без десятикратного запаса емкости ионистора и мощности солнечной панели.


    1. peacemakerv
      02.05.2024 07:18
      +1

      1. "Ширее" надо смотреть на вопросы, или "ширше". И на КамАЗе за грибами ездить реже. Т.е. все-таки учитывать вопросы доступности и цен. Когда будут новые решения дешевле старых, или когда старые будут принудительно выкинуты из производства - тогда и придется пересаживаться на другие костыли.


      1. sav13
        02.05.2024 07:18

        Ну ESP32C3 КамАЗом трудно назвать. Это скорее к ESP32S3

        Просто на DeepSleep у ESP8266 без слез смотреть очень трудно )))

        Особенно на такой


    1. ThingCrimson
      02.05.2024 07:18

      В ESP, к сожалению, нет контроля напряжения питания, как например в большинстве AVR.

      Да, но есть ADC же! Подпаиваю туда два резистора (10К на GND и 100K на VCC), и вот уже:

      #define ADC_COEF (100.0+10.0)/10.0
       …
      void loop() {
        volts = analogRead(A0)/1024.0 * ADC_COEF;
         …
        if (volts > 3.2) {
          ESP.deepSleep(MC_SEC*1e6);
        } else {
          ESP.deepSleep(0);
        }
      }
      

      Как минимум, глубокого разряда аккумулятора после такого удаётся избежать, устройство просто уходит в летаргический сон до замены источника питания.


      1. sav13
        02.05.2024 07:18

        Ага
        То есть ионистор разрядился ниже какого-то значения.

        ESP ушел в литаргический сон

        Ионистор зарядился, контроллер из сна не вышел (((

        Монитор питания не так работает. Он просто прижимает ресет контроллера к земле, когда напряжения на входе ниже заданного значения. Сам при этом потребляет наноамперы


        1. ThingCrimson
          02.05.2024 07:18

          Это да, в моём варианте использования аккумулятор сам зарядиться не может, потому меня устроил такой вот костыль. Конечно, описаный Вами монитор питания лучше.


  1. Yuri0128
    02.05.2024 07:18
    +2

    Один я что-ль заметил, - у ТС "заряжающий" DC-DC собран по схеме SEPIC (о чем говорят 2 индуктивности на плате), - то нафиг там диод на подключении к солнечным панелям? При напряжении на входе преобразователи ниже уровня запуска он не работает и выход отсекается от входа конденсатором SEPIC-а, то есть на вход ничего пойти не может.

    И, еще, - как правильно заметили это гибридные конденсаторы-аккумуляторы, но все-равно странно как-то нагружать преобразователь , которая для него почти КЗ в разряженном состоянии. Преобразователь будет постоянно вылетать в защиту и неоптимально работать, - там нужна именно схема заряда как для аккумулятора с ограничением тока.

    Ну и ЕСП-ка даже от реального ионистора вполне себе может функционировать, если минимизировать время работы по WiFI (как главного потребителя), - тут я не вижу проблем.


    1. pkolt Автор
      02.05.2024 07:18

      то нафиг там диод на подключении к солнечным панелям?

      Вы правильно заметили, для меня это тоже загадка. Но без использования диода в вечернее время суток ионистор начинал быстро разряжаться. Поэтому был установлен диод.


      1. c141592653589793238462643
        02.05.2024 07:18
        +2

        Без диода солнечные батареи начинают работать в режиме фонарика. Это свечение можно зафиксировать с помощью обычной веб камеры с удаленным ИК фильтром.


  1. kasiopei
    02.05.2024 07:18

    А от солнца не нагревается датчик температуры?


    1. rass5000
      02.05.2024 07:18
      +2

      Тут вообще странное решение - почти герметично упаковать все датчики в черную коробку и выставить на солнце. Датчики измеряют микроклимат внутри черной коробочки. Дырочки в колпачке - это ни о чем. Вам нужно делать экран Стивенсона или метеобудку Селянинова и выставлять их минимум на 1.0-1.5 метра от стены здания, исключив вертикальные потоки нагретого воздуха от стены здания. Тогда будут актуальные метеопоказания. а так это все условно - "данные с марса"


  1. iShrimp
    02.05.2024 07:18

    Интересный подход. Почему не использовали литий-титанат? Даже если учесть снижение ёмкости и тока на морозе, 1-2 штуки 18650 (низкотемпературные) обеспечат как минимум на порядок больший запас энергии.


    1. pkolt Автор
      02.05.2024 07:18

      Мне не хотелось использовать литиевые аккумуляторы, потому-что за ними все равно нужно следить из-за пожароопасности.

      Но если пофантазировать, то я бы взял один литий-железо-фосфатный аккумулятор 26700 на 4000 mAh, он устойчив к морозу и не так опасен как литий-ионный.

      В целом это перебор для такого устройства, правильнее тут все таки заменить ESP на что-то более пригодное и экономичное по питанию.


      1. Raegdan
        02.05.2024 07:18

        А зачем тут целых 4000 мАч?
        Можно, кстати, взять на барахолке б/ушный айкос и заюзать его запчасти. Там 18650 литий-ион с обвязкой заряда-разряда в основном блоке, и маленький литий-феррофосфат с обвязкой - в мундштуке. Интересное решение, кстати - я сам до него не додумался бы, пока не посмотрел схему айкоса: феррофосфат за счет более низкого рабочего напряжения можно заряжать от иона без повышайки.


  1. Raegdan
    02.05.2024 07:18

    RF harvesting - еще более перспективная штука по сравнению с солнечной батареей. Но требует оптимизацию энергопотребления еще на порядок лучше.


    1. ThingCrimson
      02.05.2024 07:18

      Главное, чтобы Лаксианский ключ не требовал!

      (простите, не удержался от отсылки к рассказу Роберта Шекли про аппарат, который как раз RF harvesting использовал, а выключался только упомянутым ключом)


      1. Raegdan
        02.05.2024 07:18
        +1

        Не читал, к сожалению. Но почему его нельзя было в клетку Фарадея посадить на голодовку?


        1. ThingCrimson
          02.05.2024 07:18

          Ну, это же не реальный аппарат, а фантастика, судя по инструкции:

          «Мелджский Бесплатный Производитель. Очередной Триумф Лаборатории Глоттена. Неразрушимый Бездефектный Производитель. Не Требует Энергетических Затрат. Чтобы Включить, Нажмите Кнопку Номер Один. Чтобы Выключить, Воспользуйтесь Лаксианским Ключом. В Случае Обнаружения Неисправности, Пожалуйста, Верните Производитель В Лабораторию Глоттена».

          Так что там не только RF harvesting мог быть, и судя по финальной фразе: «Но если вдруг найдете Лаксианский Ключ, то возвращайтесь и называйте любую цену.» — не помогала клетка Фарадея…


          1. Raegdan
            02.05.2024 07:18

            Ну, я так-то в курсе, что Шекли - фантаст.