Ну а для дома я тут откопал валявшийся в шкафу esp32 и решил сделать поливалку для цветочка.
Не то, чтобы мне было сложно плеснуть в этот цветочек кружку воды, пока я утром жарю яичницу, но раз уж я весь такой из себя Разработчик Надёжных Встраиваемых Систем, то надо автоматизировать.
В качестве аппаратной базы я взял Plantwatery, благо Алибаба от меня тут буквально через пролив, ну а программу, естественно, решил написать сам.
В общем-то, esp-rs проделали великолепную работу, могу только рекомендовать. А Embassy я пробовал и до этого, но снова убедился, что это, пожалуй, одно из самых правильных направлений в embedded-разработке, и не зря их все поддерживают.
Пока гуглил, как всё это запускать, наткнулся на несколько очень грустных диалогов в духе:
— Главное — не забывай, что все платы работают на волшебном дыме, если дым выйдет из платы, она не будет работать.
— О нет! Я поставил резистор на 50 Ом вместо 50 кОм, и дым покинул процессор!
— Соболезную. Купи ещё один.
Короче, если вы не умеете рассчитывать делитель напряжения на резисторах, то перед походом в embedded-разработку стоит почитать, как это в принципе работает, и как там ом умножается на ампер.
Когда же базовая версия запустилась, я начал пытаться привести её в сколько-то удобоваримое состояние, и вот тут Rust с одной стороны предотвращает просто какое-то невероятно огромное количество теоретических ошибок, которые я бы сделал на C, но с другой стороны, в Embedded C это было бы просто незаметно, потому что, ну, скажите на милость,ну вот куда от меня сбежит адрес, по которому я пишу управляющие команды в запаянный WiFi-чип? Но формально да, я пишу их в битый указатель.
В итоге это разделение на модули заставляет писать довольно всратые типы, руками проставлять lifetime'ы, зато в результате после любого рефакторинга всё просто работает, это прямо очень дорогого стоит.
Короче, заставил работать самую базовую версию, теперь аккуратно напиливаю её на модули, надеюсь, что сделаю аналог Plantwatery, только без всего шлака со специальными IDE, ini-файлами, и прочего. Если кому-то прямо очень интересно, репозиторий держу на гитхабе, думаю, что за пару недель доведу до рабочего состояния.
Ну, поскольку моя esp32 была двухъядерная с экранчиком, то будет красивый вывод статуса (со второго ядра), параллельная обработка всего, и тотальный async — раз уж полез в Rust, нет ни малейшего повода останавливаться.
QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.