Иной раз возникает такая ситуация, что надо получить информационный доступ к устройству, которое висит под потолком или примонтированно за окном. Конструктив не позволяет протянуть провод через дверь или за окно. Очевидно, что в таких случаях надо наладить какой-то беспроводной интерфейс. Варианты могут быть такие: IR, LoRa, GFSK, BLE, UWB, WiFi.
В этом тексте я расскажу, как можно запустить беспроводную консоль на микроконтроллере.
Постановка задачи
Соединить микроконтроллер и ESP-01 трансивер. Запустить TCP сервер. Подключиться через PuTTY. Организовать беспроводную консоль.
Определения
алгоритм — последовательность действий.
программа — алгоритм реализованный на языке программирования
процесс — работающая программа в памяти
порт – это числовой идентификатор (16 бит), используемый в протоколе TCP/UDP для связи между процессами на разных компьютерах в сети. Порт позволяет приложениям идентифицировать друг друга и обмениваться данными, обеспечивая надежную и упорядоченную передачу информации.
IP‑адрес — 32-битное число идентифицирующее компьютер в сети.
сокет (socket) — программный интерфейс для обмена данными между процессами. Процессы могут выполняться как на одном компьютере, так и на разных устройствах, связанных сетью. Со стороны программиста сокет это пара чисел: IP адрес и порт.
Что надо из оборудования?
Наименование |
Назначение |
NUCLEO-F401RE |
Плата с микроконтроллером и программатором |
ESP-01 |
WiFi трансивер |
Переходник для ESP-01 |
Чтобы использовать только 4 провода для соединения MCU и ESP-01 |
Кабель USB-mini |
чтобы соединить LapTop и PCB |
LapTop или смартфон |
Для открытия TCP клиента |
Надо собрать вот такую схему

Надо также купить синий переходник для ESP-01 трансивера

Что надо из софтвера?
Название программы |
Назначение |
PuTTY |
GUI TCP клиент для PC |
TeraTerm |
GUI serial port клиент для PC |
NetCat (nc) |
консольный TCP клиент для PC |
telnet |
консольный TCP клиент |
nmap |
консольный сканер сети |
ping |
утилита проверки Link-a |
arp |
утилита для сопоставления IP адресов MAC адресам |
Реализация
Чтобы запустить TCP сервер на ESP-01 надо выполнять вот эту последовательность команд.
Order |
AT-Команда |
Пояснение |
Ответ |
0 |
AT+RST |
перезагрузка модуля |
лог загрузки |
1 |
AT |
проверка UART соединения- запустился ли модуль. |
OK |
2 |
ATE0 |
Отключить UART эхо |
OK |
3 |
AT+CWMODE=1 |
Переключиться на режим станции. Модуль сможет подключаться к точке доступа. |
OK |
4 |
AT+CIPMUX=1 |
Разрешить множественное соединение |
OK |
5 |
AT+CWJAP="ssid","pass" |
Подключится к маршрутизатору |
WIFI GOT IP |
6 |
AT+CIPSTA? |
Запрашивает информацию о IP-адресе станции ESP8266 (модуль работает как станция). |
OK |
7 |
AT+CIPSERVER=1 |
Запустить сервер, по умолчанию используется порт 333. |
OK |
8 |
AT+CIPSEND=id,length |
Устанавливает длину отправляемых данных в байтах. Применяется для нормальной отправки, режим множественных соединений. |
OK |
Вот типичные ответы на AT-команды
-----------------------------------------------
AT+RST
OK
ets Jan 8 2013,rst cause:1, boot mode:(3,5)
load 0x40100000, len 2592, room 16
tail 0
chksum 0xf3
load 0x3ffe8000, len 764, room 8
tail 4
chksum 0x92
load 0x3ffe82fc, len 676, room 4
tail 0
chksum 0x22
csum 0x22
2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : DOUT
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000
---------------------------
AT
OK
---------------------------
ATE0
OK
---------------------------
AT+CWMODE=1
OK
---------------------------
AT+CIPMUX=1
OK
---------------------------
AT+CWJAP="ssid","pass"
WIFI DISCONNECT
WIFI CONNECTED
WIFI GOT IP
OK
---------------------------
AT+CIPSTA?
+CIPSTA:ip:"192.168.1.33"
+CIPSTA:gateway:"192.168.1.1"
+CIPSTA:netmask:"255.255.255.0"
OK
---------------------------
AT+CIPSERVER=1
OK
---------------------------
В случае установки соединения ESP-01 отправит на MCU в UART строку 0,CONNECT
Если PuTTY отправит строку hello_from_lapTop, то ESP-01 отправит в UART вот такие две строки:
+IPD,0,17:hello_from_lapTop
+IPD,0,2:
Тут 0- номер соединения, 17- количество байт в принятой строке, hello_from_lapTop — сами принятые полезные данные.
При приеме данных от сокета их надо передать на парсер CLI. CLI все выходные результаты пишет в очередь байтов. Далее отдельный конечный автомат отправки извлекает из очереди байты на отправку и передает их в WiFi трансивер по протоколу AT-команд ESP-01.
Установка соединения
Чтобы начать передавать данные по WiFi надо выполнить следующие действия:
порядок |
Действие |
1 |
Подключиться к ESP-01 трансиверу по UART |
2 |
Переключить ESP-01 в режим станции |
3 |
Разрешить множество подключений к серверу на ESP-01 |
4 |
Подключиться к маршрутизатору |
5 |
Получить IP адрес |
6 |
Открыть TCP сокет |
Установкой соединения занимается отдельный конечный автомат управления link-ом. Вот его граф

Отправка данных MCU->ESP-01
Чтобы микроконтроллер отправил на PuTTY строку надо выполнить две отдельные команды: передать заголовок (с указанием размера) и передать сами данные. Выглядит это так:
AT+CIPSEND=0,10
OK
>
Recv 10 bytes
SEND OK
Тут AT+CIPSEND=0,10 это заголовок. После его отправки надо дождаться сначала OK затем дождаться появления курсора. Затем посылать сырой массив с данными. Как только ESP-01 примет указанное в заголовке количество байт появится сообщение Recv N bytes. После успешной отправки модуль ответит SEND OK.
Отправка данных в сущности представляет из себя диалог между микроконтроллером и WiFi трансивером. На стороне микроконтроллерной прошивки надо реализовать вот такой конечный автомат.

Этот автомат должен крутиться только в состоянии CONNECTED.
Проверка связи
И вот вы подали на отладочную плату электропитание и она как будто бы запустила TCP сервер. Как же понять на каком он IP адресе оказалась ESP-01? Тут можно открыть cmd консоль и выполнить команду arp -a. Это протокол, который ставит IP адресам их MAC адреса. Методом исключения можно выявить IP ESP-01.

Затем можно убедиться, что конкретный IP в самом деле отвечает выполнив команду
ping 192.168.1.35 -c 3 -i 2

Теперь надо понять на каком порте работает сервер внутри 192.168.1.35. Это можно выполнить утилитой nmap
nmap -sS -p 1-65535 192.168.1.35

Зная IP и порт (333) можно на стороне LapTop запустить TCP клиент. Это можно сделать в программе PuTTY. Поверх TCP будет просто текст команд для консоли и выводной текст консоли.

Так можно подключаться к CLI серверу, что работает внутри прошивки STM32 через IP адрес ESP-01 модуля.

Когда работает PuTTY терминал, TCP данные отправляются только при нажатии на кнопку Enter. То есть внутри PuTTY уже присутствует однострочный текстовый редактор (string reader). Вот так в открывшейся TCP CLI можно проверить версию прошивки на удалённом микроконтроллере.

Можно посмотреть диагностику GPIO.

На стороне MCU есть ещё отдельная UART-CLI и она показывает, как ESP-01 отражает события открытия и закрытия сокета.

Достоинства CLI через ESP-01
++ Это дешево. Вам надо только модуль ESP-01 за $1 USD. Вся остальная инфраструктура уже есть. Это маршрутизатор, смартфон, LapTop. Вам не нужен никакой другой переходник с USB на какой-н там GFSK или LoRa или еще что-н.
++ Благодаря WiFi консоли вы можете управлять микроконтроллером деже с мобильного телефона благодаря Andriod приложению TCP Client.

Вертикальный экран.

Итог
Удалось настроить доступ к микроконтроллерной CLI через WiFi. Удалось организовать беспроводную CLI между LapTop и микроконтроллером.
Как видите, для CLI на MCU даже не обязательно нужен интерфейс UART. CLI можно пустить даже по протоколу TCP.
Акронимы
Акроним |
Расшифровка акронима |
CLI |
command-line interface |
MCU |
Microcontroller |
WiFi |
wireless fidelity |
UART |
Universal asynchronous receiver-transmitter |
TCP |
Transmission Control Protocol |
Ссылки
Текст |
URL |
ESP8266: справочник по командам AT |
https://microsin.net/adminstuff/hardware/esp8266-at-commands-reference.html |
Nmap — руководство для начинающих |
|
Nmap. Начало использования @netherneon |
|
Шпаргалочка по применению Nmap |
https://www.securitylab.ru/blog/personal/Bitshield/354239.php |
Дружимся с ESP @Rightech_IoT |
|
Синтаксический разбор CSV строчек |
Вопросы
Зачем нужен IP адрес, если есть MAC?
Зачем нужен номер port, если есть PID процесса?
Комментарии (16)
psynix
22.07.2025 19:55автор, вам бы матчасть подтянуть.
aabzel Автор
22.07.2025 19:55А Вам, Анатолий @psymix, написать хотя бы одну публикацию...
psynix
22.07.2025 19:55ну во-первых я пишу, в журналы. ВАКовские. не при помощи нейросети и ли что то поверхностное, пятый год пишу статью на хабр потому что не готов вываливать шлак. паттерн сперва добейся, он прекрасен, но судя по вашему профилю вы такой же "0-публикаций" тк простите выкладываете откровенный шлак. Я даже не очень понимаю зачем тут вообще и к чему STM32. Ну и к заключению "порт - натуральное 16битное число, идентифицирующее процесс в операционной системе" - после этого еще раз отправляю хотя бы изучить терминологический аппарат.
aabzel Автор
22.07.2025 19:55Я нейросетками не пользуюсь. Очень надо платить за подписку 3k в мес.
А то как пишутся ВАКовские тексты прекрасно знаю.
"В таких НИИ программистов и схемотехников периодически ещё заставляют писать подробные псевдо-научные работы по каким-то якобы квази-ноу-хау в софте или железе, что есть в изделии. В общем аля-патент. Я таких написал штуки 3-5. Это весьма утомительно из-за обилия формул, уравнений, схем, графиков и таблиц. Обычно писать такие тексты приходится по выходным, по вечерам и в гос. праздники и по ночам, так как есть и основные задачи в будни. По сути ты описываешь, то, что сам сделал за полгода на 7-10 страницах.
Потом эту монографию берут и публикуют в каком-н российском журнале при региональном Политехе. Самое подлое в этой истории то, что там на первом месте оказывается фамилии начальника НИИ, начальника отдела и начальника лаборатории. А твоя фамилия, как фактического автора, в списке авторов либо в самом конце, либо и вообще выброшена! Да... При этом поезд в списке указанных авторов к тексту, естественно, никакого отношения, как и к самой работе, не имели. Они текст даже не читали! У самого первого автора даже компьютера на столе нет! Все Ваши изобретения у Вас отнимут! Это эдакий намёк тебе: "Знай своё место, собака!", "Не высовывайся, рудокоп магаданский!".
"psynix
22.07.2025 19:55хах, я такое помню. кое где уже даже победили, вроде бы. с scopus и web of science такие дже дела? В прочем это все пыль. По сути на тех ресурсе написано нечто, где указано формально неверное определение термина порт (оно не подходит даже если этот порт речной) и при этом с упортсвом ставим минусы и не хотим поправить?
igorek_tm
22.07.2025 19:55ESP-01 сделана на базе ESP8266, 80 МГц (вариант -160 МГц) 32-разрядное ядро xtensa l106 и WiFi/BT на борту. Борда на ESP8266 стоит ок. 200 р, на ESP32 (это уже 2 ядра, 240 Мгц и WiFi) - ок 300 р. Для AT-командного модема ESP использовали году эдак в 17..18. Другими словами, что мне непонятно: зачем использовать полноразмерный SoC в качестве консоли к STM32F401 (84 МГц)? Если на то пошло, то во FreeRTOS (портирована для всех ESP) есть готовый пример "console" - обработчик командной строки "в духе linux". И это все по факту дешевле раза в 3-4 чем поделия ST Microelectronics.
Чем так медом мазан STM32xxx, вот я чего не понимаю ((
aabzel Автор
22.07.2025 19:55Смысл текста не в том, чтобы использовать esp-01 в новых разработках.
Смысл в том, чтобы в готовые изделия и прототипы добавить временную поддержку беспроводной CLI на основе esp-01.igorek_tm
22.07.2025 19:55В таком случае непонятно, зачем мучиться с кабаллистическими АТ-командами, эдак и дух Зикселя 19200 ненароком можно вызвать )) Прошиваете ESP RTOS-ом, в пару-тройку строчек C делаете pipeline между UART и TCP (или вообще UDP), из одного хендла read() и write() в другой...
netwizard
22.07.2025 19:55Простите за нескромный вопрос, но что мешало использовать готовый esp-link? OTA (stk500v1), консоль, syslog, rest/mqtt. OpenSource, GPL. github.com/jeelabs/esp-link
Nemirov
номер порта в сокете и PID никак не связаны, или это не так?
aabzel Автор
Прошивка еsp-01 позволяет запустить сервер на любом порте.
Можно заключить, что порт характеризует отдельный функционал.
Nemirov
Для начала esp как-бэ прошить надо))
Лучше скажите честно, какой нейронкой вы пользовались чтоб нагородить текст поста?
aabzel Автор
Эти модули esp-01 продаются уже прошитые.
aabzel Автор
Есть процессы ,которые не работают с сетью. Им порт не нужен. А pid нужен для диспетчера задач.