Розумна система безперебійного живлення для Wi-Fi роутера з моніторингом через INA219
Smart Wi-Fi UPS - це інтелектуальна система моніторингу та керування живленням Wi-Fi роутера, яка забезпечує безперебійний інтернет навіть при відключенні електроенергії. Система відстежує стан мережі 240V, заряд/розряд батареї, веде детальні логи та надає зручний веб-інтерфейс.
Перше відео проекту: Дивитись на YouTube
- 🔌 Автоматична детекція відключення світла - миттєве визначення втрати мережі 240V
- 🔋 Моніторинг батареї в реальному часі - відстеження струму, напруги та стану заряду
- 📊 Підрахунок ємності - точний облік mAh при розряді батареї
- 🌐 Веб-інтерфейс - зручне керування та моніторинг через браузер
- 📡 Wi-Fi Provisioning - легке підключення до домашньої мережі через AP режим
- 💾 CSV логування - збереження всіх даних для подальшого аналізу
- ⚡ Live оновлення - SSE (Server-Sent Events) для моніторингу в реальному часі
- 🎯 Автокалібрування - автоматичне визначення baseline струму та полярності
- 📱 Адаптивний дизайн - працює на телефонах, планшетах та комп'ютерах
Система забезпечує:
- ✅ Безперебійний інтернет при відключенні світла
- ✅ Моніторинг часу автономної роботи
- ✅ Статистику відключень електроенергії
- ✅ Контроль стану батареї
- ✅ Попередження про низький заряд
- ESP32 - мікроконтролер з Wi-Fi (будь-яка плата з MicroPython)
- INA219 - високоточний датчик струму/напруги (I2C)
- Shunt резистор - 0.1Ω (можна налаштувати під ваші потреби)
- Акумулятор - Li-ion/LiFePO4 (залежно від потужності роутера)
- DC-DC перетворювач - для живлення роутера від батареї
ESP32 INA219
------ ------
GPIO 22 ---> SCL
GPIO 21 ---> SDA
3.3V ---> VCC
GND ---> GND
[Мережа 240V] --> [Зарядний пристрій] --> [Батарея] --> [INA219] --> [DC-DC] --> [Wi-Fi Роутер]
|
[ESP32]
-
Завантажте MicroPython firmware для ESP32:
- Офіційний сайт: micropython.org/download/esp32
- Рекомендована версія: v1.20 або новіша
-
Прошийте ESP32 за допомогою esptool:
# Очистка flash esptool.py --chip esp32 --port COM3 erase_flash # Завантаження firmware esptool.py --chip esp32 --port COM3 write_flash -z 0x1000 esp32-firmware.bin
-
Встановіть ampy для завантаження файлів:
pip install adafruit-ampy
-
Завантажте
main.pyна ESP32:ampy --port COM3 put main.py
Або використовуйте Thonny IDE для зручнішого завантаження.
- Перезавантажте ESP32 (натисніть кнопку RESET)
- ESP32 автоматично створить Wi-Fi точку доступу:
- SSID:
INA-SETUP - Пароль:
12345678
- SSID:
- Підключіться до цієї мережі з телефону або комп'ютера
- Відкрийте браузер та перейдіть:
http://192.168.4.1
При першому запуску система автоматично:
- Виміряє базовий струм (baseline) при увімкненій мережі 240V
- Визначить рівень шуму
- Важливо: НЕ змінюйте навантаження протягом перших 3 секунд!
Система попросить виконати тест:
- Вимкніть мережу 240V на ~3 секунди
- Увімкніть знову
- Система автоматично визначить правильну полярність вимірювань
Через веб-інтерфейс:
- Натисніть "Scan Wi-Fi"
- Виберіть вашу домашню мережу зі списку
- Введіть пароль
- Натисніть "Connect"
- Після успішного підключення AP режим автоматично вимкнеться через 5 секунд
Після підключення до пристрою (http://192.168.4.1 або IP в локальній мережі):
Функції керування:
- 🔍 Scan Wi-Fi - сканування доступних мереж
- 🔗 Connect - підключення до вибраної Wi-Fi мережі
- 📥 Download CSV - завантаження файлу з логами
- 🔄 Restart - перезавантаження ESP32
- 🗑️ Forget Wi-Fi - видалення збережених налаштувань (увімкне AP режим)
Live моніторинг показує:
- 📊 Поточний стан системи (CHARGING / DISCHARGE / IDLE)
- ⚡ Напругу шини (Bus Voltage)
- 🔋 Струм (Raw, Total, Average в mA)
- 📈 Накопичені mAh при розряді
- 📡 Статус Wi-Fi підключення
- 🕐 Час роботи (uptime)
Веб-інтерфейс відображає логи в реальному часі через SSE:
- Зелений текст на чорному фоні (як термінал)
- Автоматичне прокручування до останнього запису
- Історія останніх 120 записів
Відредагуйте константи на початку файлу main.py:
I2C_ID = 0 # ID шини I2C
SCL_PIN = 22 # GPIO для SCL
SDA_PIN = 21 # GPIO для SDA
I2C_FREQ = 100000 # Частота I2C (100 kHz)INA_ADDR = 0x40 # I2C адреса INA219
SHUNT_OHMS = 0.1 # Опір shunt резистора в ОмTHRESH_CHARGE_mA = -15 # Поріг заряду (мінус = струм йде в батарею)
THRESH_DISCHARGE_mA = 15 # Поріг розряду (плюс = струм йде з батареї)AP_SSID = "INA-SETUP" # Назва точки доступу
AP_PASS = "12345678" # Пароль (мінімум 8 символів)
AP_CH = 6 # Канал Wi-FiSAMPLE_SEC = 1 # Інтервал вимірювань (секунди)
WIN_SIZE = 6 # Розмір ковзного вікна для усереднення
RING_MAX = 120 # Кількість записів в буфері для веб-інтерфейсуФайл ina_log.csv зберігається на ESP32 та містить:
time,ms,uptime_s,bus_V,raw_mA,itotal_mA,avg_mA,state,mAh
12:34:56,1234567,123.4,12.345,123.4,23.4,22.1,IDLE,0.123
12:34:57,1235567,124.4,12.340,125.8,25.8,23.5,MAINS_LOST_DISCHARGE,0.130Опис колонок:
time- час запису (HH:MM:SS)ms- мілісекунди з моменту запускуuptime_s- час роботи в секундахbus_V- напруга на шині (Вольти)raw_mA- сирий виміряний струм (міліампери)itotal_mA- струм відносно baseline (міліампери)avg_mA- середній струм за ковзним вікном (міліампери)state- стан системиmAh- накопичені міліампер-години при розряді
Система автоматично визначає три основні стани:
- Мережа 240V присутня
- Батарея заряджається
- Струм негативний (йде в батарею)
- Роутер живиться від мережі
- Мережа 240V відсутня (відключили світло!)
- Батарея розряджається
- Струм позитивний (йде з батареї)
- Роутер живиться від батареї
- Підраховуються витрачені mAh
- Стабільний стан
- Немає значних змін струму
- Система в режимі очікування
Система надає REST API для інтеграції:
Головна сторінка веб-інтерфейсу (HTML)
SSE (Server-Sent Events) stream для live оновлень логів
Отримати поточний статус системи
Відповідь:
{
"sta_connected": true,
"sta_ip": "192.168.1.100",
"ap_on": false,
"state": "IDLE",
"mAh": 123.456,
"baseline_mA": 50.2,
"invert": false
}Сканування доступних Wi-Fi мереж
Відповідь:
{
"ok": true,
"networks": [
{
"ssid": "MyHomeWiFi",
"rssi": -45,
"ch": 6,
"auth": 3
}
]
}Підключення до Wi-Fi мережі
Запит:
{
"ssid": "MyHomeWiFi",
"pwd": "mypassword123"
}Відповідь:
{
"ok": true,
"ip": "192.168.1.100"
}Перезавантаження ESP32
Видалення збережених налаштувань Wi-Fi та увімкнення AP режиму
Завантаження CSV файлу з логами
Підключіться до ESP32 через Serial порт (швидкість 115200):
Windows:
# Використовуйте PuTTY або
python -m serial.tools.miniterm COM3 115200Linux/Mac:
screen /dev/ttyUSB0 115200
# або
minicom -D /dev/ttyUSB0 -b 115200Рішення:
- Перевірте правильність пароля (
12345678за замовчуванням) - Переконайтеся, що ви підключаєтесь до мережі
INA-SETUP - Перезавантажте ESP32
- Перевірте, чи не заблоковано AP режим файрволом
Рішення:
- Перевірте фізичне підключення INA219 (SCL, SDA, VCC, GND)
- Переконайтеся, що
SHUNT_OHMSвідповідає вашому резистору - Виконайте повторне калібрування (перезавантажте ESP32)
- Перевірте I2C адресу (за замовчуванням 0x40)
Рішення:
- Перевірте правильність SSID та пароля
- Переконайтеся, що мережа працює на частоті 2.4GHz (ESP32 не підтримує 5GHz)
- Перевірте силу сигналу (RSSI має бути вище -80 dBm)
- Спробуйте перезавантажити роутер
Рішення:
- Перевірте наявність вільного місця на ESP32
- Переконайтеся, що файлова система змонтована
- Спробуйте видалити старий файл через REPL
Рішення:
- Перевірте IP адресу (192.168.4.1 для AP або отриману від DHCP)
- Спробуйте інший браузер
- Очистіть кеш браузера
- Перевірте, чи запущений веб-сервер (дивіться Serial логи)
Якщо ваш роутер споживає 500mA, а батарея має ємність 10000mAh:
Час роботи = 10000mAh / 500mA = 20 годин
Система покаже реальне споживання та залишок ємності в mAh.
Аналізуйте CSV файл для визначення:
- Частоти відключень
- Тривалості відключень
- Споживання в різний час доби
- Ефективності батареї
Використовуйте API endpoints для інтеграції з системами розумного дому.
Рекомендації:
- ✅ Змініть пароль AP (
AP_PASS) на більш складний - ✅ Використовуйте сильний пароль для домашньої Wi-Fi
- ✅ Регулярно оновлюйте firmware MicroPython
- ✅ Не відкривайте порт 80 в інтернет без VPN
- ✅ Використовуйте захищену мережу для доступу
MIT License - використовуйте вільно для особистих та комерційних проектів.
Вітаються pull requests та пропозиції!
Для великих змін:
- Відкрийте issue для обговорення
- Створіть fork репозиторію
- Внесіть зміни
- Створіть pull request
Дякую всім, хто підтримує проект та надає зворотний зв'язок!
- 📺 YouTube: Перше відео проекту
- 💬 Залишайте коментарі та питання у відео
Проект: Інтернет без світла ⚡
Версія: 1.0.0
Платформа: ESP32 + MicroPython
Датчик: INA219
Призначення: Smart DC UPS для Wi-Fi роутера
Створено з ❤️ для безперебійного інтернету