Проект недоступен для бесплатного скачивания! Если вы заинтересованы в приобретении программной части проекта с функциями, описанными на данной странице, свяжитесь с: martinius96@gmail.com
Zakúpiť projekt / Buy project
ESP8266 WiFi Voice control Multilanguage Car
Решение требует HTTPS-соединения с веб-сервером с Google Chrome, единственным, который поддерживает Webkit!

Радиоуправляемая машина, управляемая голосом - Попробуйте онлайн ЗДЕСЬ!!!


  • В решении используется микроконтроллер ESP8266, который через регулярные промежутки времени подключается к веб-сайту HTTPS и загружает содержимое текстового файла.
  • Команды, которые ESP8266 выполняет на машине RC, записываются в текстовый файл индивидуально.
  • Команды вводятся пользователем системы, подключенным по протоколу HTTPS, через веб-интерфейс через браузер Google Chrome. Можно использовать любой мировой язык, включая языковой регион. Текущая реализация программы использует английский в регионе США.
  • Процесс преобразования голоса в текст выполняется серверами Google по запросу Xhr, который автоматически запускается пользователем.
  • Поддерживаются 4 команды прямого, обратного и бокового движения.
  • Между двумя соединениями существует пауза в 2000 миллисекунд, пока соединение не будет разорвано и текущая голосовая команда не будет выполнена.
  • Реакция системы на соединение происходит практически мгновенно в течение 30 миллисекунд.
  • ESP8266 использует HTTPS-соединение с веб-сервером посредством реализации библиотеки WifiClientSecure и сертификата веб-сервера.
  • Система подходит для школьных проектов, а также для автономных транспортных средств, управляемых из любой точки земли Проект может быть дополнен записью с камеры и различными другими датчиками.
  • Совместимость для (в Arduino Core 2.3.0):

  • ESP8266-Generic
  • NodeMCU (v1 - v3)
  • Wemos D1
  • Wemos D1 mini
  • Программа для ESP8266

    /*|-------------------------------------------------|*/
    /*| RC CAR VOICE CONTROL VIA WEB INTERFACE          |*/
    /*| Webkit (GOOGLE) technology for voice-to-text    |*/
    /*| Author: Martin Chlebovec (martinius96)          |*/
    /*| LANGUAGE English - region US --> en-US          |*/
    /*|-------------------------------------------------|*/
    #include <ESP8266WiFi.h>
    #include <WiFiClientSecure.h>
    
    const char * ssid = "WIFI_NAME";
    const char * password = "WIFI_PASSWORD";
    const char * host = "arduino.php5.sk"; //yourdomain
    const int httpsPort = 443; //https port
    const char * fingerprint = "‎b0 6d 7f 8c 98 78 8e 6e 0a 57 a8 2f 7e d1 40 2a 1e 3f 48 f7"; //SHA1 certificate fingerprint
    
    void setup() {
      Serial.begin(115200);
      Serial.println();
      Serial.print("Connecting to WiFi: ");
      Serial.println(ssid);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    void executed_command() {
      WiFiClientSecure client;
      if (!client.connect(host, httpsPort)) {
        Serial.println("Connection not sucessful");
        return;
      }
      String url = "/php_car/command_executed.php";
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                   "Host: " + host + "\r\n" +
                   "User-Agent: NodeMCU\r\n" +
                   "Connection: close\r\n\r\n");
      Serial.println("Connection sucessful");
      Serial.println("Command executed to PHP service");
    }
    void loop() {
      WiFiClientSecure client;
      Serial.print("Connecting to server ");
      Serial.println(host);
      if (!client.connect(host, httpsPort)) {
        Serial.println("Connection not sucessful");
        return;
      }
      String url = "/php_car/translation.txt";
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                   "Host: " + host + "\r\n" +
                   "User-Agent: NodeMCU\r\n" +
                   "Connection: close\r\n\r\n");
      Serial.println("Connection sucessful");
      while (client.connected()) {
        String line = client.readStringUntil('\n');
        if (line == "\r") {
          break;
        }
      }
      String line = client.readStringUntil('\n');
      Serial.println("RC control command: ");
      Serial.println(line);
      if (line == "UP") { //if command == go UP
    
    
        Serial.println("Moving forward...");
        // PUT CODE FOR MOVE FORWARD THERE
        executed_command();
    
      } else if (line == "DOWN") { //if command == go DOWN
    
    
        Serial.println("Moving backward...");
        // PUT CODE FOR MOVE BACKWARD THERE
        executed_command();
    
      } else if (line == "LEFT") { //if command == TURN LEFT
    
    
        Serial.println("Turning left...");
        // PUT CODE FOR TURN LEFT THERE
        executed_command();
    
      } else if (line == "RIGHT") { //if command == TURN RIGHT
    
    
        Serial.println("Turning right...");
        // PUT CODE FOR TURN RIGHT THERE
        executed_command();
    
      } else if (line == "Last command executed by ESP8266. Waiting for new command.") { //if command == NO_MORE_COMMAND
    
    
        Serial.println("No voice command set yet");
    
    
      } else {
    
        Serial.println("This command is not suported");
        executed_command();
      }
    
      delay(2000); // WAIT () miliseconds before next reading of variable
    }