From de90a43021330e18ffd18ebe87437f85a81897c4 Mon Sep 17 00:00:00 2001 From: Martin Chaparro Date: Thu, 16 Jul 2020 23:08:21 -0500 Subject: [PATCH] tasks --- firmwareCarroEsp32/.vscode/extensions.json | 12 +- firmwareCarroEsp32/data/index.html | 222 ++++++++++++++++++ firmwareCarroEsp32/platformio.ini | 7 +- .../src/OpenTB6612FNG/OpenTB6612FNG.cpp | 42 +--- .../src/OpenTB6612FNG/OpenTB6612FNG.h | 15 +- firmwareCarroEsp32/src/carroEsp32.h | 32 ++- firmwareCarroEsp32/src/config_ota.hpp | 9 + firmwareCarroEsp32/src/main.cpp | 72 ++++-- firmwareCarroEsp32/src/managerServer.hpp | 63 +++++ firmwareCarroEsp32/src/wifi_config.hpp | 28 +++ 10 files changed, 427 insertions(+), 75 deletions(-) create mode 100644 firmwareCarroEsp32/data/index.html create mode 100644 firmwareCarroEsp32/src/config_ota.hpp create mode 100644 firmwareCarroEsp32/src/managerServer.hpp create mode 100644 firmwareCarroEsp32/src/wifi_config.hpp diff --git a/firmwareCarroEsp32/.vscode/extensions.json b/firmwareCarroEsp32/.vscode/extensions.json index 8281e64..0f0d740 100644 --- a/firmwareCarroEsp32/.vscode/extensions.json +++ b/firmwareCarroEsp32/.vscode/extensions.json @@ -1,7 +1,7 @@ { - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "recommendations": [ - "platformio.platformio-ide" - ] -} \ No newline at end of file + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ] +} diff --git a/firmwareCarroEsp32/data/index.html b/firmwareCarroEsp32/data/index.html new file mode 100644 index 0000000..a84ec9a --- /dev/null +++ b/firmwareCarroEsp32/data/index.html @@ -0,0 +1,222 @@ + + + + + + ESP32 CARRO + + + + +
+ + +

+

+

+
+ + + + \ No newline at end of file diff --git a/firmwareCarroEsp32/platformio.ini b/firmwareCarroEsp32/platformio.ini index ae9fc16..5d1b8c2 100644 --- a/firmwareCarroEsp32/platformio.ini +++ b/firmwareCarroEsp32/platformio.ini @@ -13,4 +13,9 @@ platform = espressif32 board = mhetesp32devkit framework = arduino -monitor_speed = 115200 \ No newline at end of file +monitor_speed = 115200 +upload_protocol = espota +upload_port = 192.168.1.109 +upload_flags = + --port=3232 + --auth=un260874 \ No newline at end of file diff --git a/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.cpp b/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.cpp index fb16086..553b644 100644 --- a/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.cpp +++ b/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.cpp @@ -1,10 +1,6 @@ # include "Arduino.h" # include "OpenTB6612FNG.h" - - - - OpenTB6612FNG::OpenTB6612FNG(int TP) { pinMode(AIN1, OUTPUT); @@ -13,47 +9,16 @@ OpenTB6612FNG::OpenTB6612FNG(int TP) { pinMode(BIN1, OUTPUT); pinMode(BIN2, OUTPUT); pinMode(PWMB, OUTPUT); - analogWriteFreq(20000); - analogWriteRange(255); + analogWriteResolution(10); + analogWriteFrequency(10000); - } void OpenTB6612FNG::MotorIz(int value) { - /* if (value >= 0) { - // si valor positivo vamos hacia adelante - - digitalWrite(AIN1, HIGH); - digitalWrite(AIN2, LOW); - } else { - // si valor negativo vamos hacia atras - - digitalWrite(AIN1, LOW); - digitalWrite(AIN2, HIGH); - value *= -1; - } - */ - // Setea Velocidad - analogWrite(MOTOR_IZQ, value); } void OpenTB6612FNG::MotorDe(int value) { - /* if (value >= 0) { - // si valor positivo vamos hacia adelante - - digitalWrite(BIN1, HIGH); - digitalWrite(BIN2, LOW); - } else { - // si valor negativo vamos hacia atras - - digitalWrite(BIN1, LOW); - digitalWrite(BIN2, HIGH); - value *= -1; - } - */ - // Setea Velocidad - analogWrite(MOTOR_DER, value); } @@ -78,9 +43,6 @@ void OpenTB6612FNG::Backward() digitalWrite(BIN2, HIGH); } - - - void OpenTB6612FNG::Stop() { digitalWrite(AIN1, LOW); diff --git a/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.h b/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.h index 25f7680..eadc306 100644 --- a/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.h +++ b/firmwareCarroEsp32/src/OpenTB6612FNG/OpenTB6612FNG.h @@ -1,12 +1,13 @@ #ifndef OpenTB6612FNG_h #define OpenTB6612FNG_h #include "Arduino.h" -#define PWMA D1 -#define AIN1 D2 -#define AIN2 D3 -#define BIN1 D4 -#define BIN2 D5 -#define PWMB D6 +#include +#define PWMA 33 +#define AIN1 26 +#define AIN2 25 +#define BIN1 27 +#define BIN2 14 +#define PWMB 13 #define MOTOR_IZQ PWMB #define MOTOR_DER PWMA @@ -14,7 +15,7 @@ class OpenTB6612FNG{ public: OpenTB6612FNG(int TP); - + void MotorIz(int value); void MotorDe(int value); void Motores(int left, int righ); diff --git a/firmwareCarroEsp32/src/carroEsp32.h b/firmwareCarroEsp32/src/carroEsp32.h index fb5ca54..40498a0 100644 --- a/firmwareCarroEsp32/src/carroEsp32.h +++ b/firmwareCarroEsp32/src/carroEsp32.h @@ -1,10 +1,10 @@ #ifndef CARROESP32_h #define CARROESP32_h -#define OUT1 A13 -#define OUT2 A16 -#define OUT3 A15 -#define OUT4 A10 -#define OUT5 A14 +#define OUT1 36 +#define OUT2 39 +#define OUT3 34 +#define OUT4 35 +#define OUT5 32 int sensores[5] = {0, 0, 0, 0, 0}; @@ -15,6 +15,7 @@ void readSensors() sensores[2] = analogRead(OUT3); sensores[3] = analogRead(OUT4); sensores[4] = analogRead(OUT5); + } void printSensores() @@ -35,8 +36,27 @@ void init_sensores(){ pinMode(OUT5, INPUT); } +int readSensors(int chanel) +{ - + switch (chanel) + { + case 0: + return analogRead(OUT1); + case 1: + return analogRead(OUT2); + case 2: + return analogRead(OUT3); + case 3: + return analogRead(OUT4); + case 4: + return analogRead(OUT5); + + + default: + return 0; + } +} diff --git a/firmwareCarroEsp32/src/config_ota.hpp b/firmwareCarroEsp32/src/config_ota.hpp new file mode 100644 index 0000000..97b3f46 --- /dev/null +++ b/firmwareCarroEsp32/src/config_ota.hpp @@ -0,0 +1,9 @@ + +void ota_init() +{ + ArduinoOTA.setHostname("OtaEsp32"); + ArduinoOTA.setPassword((const char *)"un260874"); + ArduinoOTA.setPort(3232); + ArduinoOTA.begin(); +} + diff --git a/firmwareCarroEsp32/src/main.cpp b/firmwareCarroEsp32/src/main.cpp index 06a3d18..2836e0f 100644 --- a/firmwareCarroEsp32/src/main.cpp +++ b/firmwareCarroEsp32/src/main.cpp @@ -1,30 +1,72 @@ #include -#include "BluetoothSerial.h" #include "carroEsp32.h" #include "OpenTB6612FNG/OpenTB6612FNG.h" +#include "wifi_config.hpp" +#include "SPIFFS.h" +#include +#include "config_ota.hpp" +TaskHandle_t TareaProcesador1; +TaskHandle_t TareaProcesador2; +void loop1(void *pvParameters); +void loop2(void *pvParameters); +int anterior = millis(); +char sensorCadena[16]; + OpenTB6612FNG misMotores(0); -BluetoothSerial ESP_BT; //Object for Bluetooth +#include "managerServer.hpp" -void setup() { - init_sensores(); +void setup() +{ Serial.begin(115200); + wifi(); + ota_init(); + SPIFFS.begin(); + init_sensores(); + + webSocket.begin(); + webSocket.onEvent(webSocketEvent); + server.begin(); + xTaskCreatePinnedToCore(loop1, "Tarea1", 10000, NULL, 1, &TareaProcesador1, 0); + xTaskCreatePinnedToCore(loop2, "Tarea2", 10000, NULL, 1, &TareaProcesador2, 1); + delay(200); + Serial.println("Carro Esp32"); - ESP_BT.begin("CARRO ESP32"); //Name of your Bluetooth Signal + + // handle index + server.on("/", []() { + File index = SPIFFS.open("/index.html", "r"); + server.streamFile(index, "text/html"); + index.close(); + }); } -void loop() { - misMotores.Forward(); - misMotores.Motores(255,255); - if (ESP_BT.available()) //Check if we receive anything from Bluetooth +void loop() +{ +} +void loop1(void *pvParameters) +{ + for (;;) { - //incoming = ESP_BT.read(); //Read what we recevive - Serial.print("Received:"); Serial.println(ESP_BT.read()); + webSocket.loop(); + ArduinoOTA.handle(); + server.handleClient(); + delay(10); } - //readSensors(); - //printSensores(); - //delay(500); - } +void loop2(void *pvParameters) +{ + for (;;) + { + + if (((millis() - anterior) > 100) && (nCliente > -1)) + { + anterior = millis(); + + sprintf(sensorCadena, "%d",readSensors(0)); + webSocket.sendTXT(nCliente, sensorCadena); + } + } +} \ No newline at end of file diff --git a/firmwareCarroEsp32/src/managerServer.hpp b/firmwareCarroEsp32/src/managerServer.hpp new file mode 100644 index 0000000..3854672 --- /dev/null +++ b/firmwareCarroEsp32/src/managerServer.hpp @@ -0,0 +1,63 @@ +int nCliente = -1; +WebServer server (80); +WebSocketsServer webSocket = WebSocketsServer(81); + + + +void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) { + + switch (type) { + case WStype_DISCONNECTED: + Serial.printf("[%u] Disconnected!\n", num); + misMotores.Stop(); + nCliente =-1; + break; + + case WStype_CONNECTED: { + IPAddress ip = webSocket.remoteIP(num); + Serial.printf("[%u] Connected from %d.%d.%d.%d url: %s\n", num, ip[0], ip[1], ip[2], ip[3], payload); + webSocket.sendTXT(num, "Connected"); + nCliente = num; // send message to client + } + break; + + case WStype_TEXT: + //Serial.printf("Número de conexión: %u - Texto recibido: %s\n", num, payload); + if (num == 0) { //Únicamente va a reconocer la primera conexión (softAP). + String str = (char*)payload; //Ejemplo de texto recibido: Velocidad:100 Angulo:-1.88 + int velocidad = str.substring(str.indexOf(':', str.indexOf("Velocidad:")) + 1, str.indexOf(' ', str.indexOf("Velocidad:"))).toInt(); + float angulo = str.substring(str.indexOf(':', str.indexOf("Angulo:")) + 1).toFloat(); + + //uint8_t velocidadMax = velocidad*255/100; //La velocidad se envía con valores entre 0 y 100. Se debe mapear a 0-255 + uint8_t velocidadMax = 85 + velocidad * 170 / 100; //Se corrige el mapeo porque el motor entre los valores 0-84 no se mueve, se mueve ente los valores 85-255 + + uint8_t velocidadSin = abs(velocidadMax * sin(angulo)); //Giro coche rápido + //uint8_t velocidadSin = abs(velocidadMax*sin(abs(2*angulo/3)+PI/6)); //Giro coche intermedio + //uint8_t velocidadSin = abs(velocidadMax*sin(abs(angulo/2)+PI/4)); //Giro coche lento + float anguloCos = cos(angulo); + + //Sentido de giro de los motores + if (angulo > 0) { //Primer y segundo cuadrante + misMotores.Forward(); + } else if (angulo < 0) { //Tercer y cuarto cuadrante + misMotores.Backward(); + } else { //Parado + misMotores.Stop(); + } + //Velocidad de los motores + uint8_t izq, der; + if (anguloCos > 0) { //Primer y cuarto cuadrante + izq = velocidadMax; + der = velocidadSin; + } else { //Segundo y tercer cuadrante + izq = velocidadSin; + der = velocidadMax; + } + misMotores.Motores(izq,der); + + Serial.print(anguloCos); Serial.print(" "); Serial.print(izq); Serial.print(" "); Serial.println(der); + } + break; + } +} + diff --git a/firmwareCarroEsp32/src/wifi_config.hpp b/firmwareCarroEsp32/src/wifi_config.hpp new file mode 100644 index 0000000..92d097f --- /dev/null +++ b/firmwareCarroEsp32/src/wifi_config.hpp @@ -0,0 +1,28 @@ +#include +#include +#include +#include + +const char* ssid = "mdchaparror"; +const char* password = "un260874"; +int contconexion = 0; +void wifi(){ +//setup wifi + WiFi.mode(WIFI_STA); //para que no inicie el SoftAP en el modo normal + WiFi.begin(ssid, password); + while (WiFi.status() != WL_CONNECTED and contconexion < 50) { //Cuenta hasta 50 si no se puede conectar lo cancela + ++contconexion; + delay(500); + Serial.print("."); + } + if (contconexion < 50) { + + Serial.println(""); + Serial.println("WiFi conectado"); + Serial.println(WiFi.localIP()); + } + else { + Serial.println(""); + Serial.println("Error de conexion"); + } +} \ No newline at end of file