• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

NodeMCU Robot Car

Volt-Amper

New member
Код:
#define ENA   14          // Enable/speed motors Right        GPIO14(D5)
#define ENB   12          // Enable/speed motors Left         GPIO12(D6)
#define IN_1  15          // L298N in1 motors Right           GPIO15(D8)
#define IN_2  13          // L298N in2 motors Right           GPIO13(D7)
#define IN_3  2           // L298N in3 motors Left            GPIO2(D4)
#define IN_4  0           // L298N in4 motors Left            GPIO0(D3)

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

String command;             //String to store app command state.
int speedCar = 800;         // 400 - 1023.
int speed_Coeff = 3;

const char *ssid = "Smart Car";
const char *password = "12345678";
ESP8266WebServer server(80);

void setup()
{
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT); 
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
pinMode(IN_3, OUTPUT);
pinMode(IN_4, OUTPUT);
 
Serial.begin(115200);

// Connecting WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Задаем режим работы WIFI_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
// Starting WEB-server
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();
}

void goAhead(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
  }

void goBack(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goRight(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
  }

void goLeft(){

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goAheadRight(){
     
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar/speed_Coeff);
      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar);
   }

void goAheadLeft(){
     
      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, HIGH);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, HIGH);
      analogWrite(ENB, speedCar/speed_Coeff);
  }

void goBackRight(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar/speed_Coeff);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
  }

void goBackLeft(){

      digitalWrite(IN_1, HIGH);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, HIGH);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar/speed_Coeff);
  }

void stopRobot(){ 

      digitalWrite(IN_1, LOW);
      digitalWrite(IN_2, LOW);
      analogWrite(ENA, speedCar);

      digitalWrite(IN_3, LOW);
      digitalWrite(IN_4, LOW);
      analogWrite(ENB, speedCar);
}

void loop() {
    server.handleClient();
   
      command = server.arg("State");
      if (command == "F") goAhead();
      else if (command == "B") goBack();
      else if (command == "L") goLeft();
      else if (command == "R") goRight();
      else if (command == "I") goAheadRight();
      else if (command == "G") goAheadLeft();
      else if (command == "J") goBackRight();
      else if (command == "H") goBackLeft();
      else if (command == "0") speedCar = 400;
      else if (command == "1") speedCar = 470;
      else if (command == "2") speedCar = 540;
      else if (command == "3") speedCar = 610;
      else if (command == "4") speedCar = 680;
      else if (command == "5") speedCar = 750;
      else if (command == "6") speedCar = 820;
      else if (command == "7") speedCar = 890;
      else if (command == "8") speedCar = 960;
      else if (command == "9") speedCar = 1023;
      else if (command == "S") stopRobot();
}

void HTTP_handleRoot(void) {

if( server.hasArg("State") ){
       Serial.println(server.arg("State"));
  }
  server.send ( 200, "text/html", "" );
  delay(1);
}
Здравствуйте, возникла проблема в подключении NodeMCU к Wi fi домашней сети. Роутер не находит NodeMCU в списке доступных устройств.
 

CodeNameHawk

Moderator
Команда форума
Попробуйте(на роутере и в есп) задать название сети без пробелов.
 

tretyakov_sa

Moderator
Команда форума
У меня ваш код прекрасно подключается. Смотрите настройки роутера и сети.
 

Volt-Amper

New member
Не пойму, если например из Arduino IDE взять пример подключения к WiFi для NodeMCU, то нормально подключается устройство к WiFi-сети, а если задать какие-то функции для подключения периферии(в данном случае это 4 колеса и L298n). В моем коде сверху для подключения NodeMcu к WiFi использовал код из примера Arduino IDE.
 

Volt-Amper

New member
Не пойму, если например из Arduino IDE взять пример подключения к WiFi для NodeMCU, то нормально подключается устройство к WiFi-сети, а если задать какие-то функции для подключения периферии(в данном случае это 4 колеса и L298n). В моем коде сверху для подключения NodeMcu к WiFi использовал код из примера Arduino IDE.

Вот так подключается NodeMCU к сети с помощью кода в примере, а с кодом выше не хочет подключатся.
 

Вложения

nikolz

Well-known member
Не пойму, если например из Arduino IDE взять пример подключения к WiFi для NodeMCU, то нормально подключается устройство к WiFi-сети, а если задать какие-то функции для подключения периферии(в данном случае это 4 колеса и L298n). В моем коде сверху для подключения NodeMcu к WiFi использовал код из примера Arduino IDE.

Вот так подключается NodeMCU к сети с помощью кода в примере, а с кодом выше не хочет подключатся.
поставьте проверку соединения и если есть соединение то работу с GPIO
 

Volt-Amper

New member
У меня ваш код прекрасно подключается. Смотрите настройки роутера и сети.
Настройка роутера не причем, другие то устройства подключаюся к wi fi сети, и отдельно если взять пример из Arduino IDE то к сети нормально подключается
 

nikolz

Well-known member
ДА я понял вас, но дело в подключении библиотек esp8266WebServer и WifiClient.
поставьте условие проверки подключения и по этому условию вызывайте эти функции
иначе у вас обращение к функциям может блокировать процесс подключения или мешать ему.
 

Volt-Amper

New member
поставьте условие проверки подключения и по этому условию вызывайте эти функции
иначе у вас обращение к функциям может блокировать процесс подключения или мешать ему.
А вот это не условие проверки соединения:
Код:
// Connecting WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Задаем режим работы WIFI_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
// Starting WEB-server
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();
}
 

nikolz

Well-known member
А вот это не условие проверки соединения:
Код:
// Connecting WiFi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Задаем режим работы WIFI_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
// Starting WEB-server
     server.on ( "/", HTTP_handleRoot );
     server.onNotFound ( HTTP_handleRoot );
     server.begin();
}
покажите картинку терминала что пишет ESP
 

nikolz

Well-known member
я не полностью посмотрел сначала ваш скетч
вопрос: вы его сами писали или методом рекле слепили или взяли готовый?
 

Volt-Amper

New member
я не полностью посмотрел сначала ваш скетч
вопрос: вы его сами писали или методом рекле слепили или взяли готовый?
Это уже готовый был скетч в интернете. Извиняюсь за качество фото, просто с принскрином это бы заняло минут 10. В терминале он ничего не пишет, хотя если убрать полностью строчки из кода с подключением любой периферии, в данном случае пока это моторы 4WD, то программа работает исправно и в монитор порта выводится, если задаётся например функция WiFiScan из примеров Arduino IDE. И нормально конектится к WiFi, но только если я задаю в поле ssid и password имя и пароль wifi сети, а не то что я создал новое устройство в списке доступных WiFi подключений.
 

Вложения

nikolz

Well-known member
Да вот в том то и дело, по пробывал через Web-сервер http тоже самое.
веб сервер не причем
эти сообщения у вас в самом начале и не зависят от wifi
возможно вы что-то не то грузите в ESP
попробуйте оставить лишь соединение по wifi
и поставьте после каждого оператора печать номера оператора
 

Volt-Amper

New member
что-то не видно эти сообщения:
  1. Serial.print("Connecting to ");
  2. Serial.println(ssid);
Да вот в том то и дело, по пробывал через Web-сервер http тоже самое.
веб сервер не причем
эти сообщения у вас в самом начале и не зависят от wifi
возможно вы что-то не то грузите в ESP
попробуйте оставить лишь соединение по wifi
и поставьте после каждого оператора печать номера оператора
Дело в том что я так уже пробывал и все подключается, но вот этот когда кусок кода вместе с подключением колёс машинки все перестаёт работать. Я вот не пойму, нужно соединение создавать?
 
Сверху Снизу