Создаём IoT устройство способное к глобальному масштабированию
Пролог
Я увлекаюсь IoT уже более 7 лет, собрал множество устройств и программ для них: от gps логера для велосипеда и счётчика Гейгера с передачей данных, до делительных головок и муфельной печи с wifi управлением. Достаточно стандартный набор diy интузиаста.
В основном это устройства на платформах esp8266, esp32 и arduino. У всех этих подделок разный срок работы и судьба. Некоторые проработали 15 минут и сгорели, другие продержались до сегодняшнего дня, третие окислились на пол пути или вовсе утонули. Все эти устрйства были далеки от парадигм программирования, версионирования и масштабирования - они жёстко кодировали свои настройки. Нельзя себе представить ситуацию, в которой другой человек может использовать эти проекты себе во благо.
Посдовательность моего пути в IoT выглядела примерно так:
- Arduino IDE
- VS Code в сочетании с Platformio
- Git для контроля версий
- Замена языка на Micropython
В начале пути каждый раз приступая к новому устройству меня ждало несколько дней или недель в обнимку с поисковиком, доскональному изучению тематических форумов и анализа видео. Мне нужно было только одно, интеграция переферии в мой код. И хотя поиск github сильно облегчал эту задачу, обычно на специфичные датчики или драйвера моторов, очень повезёт если найдётся хотябы 1 упоминание. В альтернативном случае придётся самому создавать программу для интеграции устройства, разбирая даташит.
Попытки совместить в голове программную часть и физическую иногда приводили к полному сгоранию послденей. Зачастую эти причины были связаны с отсутствием схем подключения или разными напряжениями. Очень редко можно найти хороший репозиторий, который спасёт тебя от описанных участей, а найти репозиторий в котором есть схема подключений, нужно хорошо постараться.
Также стоит отметить, что почти все репозитории для IoT используются другими пользователями, только с целью раздербанить их на составляющие и использовать эти маленькие кусочки в своём коде. Это связано с тем что, все настройки захардкожены намертво в коде и размазаны равномерным слоем. Если кратко - про env переменные или их аналоги в IoT репозиториях вспоминают не часто.
Давайте наконецто сконструируем образ репозитория, к которому мы будем стремиться в данной статье:
- Документирован общий рабочий алгоритм устройства
- Документированы физические компаненты и схема подключения
- Документированы переменные окружения
- В репозитории есть теги, отражающие стабильносить версии
Первый пункт - перед погружением в код, хочется примерно представлять его алгоритм работы, хотябы в общих чертах, это позволит читателям быстрее разобраться. Второй пункт - всем кто захочет повторить ваше устройство, будет очень приятно увидеть схему для его повторения, это сэкономит кому-то гору времени. Третий и четвёртый пункты - позволяют реиспользовать вашу программу без внесения изменений в код, а это огромное пространство для масштабирования числа пользователей вашего кода. По сути на аналогичном принципе построена контейнеризация Docker.