Nodemcu Robot Car

Тема в разделе "ESP8266, ESP32", создана пользователем Volt-Amper, 2 сен 2019.

  1. Volt-Amper

    Volt-Amper Нерд

    Здравствуйте, кто сталкивался с проблемой подключения NodeMcu к домашней wi fi сети? Вот код программы:
    Код (C++):
    #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 = "wi fi"; // имя сети
    const char* pass = "пароль"
    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

    WiFi.mode(WIFI_AP);
    WiFi.softAP(ssid, pass);

    IPAddress myIP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(myIP);

    // 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, приложение для Android написано.

    "http://ip-адрес NodeMCU/?State=<letter>" вот такую ошибку выдаёт программа для Android.
     
    Последнее редактирование: 2 сен 2019
  2. b707

    b707 Гуру

    не могу сказать точно. в чем ошибка - но у вас в коде пароль к ВайФаю нигде не используется, из чего видно. что подключаетесь вы неправильно.
     
  3. Volt-Amper

    Volt-Amper Нерд

    Вот и я тоже так подумал, что куда записывается ssid в функцию туда и нужно я так понял и команду pass ввести?
     
  4. ИгорьК

    ИгорьК Гуру

    А с чего бы она вообще должна к сети подключаться:

    upload_2019-9-2_14-10-40.png
     
    Volt-Amper нравится это.
  5. Volt-Amper

    Volt-Amper Нерд

    IPAddress myIP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(myIP);
    Вот эти строчки не пойму что такое "AP IP address" ?
     
  6. Volt-Amper

    Volt-Amper Нерд

    Извиняюсь забыл добавить WiFi.softAP(ssid, pass);
     
  7. Volt-Amper

    Volt-Amper Нерд

    IP адресс я должен указать маршрутизатора или NodeMcu?
     
  8. ИгорьК

    ИгорьК Гуру

    Я никогда не работал с модулем таким образом, поэтому вам надо разбираться с примерами этой библиотеки.

    Мне просто бросается в глаза, что этот кусок кода:
    Код (C++):
    WiFi.mode(WIFI_AP);
    WiFi.softAP(ssid, pass);

    IPAddress myIP = WiFi.softAPIP();
    Serial.print("AP IP address: ");
    Serial.println(myIP);

    // Starting WEB-server
    server.on ( "/", HTTP_handleRoot );
    server.onNotFound ( HTTP_handleRoot );
    server.begin();
    создает сервер на собственной точке доступа, а не заводит модуль в сеть.
     
    Volt-Amper нравится это.
  9. Volt-Amper

    Volt-Amper Нерд

    Увидел немного неверные функции, исправлю. Ещё один момент не пойму, для чего создавать http-сервер для NodeMCU, если я буду управлять программой на Android?
     
  10. ИгорьК

    ИгорьК Гуру

    Программа на андроиде (судя по всему) отправляет запросы на модуль. Чтобы принимать эти запросы, модуль и поднимает собственный, малюсенький веб-сервер.

    Когда вы заходите на эту страницу, вы отправляете на нее запрос. В ответ получаете то, что считает нужным вам передать страница. В случае же с этим устройством, страница будет что-то с ним делать.
     
  11. Volt-Amper

    Volt-Amper Нерд

    Код (C++):
    #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, я вот думаю может самому программу написать на Android и уже вписывать там свои значения? Может знает кто программы в которых можно таблицами прогать?