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, но я не думаю, что они подходят для моего случая, потому что я не могу имитировать внешнее прерывание (или могу?).
Мне очень интересно узнать ваше мнение по этому поводу. :)
@user60623, 👍0
Обсуждение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
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- ESP8266 на Wi-Fi без пароля, возможно?
- ESP8266 Аналоговое чтение мешает Wi-Fi?
В качестве солнечной панели вы можете использовать солнечную панель MEGSUN 10W 12V Mono или аналогичную. Они меньше, чем вы указали, и их должно быть достаточно для питания ESP., @Coder_fox