Как стать автором
Поиск
Написать публикацию
Обновить

Пуск Беспроводной CLI на Микроконтроллере

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.1K

Иной раз возникает такая ситуация, что надо получить информационный доступ к устройству, которое висит под потолком или примонтированно за окном. Конструктив не позволяет протянуть провод через дверь или за окно. Очевидно, что в таких случаях надо наладить какой-то беспроводной интерфейс. Варианты могут быть такие: 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 — руководство для начинающих

https://habr.com/ru/sandbox/221160/

Nmap. Начало использования @netherneon

https://habr.com/ru/articles/88064/

Шпаргалочка по применению Nmap

https://www.securitylab.ru/blog/personal/Bitshield/354239.php

Дружимся с ESP @Rightech_IoT

https://habr.com/ru/articles/547330/

Синтаксический разбор CSV строчек

https://habr.com/ru/articles/765066/

Вопросы

  1. Зачем нужен IP адрес, если есть MAC?

  2. Зачем нужен номер port, если есть PID процесса?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы работали с ESP-01 трансивером?
61.54% да8
38.46% нет5
Проголосовали 13 пользователей. Воздержался 1 пользователь.
Теги:
Хабы:
+3
Комментарии16

Публикации

Ближайшие события