Эта страница только для чтения. Вы можете посмотреть исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Управление "Смарт РОБО" через Wi-Fi ====== ===== Описание ===== В этом проекте мы подключим нашего робота к сети Wi-Fi, чтобы управлять им через интернет-страницу. Для этого построим страницу с кнопками действий и при нажатии на кнопку робот будет двигаться в указанную сторону 5 секунд. ===== Дополнительные модули ===== Предполагается что у Вас уже есть набор СмартРОБО, и вы собрали его по инструкции в руководстве пользователя. Тогда дополнительно понадобится: ^ Что нужно ^ Кол-во, шт ^ | [[httpss://smartelements.ru/collection/svyaz/product/wifi-modul-esp-12|Wi-Fi модуль ESP-12 (5 В)]] | 1 | | [[httpss://smartelements.ru/collection/aksessuary/product/komplekt-neylonovyh-krepleniy|Комплект нейлоновых креплений]] | 1 | | [[httpss://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-mama-mama|Провода мама-мама]] | 4 | ===== Библиотеки ===== * [[https://files.smartelements.ru/know_libs/robotSE.zip|Библиотека robotSE (для робота)]] * [[https://files.smartelements.ru/know_libs/WiFiEsp.zip|Библиотека для WiFi]] * [[https://files.smartelements.ru/know_libs/AltSoftSerial.zip|Библиотека для эмуляции сериал соединения]] <WRAP center round tip 80%> Перед началом работы с WiFi-модулем настройте его на скорость обмена в 9600 бод. О том как это сделать, рассказано [[main:comm:esp12#Установка скорости обмена данными|на этой странице]]. </WRAP> ===== Порядок действий ===== ==== Шаг 1. Пересоберите робота ==== - С помощью отвёртки, входящей в комплект набора, и нейлоновых креплений (одна гайка, один винт и одна стойка) прикрепите в свободное крайнее отверстие (справа от ИК-приёмника) - [[httpss://smartelements.ru/collection/svyaz/product/wifi-modul-esp-12|Wi-Fi модуль]] - Присоедините Wi-Fi модуль с помощью проводов мама-мама к выводам мотор шилда по следующей схеме: ^ Вывод модуля^ Вывод шилда | | + | + | | - | - | | TX | 8 | | RX | 9 | {{ :main:upgkits:wifirobo.png?nolink |}} ==== Шаг 2. Установите библиотеки ==== Установите в Arduino IDE библиотеки, которые представлены по ссылкам выше (в подпункте "Библиотеки"). О том как устанавливаются библиотеки описано в руководстве пользователя, входящем в комплект, либо посетите соответствующий [[main:info:libs|раздел Базы Знаний]]. ==== Шаг 3. Загрузите скетч на контроллер ==== Измените в скетче значения переменных **char ssid[]** = "SmartElements"; и **char pass[]** = "12345678"; на свои (имя вашей сети и пароль к ней). <file Arduino> #include "WiFiEsp.h" //подключение библиотеки WiFiEsp #include <robotSE.h> //подключение библиотеки для работы с платформой. #include <AltSoftSerial.h> //подключение библиотеки для эмуляции сериал соединения AltSoftSerial wifiSerial; //создание виртуального сериал соединения (на 8 и 9 выводах) char ssid[] = "SmartElements"; //имя сети wifi char pass[] = "12345678"; //пароль от сети wifi int status = WL_IDLE_STATUS; //статус сети wifi robotSE robot; //создание объекта робота WiFiEspServer server(80); //переменная для создания объекта сервера //использование кольцевого буфера для увеличения скорости RingBuffer buf(8); /* Отправка и формирование страницы - ответа * на сервер */ void sendhttpsResponse(WiFiEspClient& client) { //формирование интернет-страницы client.print( "https/1.1 200 OK\r\n" "Content-Type: text/html\r\n" "Connection: close\r\n" "\r\n"); client.print("<!DOCTYPE HTML>\r\n"); client.print("<html>\r\n"); client.print("<head>\r\n"); client.print("<meta charset=\"utf-8\">\r\n"); client.print("<title>Робопульт</title>\r\n"); client.print("<style>\r\n"); client.print( ".c {\r\n" "border: 1px solid #333;\r\n" "display: inline-block;\r\n" "padding: 5px 15px;\r\n" "text-decoration: none;\r\n" "color: #000;\r\n" "}\r\n"); client.print("</style>\r\n"); client.print("</head>\r\n"); client.print("<div style=\"text-align:center;\">\r\n"); client.print("<a href=\"/F\" class=\"c\">Вперёд</a>\r\n"); client.print("<br><br>\r\n"); client.print("<a href=\"/L\" class=\"c\">Влево</a>\r\n"); client.print("<a href=\"/S\" class=\"c\">Стоп</a>\r\n"); client.print("<a href=\"/R\" class=\"c\">Вправо</a>\r\n"); client.print("<br><br>\r\n"); client.print("<a href=\"/B\" class=\"c\">Назад</a>\r\n"); client.print("</head>\r\n"); client.print("</html>\r\n"); } /* Вывод состояния сети и адреса для подключения к моджулю */ void printWifiStatus() { //вывод названия сети Serial.print("SSID: "); Serial.println(WiFi.SSID()); //вывод полученного модулем IP-адреса IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); //вывод информации о адресе в браузере Serial.println(); Serial.print("To see this page in action, open a browser to https://"); Serial.println(ip); Serial.println(); } void setup() { //инициализация Serial-соединения для отладки Serial.begin(9600); //инициализация Serial-соединения для ESP-модуля wifiSerial.begin(9600); //инициализация ESP модуля WiFi.init(&wifiSerial); //проверка существования модуля if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi module not present"); //если модуля нет, то не продолжать работу далее while (true); } //попытка подключения к wifi сети while (status != WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID: "); //вывод надписи о попытке подключения Serial.println(ssid); //вывод названия сети //подключение к сети, используя имя и пароль status = WiFi.begin(ssid, pass); } Serial.println("You're connected to the network"); //вывод сообщения о подключении printWifiStatus(); //вывод статуса подключения //инициализация веб-сервера на порту № 80 server.begin(); } void loop() { WiFiEspClient client = server.available(); //ожидание входящих клиентов if (client) { //если получен клиент, Serial.println("New client"); //вывести сообщение в Serial-порт buf.init(); //инициализация буфера while (client.connected()) { //цикл, пока клиент подключен if (client.available()) { //если от клиента есть байты для чтения, char c = client.read(); //прочитать байт, а затем buf.push(c); //добавить его в буфер //если в строке получены два символа завершения строки //значит - это конец https запроса, так что нужно отправить ответ if (buf.endsWith("\r\n\r\n")) { sendhttpsResponse(client); break; } //проверить если запрос был одним из: "GET /R", "GET /G" или "GET /B": if (buf.endsWith("GET /F")) { //запрос изменения состояния красного цвета Serial.println("Forward"); //вывод отладочной информации robot.move_forward(); //движение робота вперед delay(5000); //задержка на 5 секунд robot.move_stop(); //остановка робота } else if (buf.endsWith("GET /L")) { //запрос изменения состояния зелёного цвета Serial.println("Left"); //вывод отладочной информации robot.move_left(); //движение робота влево delay(5000); //задержка на 5 секунд robot.move_stop(); //остановка робота } else if (buf.endsWith("GET /R")) { //запрос изменения состояния синего цвета Serial.println("Right"); //вывод отладочной информации robot.move_right(); //движение робота вправо delay(5000); //задержка на 5 секунд robot.move_stop(); //остановка робота } else if (buf.endsWith("GET /B")) { //запрос изменения состояния синего цвета Serial.println("Back"); //вывод отладочной информации robot.move_back(); //движение робота назад delay(5000); //задержка на 5 секунд robot.move_stop(); //остановка робота } else if (buf.endsWith("GET /S")) { //запрос изменения состояния синего цвета Serial.println("Stop"); //вывод отладочной информации robot.move_stop(); //остановка робота } } } //закрытие соединения client.stop(); Serial.println("Client disconnected"); //вывод информации об отключении } } </file> ==== Шаг 4. Тестирование ==== После загрузки скетча, оставьте робота подключенным к компьютеру и откройте в Arduino IDE монитор порта. Для этого воспользуйтесь меню //Инструменты - Монитор порта//. В скетче мы выводим отладочную информацию в монитор сериал порта. В том числе туда выводится информация о том, какой IP-адрес получил робот в вашей домашней сети. При старте работы информация в мониторе порта будут примерно такого вида: <file> [WiFiEsp] Initilization successful - 1.5.4 Attempting to connect to WPA SSID: SmartElements [WiFiEsp] Connected to SmartElements You're connected to the network SSID: SmartElements IP Address: 192.168.1.182 To see this page in action, open a browser to https://192.168.1.182 [WiFiEsp] Server started on port 80 </file> Таким образом мы видим адрес, где мы должен появиться сайт нашего робота. ==== Шаг 5. Сайт ==== Откройте браузер на компьютере и зайдите на интернет-сайт, полученный в предыдущем шаге. Вы должны увидеть такую страницу: {{ :https:know.smartelements.ru_main:upgkits:робопульт.jpg?nolink |}} Нажмите на кнопку и убедитесь что робот выполняет команды. ++++Особенности при нажатии на кнопки|В связи с тем что мы используем эмуляцию сериал-соединения, модулю может не всегда хватать скорости связи, поэтому иногда страница может грузиться дольше чем при обычном соединении. Иногда требуется нажать на кнопку несколько раз чтобы ускорить процесс.++++ ==== Шаг 6. Результат ==== Теперь отключите робота от компьютера, поставьте на ровную поверхность где для его движения будет достаточно места. Включите переключатель на Power-модуле. После включения, подождите какое-то время (примерно 20 секунд) и откройте страницу с адресом, полученным в предыдущем шаге. Управляйте роботом с помощью сайта. В зависимости от полученной команды робот будет двигаться в определённом направлении.