fbpx
Back to Curso

Curso de Python - Edición 2

0% Complete
0/51 Steps
En Progreso
Clase 12, Tema 23
En Progreso

Desafío Extra Copy

Van a tener que armar una web con 4 botones utilizando webSocket para controlar el robot. Primero hacer que se muevan los dos motores hacia adelante y hacia atrás. Luego agregar los botones de giro.

Resumiendo

  1. Tener el Robot Armado y testeado los motores.
  2. Armar una WEB con 4 Botones y Websocket.
  3. Primero probar los botones de “adelante” y “atrás” con el mismo código que hicimos antes.
  4. Después programar y testear los botones de “giro derecha” y “giro izquierda”

⚠️ Aquí abajo se encuentra la solución al desafío ⚠️

Circuito

Página

Código

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WebSocketsServer.h>
#include <mi_wifi.h>

ESP8266WebServer server(80);
WebSocketsServer webSocket = WebSocketsServer(81);

const int MOTOR_A_En = D1;
const int MOTOR_A_Dir = D3;
const int MOTOR_B_En = D2;
const int MOTOR_B_Dir = D4;

void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
  switch (type) {
    case WStype_DISCONNECTED:
      Serial.println("cliente desconectado");

      break;
    case WStype_CONNECTED:
      Serial.println("cliente conectado");

      break;
    case WStype_TEXT:
      String dato = (char*)payload;
      Serial.print("Dato recibido: ");
      Serial.println(dato);

      if (dato == "adelante") {
        digitalWrite(MOTOR_A_Dir, HIGH);
        digitalWrite(MOTOR_A_En, HIGH);
        digitalWrite(MOTOR_B_Dir, HIGH);
        digitalWrite(MOTOR_B_En, HIGH);

      } else if (dato == "atras") {
        digitalWrite(MOTOR_A_Dir, LOW);
        digitalWrite(MOTOR_A_En, HIGH);
        digitalWrite(MOTOR_B_Dir, LOW);
        digitalWrite(MOTOR_B_En, HIGH);

      } else if (dato == "izquierda") {
        digitalWrite(MOTOR_A_Dir, LOW);
        digitalWrite(MOTOR_A_En, HIGH);
        digitalWrite(MOTOR_B_Dir, HIGH);
        digitalWrite(MOTOR_B_En, HIGH);

      } else if (dato == "derecha") {
        digitalWrite(MOTOR_A_Dir, HIGH);
        digitalWrite(MOTOR_A_En, HIGH);
        digitalWrite(MOTOR_B_Dir, LOW);
        digitalWrite(MOTOR_B_En, HIGH);

      } else if (dato == "detener") {
        digitalWrite(MOTOR_A_Dir, LOW);
        digitalWrite(MOTOR_A_En, LOW);
        digitalWrite(MOTOR_B_Dir, LOW);
        digitalWrite(MOTOR_B_En, LOW);

      }
      break;
  }
}
const String pagina = R"====(
<!DOCTYPE html>
<html>
<head>
<title>Control</title>
    <script>
        var canal = new WebSocket('ws://' + location.hostname + ':81/', ['arduino']);

        function enviarESP(comando) {
            canal.send(comando);
        }

    </script>
</head>
<body>
<h1>Control remoto</h1>
<hr>
&emsp;&emsp;<button type="button" onmousedown="enviarESP('adelante')" onmouseup="enviarESP('detener')" onmouseout="enviarESP('detener')">&uArr;</button>
<br>
&emsp;
<button type="button" onmousedown="enviarESP('izquierda')" onmouseup="enviarESP('detener')" onmouseout="enviarESP('detener')">&lArr;</button>
<button type="button" onmousedown="enviarESP('derecha')" onmouseup="enviarESP('detener')" onmouseout="enviarESP('detener')">&rArr;</button>
<br>
&emsp;&emsp;<button type="button" onmousedown="enviarESP('atras')" onmouseup="enviarESP('detener')" onmouseout="enviarESP('detener')">&dArr; </button>
<hr>
</body>
</html>
)====";

void setup() {
  Serial.begin(115200);

  pinMode(MOTOR_A_En, OUTPUT);
  pinMode(MOTOR_A_Dir, OUTPUT);
  pinMode(MOTOR_B_En, OUTPUT);
  pinMode(MOTOR_B_Dir, OUTPUT);

  WiFi.mode(WIFI_STA);

  WiFi.begin(ssid, password);

  Serial.println("");
  Serial.println("");
  Serial.print("Conectando a WiFi ");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }


  Serial.println("Conectado!");
  Serial.print("Nuestra IP es: ");
  Serial.println(WiFi.localIP());

  server.on("/", []() {
    server.send(200, "text/html", pagina);

  });

  webSocket.begin();
  webSocket.onEvent(webSocketEvent);

  server.begin();
  Serial.println("Servidor iniciado");
}

void loop() {
  webSocket.loop();
  server.handleClient();

}

Responses

[uo_login_ui]