ESP8266 на солнечной энергии. Оптимизация использования модуля WiFi

Прежде всего, я новичок в разработке ESP8266 и микроконтроллеров в целом. Сейчас я работаю над проектом, который пока довольно прост. В основном это выглядит так:

Как видите, у меня есть ESP8266 и несколько периферийных устройств ввода. На данный момент все работает отлично, я могу считывать данные с датчика движения и клавиатуры 4x3. И, соответственно, я могу выводить на реле и светодиод 5 мм. Чтобы сделать его настоящим IoT, я подключил его к Интернету через Thinger.IO. Итак, мой ESP8266 постоянно подключен к этой платформе, и я могу отслеживать его в любое время и в любом месте.

Это здорово. Но моя оптимальная цель — запитать мою конфигурацию от солнечной панели и сделать ее независимой от сети распределения электроэнергии.

Средний рабочий ток всей системы составляет около 313 мА (аккумулятор емкостью 10000 мА·ч полностью разряжается за 32 часа. Выходное напряжение 5 В, 2,1 А).

Итак, сейчас я ищу лучшую солнечную панель, соответствующую моим потребностям. Окончательный будет иметь следующие максимальные размеры: 30x35 см. Я не уверен, что есть какая-то одна панель, которую я могу использовать, но мне интересно узнать ваше мнение по этому поводу.

Еще один аспект, который я хотел бы оптимизировать, — это постоянное подключение к Интернету. По сути, мне нужно, чтобы моя конфигурация была подключена к Интернету только тогда, когда был сделан ввод с клавиатуры или датчик движения что-то обнаружил. В остальное время мне не нужно подключаться к Интернету, и я предполагаю, что модуль WiFi может быть каким-то образом приостановлен. В настоящее время мой код использует SmartConfig и выглядит так: это:

#include <ESP8266WIFI.h>

void connectToWifi() {
  WiFi.mode(WIFI_STA);
  WiFi.beginSmartConfig();

  while(!WiFi.smartConfigDone()){
    delay(500);
  }
}

void setup() {
  connectToWifi();

}

void loop() {

}

Все работает хорошо. Но, как я уже сказал, я хотел бы иметь возможность запускать/останавливать модуль WiFi. Я попытался использовать следующий API:

void toggleWifi(bool isWakeUpCall) {
  if(isWakeUpCall)
    WiFi.forceSleepWake();
  else
    WiFi.forceSleepBegin(30000000);

  delay(500);
}

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

Я читал о режиме сна предлагаемых от ESP8266, но я не думаю, что они подходят для моего случая, потому что я не могу имитировать внешнее прерывание (или могу?).

Мне очень интересно узнать ваше мнение по этому поводу. :)

, 👍0

Обсуждение

В качестве солнечной панели вы можете использовать солнечную панель MEGSUN 10W 12V Mono или аналогичную. Они меньше, чем вы указали, и их должно быть достаточно для питания ESP., @Coder_fox


1 ответ


1

Как описано здесь, ESP8266 можно разбудить с помощью Timer Wake Up или внешнего прерывания. . Идея проста: почти все внутри ESP отключено (включая Wi-Fi и/или системные часы или даже ЦП), и работает только таймер, которому было сказано, когда активировать, прежде чем ESP перешел в спящий режим. По истечении заданного времени таймер запускает GPIO 16 или D0, и если он подключен к выводу сброса ESP, он сбрасывается и снова начинает выполнять код, пока снова не перейдет в спящий режим. В вашем случае вы можете настроить датчик движения на вывод НИЗКОГО уровня при обнаружении движения и подключение к контакту GPIO и контакту сброса, чтобы он запускал перезапуск при обнаружении движения, и в последовательности запуска вы смотрите на контакт, где датчик подключен и делать то, что вы должны сделать. Чтобы клавиатура работала, вы можете установить таймер на сброс каждые 5 секунд, поэтому вам придется удерживать кнопку в течение 5 секунд, ожидая, пока ESP проснется и примет ваш ввод, или вы можете сделать специальную кнопку для пробуждения клавиатуры. ESP, если вы хотите ввести код. В этом случае вам не нужен таймер, поскольку, как вы описали, ESP должен что-то делать только в том случае, если клавиатура активирована или если сработал датчик движения, и, поскольку они могут быть подключены как внешние прерывания, они разбудят ESP. если нужно. Я бы рекомендовал перейти по этой ссылке для получения дополнительной информации о коде и оборудовании.

,

Я уже прочитал много статей о Deep Sleep, но я не уверен, что смогу добиться этого с моими текущими настройками. Причина проста - все мои GPIO в данный момент заняты (Это не только то, что вы видите на схеме. Я решил оставить там самые важные). Таким образом, ввод с клавиатуры и обнаружение движения в моих случаях использования одинаковы. Вы можете либо ввести данные с клавиатуры, либо получить сигнал от датчика обнаружения движения. Я не думаю, что таймер на 5 секунд будет удобен для моего случая. Потому что мне нужно "научить держать 5 сек". мой конечный пользователь, что я не думаю, что это хорошая идея., @user60623

@user60623 user60623 В этом случае вы можете использовать обычную Arduino для обработки всех операций ввода-вывода и использовать ESP только тогда, когда вам нужно отправить данные в облако. Кроме того, если вы ожидаете правильного ответа, предоставьте все, что у вас есть, а не только «важные», поскольку решения очень специфичны для схем проекта. И так как на диаграмме выше я увидел свободные штифты, я предположил, что у вас есть запас., @Coder_fox

Подключение датчика движения к контакту сброса может быть проблематичным. Это привело бы к сбросу ESP каждый раз, когда датчик движения обнаруживал движение, даже если он не был перезапущен с момента последнего сброса. Вам действительно понадобится какая-то логика, которая зафиксирует триггер обнаружения движения на некоторое время или до тех пор, пока ESP не отпустит защелку. Вы можете создать фиксирующий триггер датчика движения с таймером 555 и несколькими дискретными компонентами., @Duncan C