Платы Heltec WiFi LoRa 32 V3 и V4 на базе ESP32-S3 — одни из самых популярных устройств в экосистеме Meshtastic. Они оснащены OLED-дисплеем, Wi-Fi, Bluetooth и LoRa-модулем, что делает их идеальными для экспериментов. Однако официальная прошивка Meshtastic почти не оптимизирована под энергопотребление.
В результате даже в режиме простоя такие устройства потребляют до 120 мА ⚠️, что делает их непригодными для длительной автономной работы — особенно по сравнению с платформой nRF52840 (~16–20 мА).
Энтузиаст m1nl создал специализированный форк прошивки Meshtastic с глубокой оптимизацией энергопотребления для ESP32-S3. Основные преимущества:
Прошивка доступна как для Heltec V3, так и для новой модели — Heltec V4.
Вам понадобится:
Откройте официальный веб-инструмент:
веб-флешер Meshtastic
После этого потребление упадёт до 25–30 мА 💚, а работа в сети останется стабильной.
Прошивка m1nl решает все три задачи за счёт снижения помех и энергопотребления.
Прошивка m1nl — оптимальный выбор для владельцев
Heltec V3 и V4, которым нужна максимальная автономность без потери функциональности Meshtastic.
При использовании Heltec V3/V4 важно понимать:
процентный индикатор заряда в Meshtastic часто неточен ⚠️.
Напряжение 3.8 В может отображаться как 37%,
хотя реально соответствует 70–80% заряда.
Измерения проводились на устройстве Heltec V4 с установленной прошивкой Meshtastic, настроенной на минимальный ток покоя. Фиксировались три параметра: Устройство работало в штатном режиме Meshtastic без активного экрана и без внешнего питания. Использовался Li-Ion аккумулятор форм-фактора 103565 со следующими характеристиками: Так как измерения велись в разные часы суток с переходами через 24:00, данные были приведены к непрерывной шкале времени. Начальной точкой принято значение 12:00 при 100% заряда. Полный разряд аккумулятора от 4.22 В до 3.09 В занял: Итоговое время автономной работы составило около 52 часов. Средний ток потребления рассчитывался по формуле: I = C / t Где: Расчёт: 3000 mAh / 52 h ≈ 57.7 mA Ниже приведён пример рабочей программы для автоматической фиксации уровня заряда и напряжения аккумулятора Meshtastic с периодом 1 час. Скрипт предназначен для запуска по расписанию (cron / Планировщик заданий) с интервалом 1 час и формирует CSV-файл, пригодный для последующего анализа и построения графиков.⚡ Энергооптимизированная прошивка m1nl для Heltec V3 и V4: как снизить ток покоя до 30 мА
Оглавление
🔋 Проблема энергопотребления в официальной прошивке Meshtastic
💡 Решение: прошивка m1nl — энергоэффективный форк для ESP32
🛠 Инструкция: как прошить Heltec V3/V4 прошивкой m1nl через веб-флешер
1️⃣ Шаг 1. Перейдите на веб-флешер
2️⃣ Шаг 2. Выберите устройство и прошивку
heltec v3 (M1NL) — для V3;heltec v4 (M1NL, PL) — для V4.v2.7.16.d55da25c6.daily).
-ru.
3️⃣ Шаг 3. Выберите режим прошивки
4️⃣ Шаг 4. Запустите прошивку
5️⃣ Шаг 5. Включите энергосбережение
🎯 Что это даст пользователям Meshtastic?
⚠️ Важные предупреждения
.daily — ночные версии из ветки master;
🔍 Как правильно оценивать уровень заряда батареи в Meshtastic-устройствах
❓ Почему проценты обманчивы?
🛠 Что делать на практике?
Расход батареи Heltec V4 с Meshtastic после прошивки с минимальным током покоя 🔋
Методика измерений 🧪
Исходные данные 📊
Прошло часов Заряд, % Напряжение, В 0 100 4.22 12 66 3.91 16 50 3.86 20 36 3.79 28 31 3.75 36 26 3.68 44 15 3.56 50 8 3.42 52 0 3.09 Нормализация временной шкалы ⏱
Фактическое время автономной работы ⌛
Расчёт среднего тока потребления ⚡
Пример программы почасового логирования (Python) 🐍
import sys
from datetime import datetime
from pathlib import Path
# ===== НАСТРОЙКИ =====
PORT = "COM5" # порт Meshtastic
CSV_FILE = Path("battery_log.csv")
# ===== ПОДКЛЮЧЕНИЕ =====
try:
from meshtastic.serial_interface import SerialInterface
except ImportError:
print("❌ meshtastic не установлен")
print("👉 pip install meshtastic")
sys.exit(1)
iface = None
try:
print("🔌 Подключение к Meshtastic…")
iface = SerialInterface(devPath=PORT)
my_node = iface.getMyNodeInfo()
metrics = my_node.get("deviceMetrics", {})
battery_percent = metrics.get("batteryLevel")
voltage = metrics.get("voltage")
if battery_percent is None or voltage is None:
print("⚠️ Нет данных о батарее")
sys.exit(1)
# время без секунд
now_str = datetime.now().strftime("%Y-%m-%d %H:%M")
line = f"{now_str};{battery_percent};{voltage:.2f}
"
# если файл новый — добавим заголовок
if not CSV_FILE.exists():
CSV_FILE.write_text("datetime;battery_percent;voltage
", encoding="utf-8")
with open(CSV_FILE, "a", encoding="utf-8") as f:
f.write(line)
print("✅ Записано:")
print(line.strip())
except Exception as e:
print(f"❌ Ошибка: {e}")
finally:
if iface:
iface.close()
print("🔌 Порт закрыт")
Выводы ✅
✅ Вывод