Самодельный мобильник
Сегодня будем делать свой мобильник из подручных материалов, купленных на разных маркетплейсах, но в содружестве с искусственным интеллектом. Сразу оговоримся, что речь не идет об очередном убийце iPhone или про ультрабюджетный доступ к сети. Простую звонилку дешевле и проще купить ближайшем салоне мобильной связи.
Хотя я умею писать код сам, хоть и не так что бы очень хорошо, но здесь решил использовать ИИ. Прежде всего, для экономии времени и чтобы не разбираться в протоколах общения с радиомодулем – информация, которая скорее всего никогда больше не понадобится.
Радиомодуль проще купить готовый. Я выбрал такой:
Сам радиомодуль SIM800C – это зеленая плата под экранирующим кожухом. На картинке реализация HW-537. Радиомодуль уже припаян к плате с переходными контактами и согласующими элементами.
В целом, здесь есть все, что нужно для подключения к сети и для «говорения». Но здесь нет ничего для управления этим модулем.
Модуль управляется AT-командами через порт UART. Через него же он отвечает на запросы схемы управления. Контакты RXD/TXD видно в верхнем ряду. Сим-карта вставляется с другой стороны модуля, на картинке не видно.
Логично, что в проект нужно добавить какой-то микроконтролер. Я сразу решил на этот раз использовать что-нибудь из семейства STM32 и выбрал STM32L051C8T6.
Критерии выбора тут не очень хитрые. Функциональность минимальная, но достаточная. Пониженное энергопотребление. Низкая стоимость.
А еще телефону нужен какой-то экранчик для понятных целей. Тут я не стал ничего особенного придумывать. Взял привычный OLED SSD1306 с разрешением 128х32:
Дальше питание. Для целей первого этапа я решил использовать просто USB-разъем, в который подать 5 вольт и запитать радиомодуль и стабилизатор 1117 для получения 3.3 вольт для STM32.
Когда все детали были на столе, я попросил DeepSeek написать минимальный код для этого всего. Код вставил в STM32CubeIDE.
Все перечисленное и дискретную мелочь для питания соединил на макетной плате. Схема включилась, но радиомодуль не стартовал нормально. Стабильно уходил в ребут.
Все ИИ убеждали меня, что проблема скорее всего в питании. SIM800C (и аналогичные) имеют пиковые потребления тока до 2 Ампер в моменты общения с базовой станцией. Я надеялся, что конденсаторы по питанию справятся с этим, но они не справились. Пришлось срочно добавлять в схему литиевый аккумулятор, который может обеспечивать такие импульсы тока.
Аккумулятор 75 мАч взял от игрушки из Фикспрайса – летающий шарик типа вертолетика. Зарядил его прямо в шарике и уже заряженный припаял к своей схеме. Просто для тестирования.
Теперь все нормально завелось. На этом этапе мой телефон был таким:
При включении на экране последовательно появляются сообщения:
Здесь уже припаян динамик и устройство может принимать входящие звонки:
В динамике при этом играет одна из встроенных мелодий (их там 19). Но играет не особенно громко.
Клавиатуру сделал из тактовых кнопок, и теперь телефон в смысле конструкции деталей приобрел законченный вид:
В таком виде это полностью рабочее устройство. Можно принимать звонки и делать исходящие. Я только потом добавил еще два конденсатора по питанию в сумме на 2000 мкФ.
DeepSeek предложил недостающий код, чтобы все работало. Но код чтения клавиатуры я написал сам. DeepSeek только подключил его к основному циклу программы.
Когда все уже работало, я отдал код ChatGPT и попросил сделать его рефакторинг. Скорее из любопытства, чем по необходимости.
ChatGPT разделил все по небольшим функциям, в целом получилось очень читаемо.
Потом я еще попросил сделать красивый уровень сигнала, а дальше я захотел еще и время на экране. ChatGPT сделал и это.
На этом решил пока остановиться.
Функционал довольно примитивный. Только ответить на звонок или набрать номер. Никакой памяти звонков или чего еще из элементарных удобств. Но все эти бантики – это просто развитие кода в STM32. Этим можно заниматься очень долго по настроению. Поэтому я решил закончить с «материальным миром». Сделать корпус и поставить нормальный аккумулятор.
В этих зарядных модулях есть крошечный SMD резистор, который надо менять в соответствии с оптимальным зарядным током аккумулятора. Но я не занимался расчетом, просто спросил у Gemini, тот посоветовал 18 кОм для 320 мАч. Зарядный ток получился примерно 180 мА.
Корпус нарисовал в OpenSCAD с помощью Gemini.
Ну как приличный. Он больше похож на терминал от домофона, но функцию выполняет:
В конструкции имеются все соединения, чтобы реализовать спящий режим и продлить время автономной работы. Но поддержки этого режима в коде нет.
Без этого телефон работает с полной зарядкой примерно шесть часов. После чего радиомодуль отключается, а микроконтроллер с экраном продолжают работать еще в разы дольше. На экране пишет, что нет связи с радиомодулем.
Gemini сделал оценку, что внедрение дежурного режима продлит работу устройства до примерно девяти суток, если без звонков. А если поставить полноценный аккумулятор на 2000 мАч, то телефон должен продержаться на связи около двух месяцев (без разговоров). Неплохое получилось устройство для любителей походов в лес на долго.
СМСки.
Хотя выше я писал, что решил сильно не прокачивать функциональность, но поразмыслив, решил, что СМС будут не лишними.
Как ни странно, но прием СМС оказался не самым простым делом. Я подумал, что отправлять СМСки с такой убогой клавиатуры не нужно - будет крайне трудоемко для набора текста, но принять можно вполне.
Далее были как обычно вопросы к ИИ, но ни один не смог предложить рабочий код. Пришлось разбираться и писать код самому.
СМСки появились. Когда это все работало, я опять пошел к ИИ попросил добавить поддержку кириллицы. Если кто-то не знает, то нелатинские символы кодируются двумя байтами, поэтому СМСки на русском получаются в два раза короче.
Здесь ChatGPT совместно с DeepSeek написали необходимы функции и шрифты. СМСки стало можно читать на русском.
Ну и окончательный вариант:
Звук при разговоре довольно приличный. Чисто и громко.
Немного больше подробностей здесь.










В сериале Обратная сторона Луны был почти такой же, в параллельной реальности, где построили коммунизм.
ПыСы: у ТС покруче - экранчик и кнопки есть!