- PVSM.RU - https://www.pvsm.ru -

Покрути это колесо

Зачем эта статья

В первую очередь статья (или статьи) написана ради комментариев, чтобы развлечь себя и читателя, но с надеждой получить какие‑то дельные советы и мнения по теме проекта.

Как это началось

Точкой старта работы над проектом можно считать день, когда Дедушка Мороз положил мне под ёлку набор «Робот‑автомобиль для Raspberry Pi 4B» от Keyestudio.

Keyestudio KS0223 Робот-автомобиль для Raspberry Pi 4B

Keyestudio KS0223 Робот‑автомобиль для Raspberry Pi 4B

Уже не помню, почему у меня за условные два часа не получилось с первого раза запустить эту машинку по дому. Пролистывая документацию [1] я не понял идею создателей работать с камерой через VNC. Этап обучения компьютерному зрению выбивается из идеи управления машинкой. Может изображение с камеры и передается на телефон, но информацию в инструкции я не нашел. Также не понимаю, почему органы управления имеют такой вид во многих подобных проектах.

Распознавание объекта с помощью OpenCV

Распознавание объекта с помощью OpenCV
Управление передвижением робота в приложении

Управление передвижением робота в приложении

Информации о том, какая плата нужна для работы с набором на коробке не видно. На момент подарка у меня были только Raspberry Pi 1B и Raspberry Zero. Но Дедушка Мороз позаботился и об этом, узнав, что для работы с OpenCV нужен минимум Raspberry Pi 4B (4Gb). Без этого одноплатника собирать машинку не имеет смысла. Но держим в голове, что авторы проекта ориентируются на наличие малинки с 64-х битной разрядностью.

По итогу, субъективное отношение к набору подтолкнуло меня попробовать сделать что‑то своё с оглядкой на:

  1. Удобное расположение органов управления;

  2. Наличие видеопотока в приложении;

  3. Вариативность компонентов сборки с поддержкой простых плат;

  4. Дешевизна конечного устройства.

С чего начал

Идея была простая: взять минимальный набор компонентов, чтобы покрутить колесо и иметь небольшой запас pin'ов на дополнительные датчики. Если представления о том, какое устройство будет основным не было, то за место устройства, отвечающего за связь, боролись ESP8266 и NRF24L01 [2]. Устройство NRF24L01 было в списке только по той причине, что на просторах интернета для управления чего‑либо чаще все используют какой‑то огромный пульт. Поскольку у этого способа связи есть ограничения, критичные для моей идеи, в итоге список компонентов у меня остался таким:

  1. Raspberry Pico [3]

  2. ESP8266 [4]

  3. GOHJMY ESP-01 adapter board [5]

Первая сборка из имеющихся компонентов

Первая сборка из имеющихся компонентов

На момент первой пробы уже выпустили Pico W, но у меня его не было, а бежать за ним я не спешил по причине, о которой скажу чуть позже. Задача у Raspberry Pico была простая: крутить колеса, а за связь с пользователем теперь отвечало ESP8266 с Wi‑Fi на борту. Протокол общения пользователя с машинкой был выбран UDP (по понятным причинам), а между устройствами — UART, о котором я вычитал в тот же вечер.

Схема общения пользователя с Raspberry Pico

Схема общения пользователя с Raspberry Pico

Соединить проводами два устройства проблем не составило, но была другая проблема в проекте на этом этапе. В комьюнити Arduino проекты пишутся на C, Python или Arduino C (в названии могу ошибаться), а у меня навыки только с языком PHP. И проект встал 🙂.

На чём писать и как работать

У PHP нет аналога MicroPython, по крайней мере я не нашел, да и погружаться в Python мне не хотелось. Для ESP8266 я нашел выход из ситуации. Под данную плату есть прошивка от Espressif, которая позволяет работать с устройством через AT‑команды [6], что не привязывает к языку. В ней оказалось всё необходимое [7] на тот момент: включение и выключение Wi‑Fi, работа с UDP и запуск HTTP сервера. Но для Pico ничего подобного я не нашёл.

Встречал обзоры, в которых на замену Arduino IDE используют CLion, но к C душа не лежала. Для нового места работы мне нужно было познакомиться с Go. У Go есть прекрасный проект TinyGo [8], имеющий поддержку Raspberry Pico. По этой причине я не спешил обзаводиться платой Pico W или ESP32 DevKit v1, так как на тот момент поддержки Wi‑Fi/Bluetooth в TinyGo не было.

Таким образом, определившись с инструментами, я начал думать над тем, как работать с UART и что нужно для отправки AT‑команд в ESP8266. Пришлось прикупить USB‑TTL для написания первого кода.

Первое подключение TTL к Pico

Первое подключение TTL к Pico

Спустя неделю вечеров, установив GoLand, настроив плагин для работы с TinyGo и ознакомившись с синтаксисом языка, я добрался до работы с Serial. Получить понятный текст удалось не сразу, так как знаний про baud rate и понимания, что именно он виноват в этом, не было. И первые 10–15 минут я сражался с этой проблемой. Спустя некоторое время, удалось включить/выключить Wi‑Fi и принять собственную команду по UDP, отправляя её через программу UDP — Sender/Reciever [9].

Итог (промежуточный)

Покрути это колесо - 7

Только закончив работу над получением команд на Pico через UDP, я понял, что проект в такой компоновке устройств закончился. Перспектива такой машинки — ездить только по комнатам, а у меня — следовать за ней по пятам, словно с пультом управления на проводе. Поэтому на следующем этапе я начал сначала, но уже с другими компонентами и расскажу об этом дальше.

Автор: eleimt

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/456890

Ссылки в тексте:

[1] документацию: https://docs.keyestudio.com/projects/KS0223/en/latest/Description.html

[2] NRF24L01: https://aliexpress.ru/item/1005003483237957.html

[3] Raspberry Pico: https://www.raspberrypi.com/products/raspberry-pi-pico/

[4] ESP8266: https://www.espressif.com/en/products/socs/esp8266

[5] GOHJMY ESP-01 adapter board: https://aliexpress.ru/item/1005005721759794.html

[6] AT‑команды: https://ru.wikipedia.org/wiki/AT-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B

[7] В ней оказалось всё необходимое: https://docs.espressif.com/projects/esp-at/en/release-v2.2.0.0_esp8266/AT_Command_Set/index.html

[8] TinyGo: https://tinygo.org/

[9] UDP — Sender/Reciever: https://apps.microsoft.com/detail/9nblggh52bt0

[10] Источник: https://habr.com/ru/articles/1072022/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1072022