En este sketch vamos a mover un servo con un slider como widget en la app., utilizando la placa “node mcu Lolin V3″(esp8266),pero que valdría tambien para Esp32.
Si lo hacemos de forma simple y sin control escribiriamos el ejemplo que viene en el “Blynk Example Browser” (https://examples.blynk.cc/?board=NodeMCU&shield=ESP8266%20WiFi&example=GettingStarted%2FServo)
Si que controlaremos nuestro servo,pero de una manera brusca y sin control de la velocidad.
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo8266.h>
const char wifi_ssid[]="atom_2.4g";
const char wifi_pass[]="xxxxxxx";
const char auth[]="gbSwzk0iTlpXu2diXzPTRpsxAdQMjutU";
Servo8266 servo_12;
BLYNK_WRITE(V1)
{
servo_12.write=param.asInt();
}
void setup()
{
servo_12.attach(12);
servo_12.write(pos);
Blynk.begin(auth,wifi_ssid,wifi_pass);
servo_12.write(0);
}
void loop()
{
Blynk.run();
Slider();
}
Pero como no nos gusta ese control ,presento este otro sketch donde podremos controlar de forma suave el movimiento y con la posibilidad de supervisar la velocidad jugando con delay y con el intervalo de barrido, que no es mas que aumentar el incremento o decremento de la posición(pos).
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo8266.h>
const char wifi_ssid[]="atom_2.4g";
const char wifi_pass[]="xxxxxxxxx";
const char auth[]="gbSwzk0iTlpXu2diXzPTRpsxAdQMjutU";
Servo8266 servo_12;
int slider;
int pos;
BLYNK_WRITE(V1)
{
slider=param.asInt();
}
void Slider(){
if (slider < pos) {//de 180-0
pos = (pos - 1);
servo_12.write(pos);
delay(50);
if (pos < slider) {
pos = slider;
}
}
if (slider > pos) {//de 0-180
pos = (pos + 1);
servo_12.write(pos);
delay(50);
if (pos > slider) {
pos = slider;
}
}
}
void setup()
{
servo_12.attach(12);
pos=0;
servo_12.write(pos);
Blynk.begin(auth,wifi_ssid,wifi_pass);
servo_12.write(0);
}
void loop()
{
Blynk.run();
Slider();
}
La clave esta en la función void slider(); y escribirlo tal como lo pongo,porque si recolocamos los ” }”ya no ira de forma suave el movimiento del servo.
void Slider(){
if (slider < pos) {//de 180-0
pos = (pos - 1);
servo_12.write(pos);
delay(50);
if (pos < slider) {
pos = slider;
}
}
if (slider > pos) {//de 0-180
pos = (pos + 1);
servo_12.write(pos);
delay(50);
if (pos > slider) {
pos = slider;
}
}
La otra clave esta en posicionar el servo en el void setup a 0º
pos=0;
servo_12.write(pos);