Шалость удалась (часть 3)
Когда приехало железо
К моменту, когда приехала ESP32, программная часть проекта уже заметно продвинулась.
Был Go backend, API регистрации устройств и heartbeat, база данных и simulator. Сервер уже умел разговаривать с устройством, которого физически ещё не существовало.
Оставалось, казалось бы, самое простое: заменить simulator настоящей ESP32. Первоначальный план предполагал Ethernet. Я заказал ESP32 и отдельный LAN - модуль, припаял необходимые контакты и начал собирать всё вместе. И здесь план впервые встретился с реальным железом.
Ethernet, который не случился Ethernet казался логичным выбором. Устройство должно постоянно находиться рядом с роутером, мобильность ему не нужна, а проводное соединение выглядит максимально предсказуемо: подключил кабель — и работаешь. По крайней мере, на бумаге.
На практике подружить ESP32 с LAN-модулем не получилось. После множества попыток всё больше подозрений падало уже не на прошивку, а на сам модуль. Вернуть его было поздно.
Можно было заказать новый, ждать доставку и продолжать бороться за первоначальную архитектуру. А можно было посмотреть на ESP32 и вспомнить одну очевидную вещь: в ней уже есть Wi-Fi.
Да, Ethernet для такого устройства мне всё ещё казался более красивым решением. Но задача проекта была не в создании идеального Ethernet-монитора. Мне нужно было понять, есть ли в офисе интернет. И Wi-Fi для этого подходил прекрасно.
Так Ethernet отправился в список «когда-нибудь потом», а первая настоящая версия устройства стала беспроводной. Питание тоже оказалось простым: обычный блок и USB Type-C.
Simulator уходит, ESP32 приходит
И здесь пригодилось одно из ранних архитектурных решений. Backend вообще не знал, как устройство подключено к сети. Вчера его клиентом был simulator. Сегодня — настоящая ESP32.
Устройство регистрировалось, получало необходимые данные и начинало периодически отправлять heartbeat. ESP32 подключалась к офисному Wi-Fi, выходила в интернет и обращалась к backend на VPS.
А сервер видел главное: - устройство вышло на связь.
Значит, ESP32 включена, офисная сеть работает, роутер имеет доступ в интернет, а запрос смог добраться до моего сервера.
Для исходной задачи этого было достаточно. Иногда сломанный компонент — это полезно. Можно было ещё несколько дней разбираться с Ethernet, проверять SPI, менять конфигурацию и заказывать новый модуль. Но это почти не приближало бы меня к решению задачи.
В pet-проектах особенно легко начать совершенствовать решение проблемы, которая уже перестала быть проблемой. Никто не ограничивает сроки — и можно бесконечно доводить первоначальную архитектуру до идеала просто потому, что когда-то именно так её придумал.
В моём случае достаточно было оставить Ethernet в покое и использовать то, что уже было на плате.
Шалость должна была когда-нибудь начать удаваться…