🏭 IoT PowerHub: Повний цикл розробки промислової IoT системи

Case Study: Як я створив професійну IoT платформу – від проектування плати до production-ready backend та web-інтерфейсу


Що створено:

  • ✅ Власна електронна плата (схема + PCB дизайн)
  • ✅ Firmware з dual-core обробкою та пріоритетною чергою команд
  • ✅ Backend з MQTT брокером та real-time обробкою
  • ✅ Next.js admin-панель з моніторингом
  • ✅ Production-ready Docker інфраструктура
  • ✅ Node-RED для візуальної автоматизації

Tech Stack: Raspberry Pi PicoC++MQTTNode.js/ExpressPostgreSQLNext.js/ReactDocker

Результат: Повнофункціональна IoT платформа для керування промисловими об’єктами через GSM/GPRS з реальним часовим моніторингом

🎯 Проблема і рішення

Контекст

Промислові об’єкти (теплиці, насосні станції, склади) мають специфічні потреби:

  • 🔌 Керування потужним обладнанням без прямого доступу
  • 📊 Моніторинг датчиків 24/7 з аналітикою
  • 🚨 Система алертів при критичних ситуаціях
  • 📱 Доступ через інтернет навіть при відсутності WiFi
  • 💾 Історія даних для аналізу тенденцій
  • 🤖 Автоматизація процесів без програмування

Чому не готові рішення?

Рішення Проблема
Промислові PLC $$$$ дорого, складно налаштовувати
Arduino + WiFi Нестійкий зв’язок, не працює далеко від маршрутизатора
Online сервіси (IoT.io) Залежність від хмари, витрати на трафік
Готові GSM системи Не гнучкі, дорогі абонентські послуги

Моє рішення

IoT PowerHubDIY промислова IoT система з повним контролем, розумною ціною та гнучкістю.


🔧 Hardware: Від ідеї до плати

Проектування

Я спроектував плату в EasyEDA з наступними вимогами.

📸 PCB Макет

Ось як виглядає плата перед друком:

Вид зверху (компоненти):

  • Велика розетка для Pi Pico посередині
  • SIM800L модуль справа
  • 4 реле по краях
  • 74HC595 shift register ліворуч
  • Конденсатори та резистори для стабілізації
  • Клеммники для підключення датчиків/обладнання

Вид знизу (розводка):

  • Доріжки для живлення (товстіші)
  • Сигнальні доріжки для даних (тонші)
  • Через-отвори (vias) для зв’язки шарів
  • Контакти для припайки компонентів

Компоненти

Архітектура плати

I2C Bus (GPIO 4-5):

  • BMP180 (адреса 0x77)
  • AT24C256 (адреса 0x50)

UART (GPIO 0-1):

  • SIM800L (9600 baud, пряма комунікація)

SPI-like (GPIO 19-21):

  • 74HC595 (Data, Clock, Latch) для керування LED

Digital GPIO (GPIO 22-29):

  • 4x Relay управління
  • PIR датчик

Power Rails:

  • 5V: Реле + SIM800L (до 2A burst)
  • 3.3V: Pico + EEPROM + датчики (стабілізовано)

Чому саме ці компоненти?

Pi Pico vs альтернативи:

Вибір Pico:

  • ✅ Дешевше ($4 vs $8)
  • ✅ Достатньо ОЗУ для MQTT + черги команд
  • ✅ Стабільніший GSM на окремому ядрі
  • ✅ PIO state machines для UART без блокування

SIM800L vs SIM7600:

  • ✅ GPRS достатньо (LTE overhead не потрібен)
  • ✅ Нижче споживання (300mA vs 2A)
  • ✅ Простіший AT command set
  • ✅ $5 vs $20

💻 Firmware: Embedded-розробка

Архітектура прошивки

Вся система побудована на дво-ядерній архітектурі:

Ключові компоненти

1️⃣ Пріоритетна черга команд

Логіка розподілу:

  • CRITICAL (реле): Виконуються НЕГАЙНО, обходять чергу
  • HIGH (датчики): Виконуються перед LOW
  • NORMAL (статус): Звичайна обробка
  • LOW (GSM інформація): Можуть чекати

Приклад:

2️⃣ Власна реалізація MQTT без бібліотек

Чому БЕЗ бібліотеки?

  • ✅ Контроль пам’яті (264KB – кожен байт в рахунку)
  • ✅ PubSubClient займає 8KB SRAM (3% всієї ОЗУ!)
  • ✅ Глибше розуміння протоколу
  • ✅ Менше залежностей = менше багів

3️⃣ Шифрування з динамічною сіллю

Чому XOR + сіль?

  • ✅ Швидкий на MCU без AES-модуля
  • ✅ Динамічна сіль робить кожне повідомлення унікальним
  • ✅ Запобігає атакам на розповсюджені паттерни
  • ✅ 256 комбінацій зробити перебір важко

4️⃣ Persistence: EEPROM для збереження стану

Результат:

  • При вимкненні: зберігаємо стан реле
  • При включенні: відновлюємо попередній стан
  • Вісім років історія перезавантажень (за счет uint32_t)

🖥️ Backend: Server-side архітектура

Стек

Архітектура обробки даних

Heartbeat Моніторинг

Кожні 30 секунд пристрій відправляє heartbeat:

Backend логіка:

  • Якщо heartbeat не прийде протягом 90 сек (3 пропущені) → пристрій offline
  • Зберігаємо в БД для статистики uptime
  • Фіксуємо аномалії (температура скочила до 30°C)
  • Запускаємо автоматизацію (Node-RED)

Пріоритетне виконання команд

Real-time оновлення через WebSocket


📱 Frontend: Admin Panel

Структура

Ключові сторінки

📊 Dashboard

🔌 Керування пристроями

📈 Real-time моніторинг

🗄️ Управління БД

Tab-based інтерфейс:

  • Огляд: Розмір БД, кількість записів
  • Таблиці: Редагування даних
  • Здоров’я: Індекси, вакуум
  • Обслуговування: Оптимізація
  • Бекапи: Резервні копії

🐳 DevOps: Production deployment

Docker Compose

Запуск


🤖 Автоматизація: Node-RED

Приклади сценаріїв

🌡️ Автокліматизація теплиці

💧 Моніторинг рівня води

📧 EMAIL сповіщення


🎓 Досвід: Що здобув

Технічні навички Embedded Systems (C++)

  • ✅ Архітектура двоядерної системи (RP2040)
  • ✅ UART комунікація з GSM модулем
  • ✅ I2C Bus для датчиків та пам’яті
  • ✅ SPI для керування LED (74HC595)
  • ✅ Роботе з перериваннями та таймерами
  • ✅ Оптимізація пам’яті (264KB)

IoT Протоколи

  • ✅ Власна реалізація MQTT без бібліотек
  • ✅ GSM AT Commands (SIM800L)
  • ✅ QoS та надійність доставки
  • ✅ Шифрування на маломовного контролері

Backend Architecture

  • ✅ Власний MQTT Broker (Aedes)
  • ✅ Real-time WebSocket комунікація (Socket.IO)
  • ✅ Пріоритетні черги завдань
  • ✅ PostgreSQL оптимізація
  • ✅ Обробка великих об’ємів даних

Full-Stack розробка

  • ✅ Від “залізяки” до cloud
  • ✅ DevOps та Docker
  • ✅ Monorepo архітектура з Prisma
  • ✅ Type-safe розробка (TypeScript)

Архітектурні рішення

Рішення Причина
Власний MQTT Контроль, оптимізація під Pico
Пріоритетна черга Гарантія виконання критичних команд
Dual-core Паралельна обробка GSM + логіки
EEPROM persistence Збереження стану при вимкненні
XOR + сіль Баланс безпеки та швидкості
Monorepo Синхронізація типів скрізь

📊 Результати

Числа

Метрика Значення
Час розробки 6 місяців
Кількість ліній коду ~15,000 (C++, JS, TS)
Затримка команди < 500мс в мережі 2G
Аптайм 99.8% (при наявності живлення)
Вартість заліза ~$40 за один пристрій
Частота heartbeat 30 сек (оптимальний баланс)

Що покриває рішення

  • ✅ Моніторинг температури/тиску 24/7
  • ✅ Керування 4 електричними пристроями
  • ✅ Датчик руху (PIR)
  • ✅ SMS алерти через SIM800L
  • ✅ Візуальні індикатори (8 LED)
  • ✅ Графіки та аналітика за період
  • ✅ Автоматизовані сценарії без коду
  • ✅ Історія дій для аудиту

🚀 Висновок

Цей проект демонструє повний цикл розробки IoT системи – від концепції та схемотехніки до production-ready платформи.

Це не простий проект для новачків, але це може реалізувати розробник який має досвід у embedded та backend розробці.

Якщо у вас є запитання про IoT архітектуру, MQTT, GSM модеми або Pi Pico — із задоволенням відповім у коментарях!

І якщо ви роботодавець, який шукає розробника, здатного писати код від залізяки до cloud — радо розгляну пропозицію! 👉

Дякую за увагу! Цей проект навчив мене більше, ніж усі курси разом.

Якщо стаття була корисною — поділіться з колегами у коментарях чи в соцмережах. Маєте запитання або свій досвід — пишіть! 💬

#IoT #RaspberryPi #Embedded #FullStack #MQTT #ProductDesign #DevOps

Опубліковано в Iot

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *