Различия
Здесь показаны различия между двумя версиями данной страницы.
Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
main:upgkits:wifirobo [2020/05/25 17:14] smartadmin создано |
main:upgkits:wifirobo [2020/05/25 19:57] smartadmin [Шаг 2. Установите библиотеки] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Заголовок ====== | + | ====== Управление роботом через Wi-Fi ====== |
+ | ===== Описание ===== | ||
+ | В этом проекте мы подключим нашего робота к сети Wi-Fi, чтобы управлять им через интернет-страницу. Для этого построим страницу с кнопками действий и при нажатии на кнопку робот будет двигаться в указанную сторону 5 секунд. | ||
+ | |||
+ | ===== Дополнительные модули ===== | ||
+ | Предполагается что у Вас уже есть набор СмартРОБО, и вы собрали его по инструкции в руководстве пользователя. Тогда дополнительно понадобится: | ||
+ | |||
+ | ^ Что нужно ^ Кол-во, шт ^ | ||
+ | | [[https://smartelements.ru/collection/svyaz/product/wifi-modul-esp-12|Wi-Fi модуль ESP-12 (5 В)]] | 1 | | ||
+ | | [[https://smartelements.ru/collection/aksessuary/product/komplekt-neylonovyh-krepleniy|Комплект нейлоновых креплений]] | 1 | | ||
+ | | [[https://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-mama-mama|Провода мама-мама]] | 4 | | ||
+ | |||
+ | |||
+ | ===== Библиотеки ===== | ||
+ | * [[http://files.smartelements.ru/know_libs/robotSE.zip|Библиотека robotSE (для робота)]] | ||
+ | * [[http://files.smartelements.ru/know_libs/WiFiEsp.zip|Библиотека для WiFi]] | ||
+ | * [[http://files.smartelements.ru/know_libs/AltSoftSerial.zip|Библиотека для эмуляции сериал соединения]] | ||
+ | |||
+ | |||
+ | <WRAP center round tip 80%> | ||
+ | Перед началом работы с WiFi-модулем настройте его на скорость обмена в 9600 бод. О том как это сделать, рассказано [[main:comm:esp12#Установка скорости обмена данными|на этой странице]]. | ||
+ | </WRAP> | ||
+ | ===== Порядок действий ===== | ||
+ | ==== Шаг 1. Пересоберите робота ==== | ||
+ | - С помощью отвёртки, входящей в комплект набора, и нейлоновых креплений (одна гайка, один винт и одна стойка) прикрепите в свободное крайнее отверстие (справа от ИК-приёмника) - [[https://smartelements.ru/collection/svyaz/product/wifi-modul-esp-12|Wi-Fi модуль]] | ||
+ | - Присоедините Wi-Fi модуль с помощью проводов мама-мама к выводам мотор шилда по следующей схеме: | ||
+ | |||
+ | ^ Вывод модуля^ Вывод шилда | | ||
+ | | + | + | | ||
+ | | - | - | | ||
+ | | TX | 8 | | ||
+ | | RX | 9 | | ||
+ | |||
+ | ==== Шаг 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 sendHttpResponse(WiFiEspClient& client) | ||
+ | { | ||
+ | //формирование интернет-страницы | ||
+ | client.print( | ||
+ | "HTTP/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 http://"); | ||
+ | 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); //добавить его в буфер | ||
+ | |||
+ | //если в строке получены два символа завершения строки | ||
+ | //значит - это конец HTTP запроса, так что нужно отправить ответ | ||
+ | if (buf.endsWith("\r\n\r\n")) { | ||
+ | sendHttpResponse(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 http://192.168.1.182 | ||
+ | |||
+ | [WiFiEsp] Server started on port 80 | ||
+ | </file> | ||
+ | |||
+ | Таким образом мы видим адрес, где мы должен появиться сайт нашего робота. | ||
+ | |||
+ | ==== Шаг 5. Сайт ==== | ||
+ | Откройте браузер на компьютере и зайдите на интернет-сайт, полученный в предыдущем шаге. Вы должны увидеть такую страницу: | ||
+ | |||
+ | {{ :http:know.smartelements.ru_main:upgkits:робопульт.jpg?nolink |}} | ||
+ | |||
+ | Нажмите на кнопку и убедитесь что робот выполняет команды. | ||
+ | |||
+ | ++++Особенности при нажатии на кнопки|В связи с тем что мы используем эмуляцию сериал-соединения, модулю может не всегда хватать скорости связи, поэтому иногда страница может грузиться дольше чем при обычном соединении. Иногда требуется нажать на кнопку несколько раз чтобы ускорить процесс.++++ | ||
+ | |||
+ | ==== Шаг 6. Результат ==== | ||
+ | Теперь отключите робота от компьютера, поставьте на ровную поверхность где для его движения будет достаточно места. Включите переключатель на Power-модуле. После включения, подождите какое-то время (примерно 20 секунд) и откройте страницу с адресом, полученным в предыдущем шаге. Управляйте роботом с помощью сайта. В зависимости от полученной команды робот будет двигаться в определённом направлении. |