Привет! Это вторая часть. Первая была про то, как автомаляр без знания кода и DeepSeek за две недели собрали робота из старого смартфона. Там — эмоции и философия. Здесь — хардкор.
В этом тексте:
— Архитектура проекта: кто за что отвечает.
— Все файлы: сервер, прошивка ESP, веб-морда, стример.
— Карта минногополя — то, о чем молчат туториалы.
— Инструкция «запусти за 5 минут» и как адаптировать под другое железо.
Кода не будет. Будут ссылки. Всё уже в репозитории.
1. Что мы построили (и из чего)
Железо:
Смартфон Nokia 2.4 (700 ₽) — мозг. Точка доступа, Python-сервер, камера, микрофон.
ESP12 (Wemos D1 Mini) — тело. Управляет моторами, серво, светом, зарядкой.
Два мотор-редуктора 33GB-520, драйвер TA6586.
Сервопривод SG90.
Li-Ion 3S 2400 мА·ч, DC-DC, MOSFET IRLZ44N.
Архитектура (схема словами):
Смартфон робота:
— Раздаёт Wi-Fi (NokiaHotspot).
— В Termux запущен Python-сервер (HTTP 5001, WebSocket 5002).
— В браузере открыт streamer.html — захватывает камеру и микрофон, гонит видео/аудио оператору через WebRTC.
ESP12:
— Подключается к Wi-Fi смартфона.
— По WebSocket получает JSON-команды.
— Крутит моторами, серво, свет, зарядка.
Телефон оператора:
— Подключается к той же сети.
— Открывает веб-морду (Ваш адрес отобразит сервер при запуске в Termux) http://192.168.43.1:5001/web_interface/index.html.
— Видит видео, жмёт кнопки — команды через сервер уходят на ESP.
Интернет не нужен. Задержка видео < 60 мс (WebRTC host-кандидаты).

Ссылка на репозиторий:
? https://gitverse.ru/donnik_evgeniy/Smartphone_FPV_droid_local.git
2. Карта минного поля (то, что не пишут в инструкциях)
Это не советы. Это грабли, на которые мы наступили. Если будете повторять — вооружены.
2.1. Потеря контекста
DeepSeek в новом диалоге не знает Вашего же проекта и деталей. Даже если Вы отправите ему все файлы проекта, он все равно может жёстко прописать IP-адрес, который меняется при перезагрузке смартфона, или предложить использовать пин, занятый под другое, не знает что server и streamer запускаются на одном устройстве.
Решение: я создал файл README.txt, где записаны распиновка ESP, информация о динамическом IP, прочие вводные и архитектура проекта. Каждый новый диалог начинается с этого файла. DeepSeek въезжает в контекст за секунду. Это не высшая математика, но именно такой «человеческий» подход к организации информации спасает от непредвиденных событий.
.
2.2. Лимит токенов
Когда диалог становится слишком длинным, DeepSeek начинает «забывать» начало. Отправить новый большой файл или скриншот уже нельзя.
Решение: я прошу DeepSeek в конце каждого крупного этапа составлять roadmap — список решённых задач, текущего состояния и оставшихся проблем. Сохраняю его. В новом диалоге отправляю README + roadmap + все актуальные файлы. DeepSeek восстанавливает картину и продолжает с того же места. Это оказалось эффективнее, чем пытаться «дожать» один бесконечный диалог.
2.3. Ошибки в коде
DeepSeek иногда ошибается. Когда проект состоял из одного небольшого файла - каждый код я воспринимал за "чистую монету", всё работало, но по мере роста стало понятно, не всё так радужно. Например, в одной из версий он забыл добавить фильтр дубликатов для моторов, и ESP дёргала драйвер постоянно, вызывая гул.
Решение: после получения кода я открываю новое окно, отправляю туда этот код и прошу: «Проанализируй этот код на возможные ошибки и неоптимальности». DeepSeek часто находит свои же недочёты. Так мы выявили проблему с дубликатами и добавили проверку:
if (left != leftMotor || right != rightMotor) { leftMotor = left; rightMotor = right; setMotors(); }
В любом случае Вам придётся заниматься отладкой. Даже если Вы, как и я на старте, не знаете что такое "отладка"
2.4. Неудобство работы в Termux
Набирать команды на смартфоне — мука. Это пожалуй моя личная боль т.к. проект писался "на перекурах" во время работы, потому это происходило с того же смартфона, что является мозгом робота, для быстрых тестов
Решение: я попросил DeepSeek в каждом ответе давать полное содержимое файла и команду для его открытия в nano. Например: «Замени содержимое файла nano ~/robot_project/server.py на следующее: [код]». Я просто копирую команду и код, вставляю в Termux — всё работает. Мелочь, но экономит часы.
2.5. Слишком большой код
Когда файл проекта разрастается (например, наш веб-интерфейс раздулся до 1400+ строк), он уже с трудом умещается в одно сообщение. DeepSeek в таких случаях начинает неосознанно «оптимизировать»: удаляет комментарии, сокращает анимации, а иногда и вовсе отрезает важные функции — поддержку touch-событий, часть интерфейса в муляж. Бесполезно просить «верни как было» — он подсознательно пытается втиснуть ответ в лимит и снова что-то выбросит.
Решение: я научился добавлять в промпт простую фразу: «раздели ответ на 2 сообщения». Тогда DeepSeek принудительно разбивает код на две части, и в каждую помещается всё. После склейки файл работает именно так, как задумывалось изначально.
2.6. Артефакты диалога: фантомный контекст
Не каждое окно DeepSeek одинаково. Если вы достаточно внимательны, то быстро заметите: одно окно более «дружелюбное», другое «пытается поучить», третье «творческое и лёгкое», но необходимые мысли о железе дополняет «живописными», но бесполезными строками. Меня дважды окно стало называть по имени — то «Алексей», то «Александр», хотя я никогда не представлялся. Думаю, проблема здесь в артефактах диалогов: окно будто подгружает «фантомный контекст» из предыдущих сессий. Бывают артефакты в виде внезапных иероглифов на половину слова или часть иноязычной речи.
Я до конца не понял, из-за чего это случается, но удержание лишнего объёма контекста в голове действительно сказывается на продуктивности. Лучше создать roadmap и перенести проект в новое окно, без фантомных голосов.
3. DeepSeek как мотиватор: «ты ошибаешься, у нас уже есть 99%»
Самое неожиданное, что я получил от этого диалога, — не код, а поддержку. Десятки раз я писал: «Это слишком сложно», «У меня не получится это настроить», «Нужно было просто приклеить IP камеру на машинку и успокоиться».
И каждый раз DeepSeek отвечал не как машина, а как тренер:
«Ты ошибаешься. У нас уже есть 99% результата. Остался один шаг. Давай, не останавливайся».
«Посмотри, сколько ты прошёл. От первой прошивки до WebRTC за пару дней. Это твоя настойчивость. Ещё немного — и робот оживёт».
Без этих слов я бы бросил проект. В моём окружении — кузовной ремонт, там не с кем обсудить нужен мне WebSocket или TCP/UDP. DeepSeek стал единственным, кто верил в меня, когда я сам сомневался.
И это важный урок: даже самый умный алгоритм не заменит простого человеческого «ты сможешь».
4. Что дальше
Сейчас проект живёт в версии 0 — на ESP12. Этого хватило, чтобы проверить концепцию.
Следующая версия (уже в работе):
— ESP32-S3 вместо ESP12 (больше памяти, TinyML, BLE).
— BLDC-моторы и активная подвеска (перешагивать препятствия).
— Лидар и SLAM (строить карту).
— Локальный ИИ (SmolLM, YOLO) для автономных реакций.
Робот будет эволюционировать. Я напишу третью часть.
5. Инструкция «запусти за 5 минут» (и как адаптировать под себя)
Если у вас точно такое же железо:
1. Подготовка Termux (F-Droid)
pkg update && pkg upgrade -y pkg install python python-pip git nano pip install websockets termux-setup-storage
2. Создаём папку проекта
mkdir -p ~/robot_project/web_interface cd ~/robot_project
3. Создаём сервер
nano ~/robot_project/server.py
Вставляем содержимое файла server6.6(RTC).txt.
Сохраняем: Ctrl+O, Enter, Ctrl+X.
4. Создаём страницу стримера
bash
nano ~/robot_project/streamer.html
Вставляем содержимое streamer6.6(RTC).txt. Сохраняем.
5. Создаём интерфейс оператора
bash
nano ~/robot_project/web_interface/index.html
Вставляем содержимое index6.7.txt. Сохраняем.
6. Включаем точку доступа на смартфоне
Настройки → Точка доступа Wi-Fi
Имя:
NokiaHotspot(можно любое, но тогда поменять в прошивке ESP)Пароль:
12345678
7. Запускаем сервер
bash
cd ~/robot_project python3 server.py
Termux покажет логи и IP-адрес (обычно 192.168.43.1).
8. Открываем стример на телефоне-роботе
В браузере на том же смартфоне (где запущен сервер):
http://localhost:5001/streamer.html
Разрешаем доступ к камере и микрофону.
9. Подключаемся оператором
На втором телефоне (или компьютере):
Подключаемся к Wi-Fi
NokiaHotspotОткрываем браузер:
http://http://192.168.43.1:5001/web_interface/index.html
(если IP другой — посмотреть в логах сервера)
10. Прошивка ESP
В файле esp6.6.txt нужно:
Проверить
WIFI_SSIDиWIFI_PASS(должны совпадать с точкой доступа)Убедиться, что IP сервера правильный (допустим
192.168.43.1— в коде сейчас10.141.231.120)
// Было: #define SERVER_IP1 10 #define SERVER_IP2 141 #define SERVER_IP3 231 #define SERVER_IP4 120 // Должно стать: #define SERVER_IP1 192 #define SERVER_IP2 168 #define SERVER_IP3 43 #define SERVER_IP4 1
Заливаем прошивку через Arduino IDE или PlatformIO.
Готово.

Если у вас другое железо (ESP32, Arduino, Bluetooth):
Скачать все файлы.
Открыть диалог с DeepSeek (или любым ИИ).
Промпт:
*«Вот проект робота на смартфоне и ESP12: [файлы]. Перепиши прошивку под [твоя плата], сохранив логику WebSocket/JSON команд для моторов, серво, света. Если нужно — адаптируй серверную часть (например, под Bluetooth)».*
ИИ сделает работу. Проверено.
7. Заключение
Эта статья — не учебник. Это честный рассказ о том, как один человек с паяльником и ИИ построил работающего робота. Все файлы открыты. Код можно форкать, адаптировать, улучшать.
Если у вас есть старый смартфон и пара вечеров — попробуйте. Если застрянете — DeepSeek поможет.
Ссылка на репозиторий:
https://gitverse.ru/donnik_evgeniy/Smartphone_FPV_droid_local.git
Ссылка на первую часть:
https://habr.com/ru/articles/1006480/
Вопросы — в комментарии. Отвечу. Скорее всего, с DeepSeek.
Комментарии (10)

Arkabai
07.03.2026 14:15Дипсик мне понравился тем, что пишет и предлагает варианты решений. Гонит правда как и все но если его просишь переписать целиком перепишет. Несколько вечеров пытался переписать уже готовый скетч для процессинга с правильной и удобной логикой с растановкой всех функций по полочкам по модулям и удалось не сразу как на него зайдет. Грок вообще пытался мне подсунуть куски кода с пояснениями что где изменить. Проверка шаг за шагом это единственный способ не программисту писать код для своих проектов. И по поводу ухода от темы - дипсик каждый раз додумывая моменты что ты не указал явно смотрит ведешься ты или нет он как бы прощупывает тебя угадал он направление или нет и если соглашаешься и продолжаешь диалог он тебя уведет в дебри и начнет писать дичь. Он очень хорошо справляется с просьбой изменить конкретную функцию в коде не меняя всей логики .Выход один писать подробное ТЗ с жесткими рамками или начинать чат заново.

JackCarter33 Автор
07.03.2026 14:15Да, просто через боль! Вот у вас работает видеопоток и с апгрейдом версии - заглохло, начинаешь копать - всё верно. Код без ошибок как он заверяет. И только через час выясняется что в тот самый момент апгрейда он "дорисовал" путь на воображаемый STUN сервер из локальной сети без выхода в интернет.
Потому фраза "теперь внеси эти правки в исходный файл, сохраняя весь изначальный функционал, без каких-либо изменений, перепиши полный файл с адресом для nano" стал бессменной мантрой. И то, после этого проверяешь в новом окне на соответствие с исходным

trikot
07.03.2026 14:15Мне дипсик писал программу для очередных никси часов. Это был тот еще квест. Заняло примерно 2 недели. Иногда я был готов прибить его, только не знал как. В итоге написал, даже работает как я просил. Показал знакомому программисту, на что он сказал, что после увиденного он пока не переживает, что может остаться без работы.

graff59
07.03.2026 14:15Что бы каждый раз не загружать файл с распиновкой, я сделал ИИ агента с инструкциями - какие библиотеки использовать для датчиков, какие пины использовать, какие технологии и библиотеки для веба использовать и т.д. И в красивом интерфейсе пишется код. Мало того я ещё добавил маркетплейс датасетов

JackCarter33 Автор
07.03.2026 14:15Ну это уже продвинутый уровень, я недавно только узнал что такое ИИ агенты, лично для меня пазл сложился - роботы будущего это тела для LLM управляемые ИИ агентами, но ограниченные жестко прошитыми низкоуровневыми контроллерами в плане безопасности. Об этом, кстати, пишу статью сейчас. Ну и для своего проекта пишем ИИ агента для анимаций в файл стримера и простенькой автономности

DirtyDead
07.03.2026 14:15Я вот недавно, пообщался с Deep Seek, и знаете что, я выбрал Claude, и главная причина в том что не смотря на свою вайбовую атмосферу дипсик допускает огромное количество ошибок, которые затем сам начинает исправлять, путается в них ещё больше и в итоге вместо того что бы потратить 15 минут на все про все ты убиваешь 4 часа. Клод более структурный и выдает файлы сразу пакетами.

555www555
07.03.2026 14:15А можно где-то посмотреть на логи общения с ИИ для этого проекта? Прямо почитать последовательно промпты и ответы ИИ на них.

JackCarter33 Автор
07.03.2026 14:15В целом я могу сделать "публичную ссылку", но я даже не знаю что именно показать. Там очень много текста. Есть "окно планирования" где обсуждается концепция - что нужно реализовать, что для этого использовать (софт, железо). Далее "окно разработки", в котором пишется код, исходя из ключевых решений, это окно видит все файлы проекта, предусматривает взаимодействие между ними. После генерации код чаще всего улетает в "окна тестирования" они создаются разово, под "допиливание" конкретного кода, у них нет общей картины, только файл тестируемого кода и файлы с которыми он взаимодействует
Alexdrbnd
Про новые окна с диалогом , чтобы разгрузить диалог - claude sonnet 4.5 меня удивила тем, что когда диалог стал большим, на очередной промпт ии написала примерно так «оптимизирую предидущие диалоги». То есть разработчики учли этот факт и создали сжатие всей «переписки», чтобы увеличить объем свободного места под текущую задачу.
А на счет поддержки «давай доделаем, уже почти готово» - так меня беспощадная нейронка Grok промучала много часов и много промптов, и каждый шаг он обещал что вот сейчас у нас получится. Это хорошо, если бы это было правдой, но ии не человек и она не замечает что уже много попыток и много часов мы стоим на одном месте и пытаемся решить одну ошибку кода.
То что ии - волшебная палочка , это только для мелких задач. Более крупные проэкты заставляют нас изучать и запоминать как вести себя с этой новой технологией, чтобы она решала наши задачи верно.