Управление машинкой через WiFi с помощью ESP8266 NodeMCU

Итак будем управлять двумя реверсивными (вращение в обе стороны) двигателями: основным и рулевым. Питать их будем от аккумулятора 3,7 В, но можно и до 12 В в принципе подавать, если согласовать питание контроллера или организовать его отдельным аккумулятором.
В силовой части используем простейший миниатюрный драйвер шагового двигателя l9110s или же можно использовать сборку на L293\8  или любой не менее мощный, который вы найдёте. В общем я всё нарисовал на картинке.
Приобрести комплектующие для проекта можно на алиэкспресс :
Драйвер http://ali.pub/1sgfi7 
Преобразователь 3.7 на 5 в http://ali.pub/1sgflw 
Плата зарядки лития http://ali.pub/1sgfrj 



WiFi контроллер использован мой любимый NodeMCU 0.9 ESP8266, но можно использовать и меньший размером WeMos D1 mini.

Аккумулятор можно зарядить через микро-USB, после чего он питает драйвер двигателей напрямую и WiFi-контроллер через повышающий преобразователь до 5 В.

Код программы:

#include <ESP8266WiFi.h>
const char* ssid = "имя вашей сети вайфай";
const char* password = "пароль вашей сети";
int up = 2; //номера дискретных выходов
int down = 14;
int left = 4;
int right = 12;
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
  Serial.begin(9600);
  delay(10);
  //подготовка выходов
  pinMode(up, OUTPUT);
  digitalWrite(up, 0);
  pinMode(down, OUTPUT);
  digitalWrite(down, 0);
  pinMode(left, OUTPUT);
  digitalWrite(left, 0);
  pinMode(right, OUTPUT);
  digitalWrite(right, 0);
  
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  //Запуск сервера
  server.begin();
  Serial.println("Server started");
  //выводим IP адрес в монитор порта
  Serial.println(WiFi.localIP());
}
void loop() {
  //проверяем подключился ли клиент
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  //Ожидаем пока клиент не пришлет какие-нибудь данные
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  //Чтение первой строки запроса
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  //обработка команды
  if (req.indexOf("/gpio/up") != -1){
    digitalWrite(up, 1);
    digitalWrite(down, 0);
    delay(1000);
    digitalWrite(up, 0);
    digitalWrite(down, 0);
    }
  else if (req.indexOf("/gpio/down") != -1){
    digitalWrite(up, 0);
    digitalWrite(down, 1);
    delay(1000);
    digitalWrite(up, 0);
    digitalWrite(down, 0);
    }
  else if (req.indexOf("/gpio/left") != -1){
    digitalWrite(up, 1);
    digitalWrite(down, 0);
    digitalWrite(left, 1);
    digitalWrite(right, 0);
    delay(1000);
    digitalWrite(up, 0);
    digitalWrite(down, 0);
    digitalWrite(left, 0);
    digitalWrite(right, 0);
    }  
  else if (req.indexOf("/gpio/right") != -1){
    digitalWrite(up, 1);
    digitalWrite(down, 0);
    digitalWrite(left, 0);
    digitalWrite(right, 1);
    delay(1000);
    digitalWrite(up, 0);
    digitalWrite(down, 0);
    digitalWrite(left, 0);
    digitalWrite(right, 0);
    }    
  else {
    Serial.println("invalid request");
  }
  
  client.flush();
  // подготовка к ответу
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n ";
  
  s += "<center><br><a href='http://192.168.1.97/gpio/up'>UP</a><br>";
  s += "<br><a href='http://192.168.1.97/gpio/left'>LEFT</a>&emsp;&emsp;&emsp;&emsp;&emsp;";
  s += "<a href='http://192.168.1.97/gpio/right'>RIGHT</a><br>";
  s += "<br><a href='http://192.168.1.97/gpio/down'>DOWN</a>";
  s += "</center></html>\n";
  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");
}

Программа написана в Arduino IDE. Как настроить Arduino IDE для работы с контроллером NodeMCU 0.9 ESP8266 посмотрите по ссылке.
После загрузки программы в контроллер, монитором порта можно прочитать IP-адрес, который плата получит после соединения с вашим WiFi-роутером. В браузере компьютера необходимо в адресной строке прописать этот адрес и перейти на страницу, которую сгенерирует программа контроллера. Она будет выглядеть следующим образом:

UP

LEFT     RIGHT

DOWN


При нажатии на ссылку UP, машинка проедет вперед в течении 1сек и остановится. При нажатии на DOWN, машинка 1 секунду будет ехать назад. LEFT - двигатель поворота повернёт колёса влево и машинка проедет 1 сек влево. То же самое и вправо при нажатии на RIGHT.
Вся эта система будет работать только при настроенной WiFi-точке доступа (WiFi-роутере), но в будущем мне интересно поиграться с контроллером NodeMCU 0.9 ESP8266, который сам будет организовывать точку доступа и выполнять функцию WEB-сервера, тоесть при заходе на его айпи из браузера, будем видеть web-страничку с элементами управления. Так же интересно организовать передачу данных с одного такого контроллера в другой посредством их автономной WiFi-сети.

Так же не забываем о экономии при покупке товаров на Алиєкспресс с помощью кэшбэка 

Для веб администраторов и владельцев пабликов  главная страница ePN

Для пользователей покупающих на Алиэкспресс с быстрым выводом % главная страница ePN Cashback

Удобный плагин кэшбеэка браузерный плагин ePN Cashback 

Похожие статьи

Arduino UNO как осциллограф

Arduino UNO как осциллограф

Контроллеры Arduino можно использовать как простейший осциллограф, для наблюдения за быстро изменяющимися электрическими сигналами.

Скачиваем программу Processing , после чего её устанавливать не нужно - она запускается с EXE-файла.

Arduino основы программирования

Arduino основы программирования

Здесь мы научимся писать элементарную программу способную сделать что-либо интересное для новичка. Здесь вы узнаете, как написать простейший скетч для Arduino используя стандартый IDE. Мы пока пропустим использование входов-выходов, но обратим внимание на связь через USB. Синтаксис языка Arduino точно повторяет язык C, поэтому на нем мы останавливаться не будем. Мы сконцентрируемся на конкретных аспектах Arduino языка, в котором вы можете использовать все принципы, которые присущи языку C: переменные, операторы, состояния, типы, константы и т.д.

Arduino и использование двигателей. Подключение двигателя постоянного тока и управление им.

Arduino и использование двигателей. Подключение двигателя постоянного тока и управление им.

1. Управляем маленькими моторчиками

Управление маленьким двигателем может быть может осуществляться довольно просто. Если двигатель достаточно маленький, он может быть непосредственно соединен с выводом Arduino, и просто изменяя уровень управляющего сигнала от логической единицы до нуля будем контролировать моторчик. Этот проект раскроет вам основную логику в управлении электродвигателем; однако, это не является стандартным способом подключения двигателей к Arduino. Мы рекомендуем, вам изучить данный способ, а затем перейти на следующую ступень - заняться управлением двигателями при помощи транзисторов.

Подключим миниатюрный вибромоторчик к нашему Arduino.

Управление servo-мотором через COM-порт Arduino

Управление servo-мотором через COM-порт Arduino

Управление будет  в таком виде как: в стандартном (или стороннем) окне монитора COM-порта вводим целую цифру от нуля до 180, нажимаем Enter и серво меняет положение своего плеча на заданный угол. 

Теги: Управление машинкой через WiFi с помощью ESP8266 NodeMCU