• Система автоматизации с открытым исходным кодом на базе 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
и поставьте после каждого оператора печать номера оператора
Дело в том что я так уже пробывал и все подключается, но вот этот когда кусок кода вместе с подключением колёс машинки все перестаёт работать. Я вот не пойму, нужно соединение создавать?
 
Сверху Снизу