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

Надо также купить синий переходник для 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 |
command-line interface |
|
WiFi |
wireless fidelity |
|
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 строчек |
Автор: aabzel
