ПРОГРАММИРУЕМ МИКРОКОНТРОЛЛЕР ESP32 ПО Wi-Fi
ESP32 + MicroPython + Iguana IDE
Микроконтроллеры ESP32 от Espressif Systems являются одними из наиболее распространенных решений для беспроводной связи и позиционируются для применений в области интернета вещей (IoT), мобильных устройств и носимой электроники. Эти популярные модули позволяют легко подключаться к сети Wi-Fi и выполнять соединения TCP/IP. С MicroPython на борту ESP32 вообще меняет правила игры для подключаемых устройств и представляет один из лучших вариантов для быстрого развертывания IoT-проектов.Попробуем подсоединиться к плате ESP32 DevKit по Wi-Fi. Сделать это можно двумя способами:
- создать независимую точку доступа, которой будет ваша плата, и подключиться к ней;
- подключить плату к существующей сети Wi-Fi и подсоединиться к ней через сеть.
Создаем точку доступа
Полный код программы для создания точки доступа может выглядеть следующим образом:import network
import webrepl
webrepl.start(password='12345')
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid='myAP', channel=11)
while not ap.active():
pass
print('Network interface is active')
print(ap.ifconfig())
Рассмотрим подробнее его работу.
Модуль network
Для настройки сети нам понадобится модуль network. Подключаем этот модуль к нашей программе с помощью строчки:import network
Из этого модуля мы используем класс WLAN, который обеспечивает управление встроенными WiFi-интерфейсами. С помощью конструктора network.WLAN(interface_id) создаем объект сетевого интерфейса WLAN. В качестве interface_id могут быть использованы константы AP_IF и STA_IF.
- network.AP_IF — устройство настраивается в качестве точки доступа, которой будет ваша плата, и позволяет подключаться к себе другим WiFi-клиентам. Данный режим позволяет создавать беспроводное соединение между несколькими устройствами без помощи внешней сети маршрутизатора;
- network.STA_IF – устройство настраивается на режим станции (клиента) и может подключаться к другим точкам WiFi-доступа.
ap = network.WLAN(network.AP_IF)
С помощью функции active() активируем наш сетевой интерфейс (функция работает с параметрами True и False, если параметр не задан, то она возвращает текущее состояние интерфейса):
ap.active(True)
С помощью функции config() задаем параметры сетевого интерфейса. Это будут название для нашей беспроводной сети (оно может быть любым, но английскими буквами и без пробелов) и канал:
ap.config(essid='myAP', channel=11)
Номер канала может быть другим, желательно, чтобы он не совпадал с номерами каналов доступных поблизости сетей Wi-Fi. Просканировать сети Wi-Fi можно, например, запустив скрипт сканера.
Показать код сканера сетей Wi-Fi
Создадим новую вкладку в Iguana IDE. Дадим ей новое имя (переименовать вкладку можно с помощью двойного клика по названию вкладки), например, "wifi_scanner.py". Напишем следующий код:
О том, как подключиться к микроконтроллеру по USB и запустить код, можно прочитать подробнее в статье "Первый проект на микроконтроллере ESP32".
print("Scanning for WiFi networks, please wait...")
print()
import network
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
mod = ['Open', 'WEP', 'WPA-PSK' 'WPA2-PSK4', 'WPA/WPA2-PSK']
for (ssid, bssid, channel, RSSI, authmode, hidden) in sta_if.scan():
print("* {:s}".format(ssid))
try:
print(" - Auth: {} {}".format(mod[authmode], '(hidden)' if hidden else ''))
except:
print(" - Auth: Error")
print(" - Channel: {}".format(channel))
print(" - RSSI: {}".format(RSSI))
print(" - BSSID: {:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}".format(*bssid))
print()
Подключимся к микроконтроллеру и запустим код кнопкой О том, как подключиться к микроконтроллеру по USB и запустить код, можно прочитать подробнее в статье "Первый проект на микроконтроллере ESP32".
while not ap.active():
pass
Когда цикл закончится, можно напечатать уведомление об успешном завершении создания точки доступа:
print('The Access Point interface is active')
Прочитаем и напечатаем параметры сетевого интерфейса с помощью функции ifconfig():
print(ap.ifconfig())
На этом создание кода точки доступа почти закончено. Осталось запустить демона WebREPL.
Модуль webrepl
В модуле webrepl сидит демон, который прослушивает все активные интерфейсы (AP или STA). Это позволяет вам подключаться к ESP32 через маршрутизатор (интерфейс STA) или напрямую при подключении к его точке доступа (интерфейс AP) и получить полное управление всеми доступными функциями MicroPython на микроконтроллере.Подключаем модуль webrepl сразу после строчки "import network":
import webrepl
В следующей строке запускаем WebREPL с паролем "12345" (пароль можно придумать другой, можно даже использовать в качестве пароля пустую строку):
webrepl.start(password='12345')
Подключаемся к созданной точке доступа Wi-Fi
Запустим Iguana IDE, скопируем в окно редактора полный код программы, приведенный в начале статьи. Дадим вкладке редактора новое имя (переименовать вкладку можно с помощью двойного клика по названию вкладки), например, "ap.py".Подключимся к микроконтроллеру и запустим код кнопкой "DOWNLOAD & RUN".
О том, как подключиться к микроконтроллеру по USB и запустить код, можно прочитать подробнее в статье "Первый проект на микроконтроллере ESP32".
Если всё сделано правильно, в терминале появится следующее сообщение:
Started webrepl in manual override mode
Network interface is active
('192.168.4.1', '255.255.255.0', '192.168.4.1', '0.0.0.0')
Network interface is active
('192.168.4.1', '255.255.255.0', '192.168.4.1', '0.0.0.0')
Теперь нам необходимо подключиться к точке доступа "myAP", которую мы создали. Откроем список доступных Wi-Fi сетей, кликнув по значку в правом нижнем углу экрана. В списке должна появиться наша точка доступа "myAP". Кликнем на нее и нажмем кнопку "Подключиться".

Немного подождем до появления сообщения о том, что ваш компьютер подключился к "myAP".

Теперь в Iguana IDE переведем переключатель режимов "Serial — Wi-Fi" в нижнее положение "Wi-Fi" и напишем в соседнем окне ввода адрес для подключения:
ws://192.168.4.1:8266/

Нажмем на кнопку "Open", находящуюся справа от окошка ввода адреса. В терминале появится сообщение:
Welcome to MicroPython WebREPL!
Password:
Password:
Введем наш пароль "12345" (пароль при вводе отображаться не будет) и нажмем "Enter".
Появится сообщение о подключении и приглашение от WebREPL:
WebREPL connected
>>>
>>>
Теперь микроконтроллер подключен к Iguana IDE по Wi-Fi и его можно программировать также, как если бы он был подключен по USB. Кабель USB, подключенный по-прежнему к ESP32, используется теперь только для питания.
Для того, чтобы режим точки доступа запускался автоматически, можно поместить загрузку нашего скрипта в файл "main.py". (Если этот файл вы уже создали в предыдущем эксперименте и в нем осталась строчка "import newscript", удалите ее.)
Для автозагрузки скрипта создайте на микроконтроллере файл "main.py" (или откройте, если он уже существует). Чтобы создать файл, сделайте новую вкладку командой "New" в меню "File" или нажмите на "+" в области вкладок редактора кода. Двойным кликом на имени вкладки переведите вкладку в режим редактирования ее названия, дайте ей новое имя "main.py" и нажмите "Enter".
В окне редактора напишем следующий код:
import ap
Загрузим код в микроконтроллер кнопкой В меню "Device" эта команда называется "Write file to device".
Теперь точка доступа будет создаваться каждый раз при включении микроконтроллера.
Создаем пароль для точки доступа
Сейчас наша точка доступа не имеет защиты данных и пароля для подключения. Чтобы ее защитить, в коде скрипта нужно поменять строчкуap.config(essid='myAP', channel=11)
на строчку
ap.config(essid='myAP', channel=11, password='12345678', authmode=network.AUTH_WPA_WPA2_PSK)
Пароль должен иметь не менее 8 символов.
Если вы хотите отключить запущенную точку доступа, не выключая микроконтроллер, наберите в терминале команду
ap.active(False)
Подключаем ESP32 к существующей Wi-Fi сети
Полный код программы для подключения к сети может выглядеть следующим образом:import time, machine
import network, webrepl
webrepl.start(password='12345') # !!! if webrepl is not running !!!
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect("SSID", "PASSWORD")
while not sta.isconnected():
time.sleep_ms(300)
print('IP address:', sta.ifconfig()[0])
machine.Pin(2, machine.Pin.OUT).value(1)
Рассмотрим подробнее его работу.
Подключение модулей
Нам понадобятся следующие модули:- time – содержит функции для измерения интервалов времени и создания задержек (нам необходима функция sleep_ms() из этого модуля для создания задержки в миллисекундах);
- machine – позволяет получить прямой доступ и возможность управления аппаратными элементами системы (нам необходим класс Pin из этого модуля для управления контактом, к которому подключен светодиод на нашей плате);
- network – модуль конфигурации сети (из этого модуля мы используем класс WLAN, который обеспечивает управление встроенными WiFi-интерфейсами);
- webrepl – в модуле webrepl находится демон, который прослушивает активные сетевые интерфейсы, и позволяет получить полное управление всеми доступными функциями MicroPython на микроконтроллере.
import time, machine
import network, webrepl
Запуск WebREPL
WebREPL следует запускать только один раз. Если он еще не запущен, то запускаем его с паролем, например, "12345":webrepl.start(password='12345')
Если же WebREPL уже запущен на микроконтроллере (например, в данный момент вы подключены к ESP32 в режиме точки доступа из предыдущего примера), то просто пропускаем эту строчку.
Настраиваем подключение к сети
Создаем объект сетевого интерфейса, например, с именем sta. В конструкторе указываем константу STA_IF, чтобы настроить ESP32 на режим станции (клиента).sta = network.WLAN(network.STA_IF)
Активируем наш сетевой интерфейс:
sta.active(True)
Подключаемся к сети, указав идентификатор (название) вашей сети вместо SSID и пароль для доступа вместо PASSWORD (это строковые параметры, их надо писать в кавычках).
sta.connect("SSID", "PASSWORD")
Немного подождем, чтобы ESP32 успел подсоединиться к сети. Для этого создадим небольшой цикл с условием. Функция isconnected() возвращает текущее состояние интерфейса True или False. В цикле напишем задержку в 300 миллисекунд с помощью функции sleep_ms(). В результате цикл будет проверять наличие соединения каждые 300 миллисекунд.
while not sta.isconnected():
time.sleep_ms(300)
Когда цикл закончится, напечатаем IP-адрес, выданный маршрутизатором. Функция ifconfig() возвращает кортеж из четырех параметров сетевого интерфейса, в котором содержится: IP-адрес, маска подсети, шлюз и DNS-сервер. Нам понадобится только IP-адрес, поэтому возьмем только первый элемент кортежа с индексом [0].
print('IP address:', sta.ifconfig()[0])
И последняя необязательная, но удобная строка, которая включит светодиод на плате, когда произойдет соединение.
machine.Pin(2, machine.Pin.OUT).value(1)
Дадим имя вкладке, например, "sta.py" и запустим скрипт с помощью кнопки "DOWNLOAD & RUN".
Если все было сделано правильно, то в терминале мы увидим примерно следующую строку:
IP address: 192.168.1.37
Это IP-адрес, выданный ESP32 маршрутизатором (конечно же адрес будет другим, это зависит от вашего маршрутизатора).
Подключаемся к ESP32 через сеть
Закроем соединение в Iguana IDE кнопкой "Close", если оно открыто.Подключим компьютер к сети, к которой мы подключили наш ESP32. Они оба должны находиться в одной сети!
В Iguana IDE переключатель режимов "Serial — Wi-Fi" должен находиться в нижнем положении "Wi-Fi". Напишем в окне ввода адрес для подключения, который выдал маршрутизатор:
ws://192.168.1.37:8266/

Нажмем кнопку "Open", находящуюся справа от окошка ввода адреса, и подождем, пока в терминале появится сообщение:
Welcome to MicroPython WebREPL!
Password:
Password:
Введем наш пароль "12345" (пароль при вводе отображаться не будет) и нажмем "Enter".
Появится сообщение о подключении и приглашение от WebREPL:
WebREPL connected
>>>
>>>
Теперь микроконтроллер подключен к Iguana IDE через вашу Wi-Fi-сеть и его можно программировать также, как если бы он был подключен по USB. Кабель USB, подключенный по-прежнему к ESP32, используется теперь только для питания.
Подключение к микроконтроллеру по Wi-Fi через сеть имеет преимущество по сравнению с подключением к нему в режиме точки доступа: на компьютере доступен интернет через Wi-Fi соединение.
Зачем программировать микроконтроллер по Wi-Fi
Программирование микроконтроллеров "по воздуху" очень комфортно в тех случаях, когда нам необходимо отладить программу, а подключаться к устройству каждый раз с помощью кабеля не очень удобно. Это может быть в ситуации, когда устройство имеет датчик и должно находиться в определенном месте, к которому не слишком просто дотянуть кабель от компьютера. Но особенно удобно связываться с микроконтроллером без кабеля при отладке программ для роботов.В Iguana IDE любой файл с программой на устройстве может быть помечен как стоп-скрипт, который автоматически запустится после нажатия на кнопку "СТОП". Это удобно, если мы, например, хотим автоматически выключать моторы робота каждый раз при остановке программы. Такой классной фишики нет больше ни в одной среде программирования для MicroPython. Таким образом, нам не нужно бегать за роботом и ловить его, чтобы выключить, если мы хотим его остановить. При работе через Wi-Fi мы можем вовсе не вставать из-за компьютера, чтобы программировать своего робота.
Чтобы установить файл с программой в качестве стоп-скрипта, нужно выделить файл в списке на панели менеджера файлов слева и нажать на находящуюся внизу кнопку
То же самое можно сделать при помощи команды "Set Stop-Script" в меню "Run". Рядом с выбранным в списке файлом появится маленький зеленый квадратик. Отменить установку стоп-скрипта можно с помощью этой же кнопки.
Удачный Вам экспериментов!
Это оригинальная статья myROBOT.ru
| ПОПУЛЯРНЫЕ СТАТЬИ |

Драйвер двигателей L293D
Для управления двигателями мини робота необходимо устройство, которое бы преобразовывало управляющие сигналы малой мощности в токи, достаточные для управления моторами. Такое устройство называют драйвером двигателей.

Как сделать простейшего робота
О том, как сделать робота в домашних условиях, используя лишь микросхему драйвера моторов и пару фотоэлементов. В зависимости от способа соединения моторов, микросхемы и фотоэлементов робот будет двигаться на свет или, наоборот, прятаться в темноту, следовать по линии или бежать за вашей рукой.

Первые проекты на микроконтроллере ESP32
В качестве первых проектов на ESP32 рассмотрим примеры мигания светодиодами и напишем программу "бегущие огни". Это классика при изучении микроконтроллеров.

Как сделать простого робота на микроконтроллере (Часть 1). Управляем электромоторами
Как самому сделать робота, используя драйвер управления двигателями L293D и микроконтроллер ATmega8. Схема робота и примеры простейших программ для управления моторами.
| НОВЫЕ СТАТЬИ |

Можно ли сделать BEAM-робота на Raspberry Pi?
Ответ Марка Тилдена с уникальной фотографией одной из новых работ маэстро.

Изучаем Python: TOP-5 лучших сайтов для изучения Питона
Самоучитель, интерактивный учебник, наглядные задачи и примеры программ.

Роботы на одной микросхеме своими руками
Подборками статей myROBOT.ru. Практика создания роботов: схемы и советы по изготовлению. Чтобы сделать роботов, нет необходимости даже писать программы. Все роботы начнут работать сразу же, как только Вы подключите к ним питание.
| ПОПУЛЯРНОЕ НА САЙТЕ |

Iguana — удобная и функциональная IDE для MicroPython
Iguana IDE позволяет программировать популярные микроконтроллерные платы как через USB, так и через Wi-Fi.

Учимся программировать.
Среда программирования на ЛОГО
GAME LOGO — бесплатная среда программирования для увлекательного путешествия в мир программирования и информатики. Программирование на русском языке, удобный и красивый интерфейс, продуманный синтаксис.
