Riešenie vyžaduje HTTPS pripojenie na webserver s prehliadačom Google Chrome, ako jediný podporuje Webkit!

RC auto ovládané hlasom - Vyskúšajte online TU!!!


  • Riešenie využíva mikrokontróler ESP8266, ktorý sa v pravidelných intervaloch pripája na HTTPS webstránku, odkiaľ sťahuje obsah textového súboru.
  • Do textového súboru sa jednotlivo zapisujú príkazy, ktoré ESP8266 vykoná na RC aute.
  • Príkazy zadáva používateľ systému pripojený po HTTPS protokole hlasom vo webovom rozhraní prostredníctvom prehliadača Google Chrome. Je možné použiť akýkoľvek svetový jazyk vrátane regiónu jazyka. Momentálna programová implementácia používa anglický jazyk v regióne USA.
  • Proces konverzie hlasu na text vykonávajú Google servery na Xhr požiadavku, ktorú spustí automaticky používateľ.
  • Podporované sú 4 príkazy pre pohyb vpred, vzad a do strán.
  • Medzi dvomi pripojeniami sa uplatňuje 2000 milisekundová pauza, pokým sa spojenie ukončí a vykoná sa aktuálny hlasový príkaz.
  • Odozva systému je pripojenie je prakticky okamžitá do 30 milisekúnd.
  • ESP8266 využíva HTTPS spojenie s webserverom prostredníctvom implementácie knižnice WifiClientSecure a odtlačkom certifikátu webservera.
  • Systém je vhodný pre školské projekty, ale aj autonómne vozidlá ovládané z ľubovoľného miesta na zemi. Projekt je možné doplniť o záznam z kamery a využiť rôzne ďalšie senzory.
  • Kompatibilita pre (vo verzii Arduino Core 2.3.0):

  • ESP8266-Generic
  • NodeMCU (v1 - v3)
  • Wemos D1
  • Wemos D1 mini
  • Program pre 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
    }