ESP8266 12F 点灯科技APP 控制两个舵机

第一次写博客,有什么不足,希望大家指正。


custom wifimanager 这个库在云盘在中呢

链接:https://pan.baidu.com/s/1RjYO0IF1sZDa0K9GJhi0xw
提取码:kx3l

缺少什么库 就在库管理中,搜索相应的下载就行了

1.基本功能描述

我是使用了ESP8266 12f 控制两个舵机 如图:

舵机1开 /关 ,分别控制舵机1的开关和闭合
舵机2同舵机1相同

在这里插入图片描述

2.程序

#include <Servo.h>
#define BLINKER_WIFI
#include <Blinker.h>
#include <ESP8266WiFi.h>
 
//needed for library   
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <CustomWiFiManager.h>        


char auth[] = " ";   // 这个一定要写自己blinker app 中那个密匙
char ssid[] = "";   //wifi 和密码可以不用写  待会会有手机配网
char pswd[] = "";   // 

// 
BlinkerButton Button1("btn1_k");    //舵机1的开
BlinkerButton Button2("btn1_g");    //舵机1的关

BlinkerButton Button3("btn2_k");    //舵机2的开
BlinkerButton Button4("btn2_g");    //舵机2的关

//分别创建我们要控制的舵机1和2 
Servo myservo1;//定义(创建)一个舵机名称为myservo1
Servo myservo2;//定义(创建)一个舵机名称为myservo2




//创建6个滑块
BlinkerSlider Slider1("ser_max1");   //滑块1 控制第一个舵机最大角度
BlinkerSlider Slider2("ser_min1");   //滑块2 控制第一个舵机最小角度
BlinkerSlider Slider3("ser_mid1");   //滑块3 控制第一个舵机中间角度

BlinkerSlider Slider4("ser_max2");  // 滑块4 控制第二个舵机最大角度
BlinkerSlider Slider5("ser_min2");   //滑块5 控制第二个舵机最小角度
BlinkerSlider Slider6("ser_mid2");   //滑块6 控制第二个舵机中间角度


//定义6个变量
int ser_max1, ser_min1, ser_mid1;
int ser_max2, ser_min2, ser_mid2;
bool on_or_off = false;  //这个可有可无吧  意思是创建一个Bool类型的变量

// app 端按下按键即会执行该函数 回调函数--------------------------------------------------------------------------------------------------------
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);//读取按键状态

   myservo1.write(ser_max1);  //写入滑块1 的角度   这个角度大小可以通过滑块1 来设置
   Blinker.vibrate();  //使手机震动
   Blinker.delay(1000);//这个delay 一定要有  不然舵机转不过来 
   myservo1.write(ser_mid1);  //15s后恢复到滑块3设置的角度  ,因为既然控制开关了   就必须考虑到我们用手按的时候   舵机不能挨着开关呀
   Blinker.vibrate();  //使手机震动

}
   void button2_callback(const String & state) {
   BLINKER_LOG("get button state: ", state);//这个和上面的一样
   myservo1.write(ser_min1);  
   Blinker.vibrate(); 
   Blinker.delay(1000);
   myservo1.write(ser_mid1);  //写入设置好的角度90
   Blinker.vibrate();  //使手机震动
}

   void button3_callback(const String & state) {
   BLINKER_LOG("get button state: ", state);
   myservo2.write(ser_max2);  //写入设置好的角度90
   Blinker.vibrate();  //使手机震动
    Blinker.delay(1000);//这个delay 一定要有  不然舵机转不过来 
   myservo2.write(ser_mid2);  //写入设置好的角度90
   Blinker.vibrate();  //使手机震动
}

void button4_callback(const String & state) {
 BLINKER_LOG("get button state: ", state);
 myservo2.write(ser_min2);  //写入设置好的角度90
 Blinker.vibrate();  //使手机震动
  Blinker.delay(1000);//这个delay 一定要有  不然舵机转不过来 
 myservo2.write(ser_mid2);  //写入设置好的角度90
 Blinker.vibrate();  //使手机震动
}


//------------------------------------------------------------------------------------------------------------------------------------

void slider1_callback(int32_t value)//这个是滑块程序
{
  ser_max1 = value;
  myservo1.write(ser_max1);
  Blinker.vibrate();  //使手机震动

  Blinker.delay(1000);
  BLINKER_LOG("get slider value: ", value);
}



void slider2_callback(int32_t value)
{
  ser_min1 = value;
  myservo1.write(ser_min1);
  Blinker.vibrate();  //使手机震动

  Blinker.delay(1000);
  BLINKER_LOG("get slider value: ", value);
}

void slider3_callback(int32_t value)
{
  ser_mid1 = value;
  myservo1.write(ser_mid1);
  Blinker.vibrate();  //使手机震动

  Blinker.delay(1000);
  BLINKER_LOG("get slider value: ", value);
}


void slider4_callback(int32_t value)
{
  ser_max2 = value;
  myservo2.write(ser_max2);
  Blinker.vibrate();  //使手机震动

  Blinker.delay(1000);
  BLINKER_LOG("get slider value: ", value);
}



void slider5_callback(int32_t value)
{
  ser_min2 = value;
  myservo2.write(ser_min2);
  Blinker.vibrate();  //使手机震动

  Blinker.delay(1000);
  BLINKER_LOG("get slider value: ", value);
}

void slider6_callback(int32_t value)
{
  ser_mid2 = value;
  myservo2.write(ser_mid2);
  Blinker.vibrate();  //使手机震动

  Blinker.delay(1000);
  BLINKER_LOG("get slider value: ", value);
}

//-------------------------------------------------------------------------------------------------------------------------
void setup() {



  // 初始化串口,并开启调试信息

  Serial.begin(115200);

  WiFiManager wifiManager;//自动配网
   
    wifiManager.autoConnect("AutoConnectAP");
        Serial.println("connected...yeey :)");

  // 初始化有LED的IO

  pinMode(LED_BUILTIN, OUTPUT);  //LED_BUILTIN 宏就是开发板指示灯的io口

  digitalWrite(LED_BUILTIN, HIGH);

  // 初始化blinker

  Blinker.begin(auth, ssid, pswd);

  Button1.attach(button1_callback); //绑定按键执行回调函数
  Button2.attach(button2_callback); //绑定按键执行回调函数
  Button3.attach(button3_callback); //绑定按键执行回调函数
  Button4.attach(button4_callback); //绑定按键执行回调函数

  Slider1.attach(slider1_callback);
  Slider2.attach(slider2_callback);
  Slider3.attach(slider3_callback);
  Slider4.attach(slider4_callback);
  Slider5.attach(slider5_callback);
  Slider6.attach(slider6_callback);
myservo1.attach(16); //esp8266的GIPIO16  对应NODEmcu 的D0 
myservo2.attach(5); //同上  对应modeMCU 的,.....
  
}




//-----------------------------------------------------------------------------------------------------------
void loop() {


digitalWrite(LED_BUILTIN, HIGH);
  Blinker.run();  //*每次运行都会将设备收到的数据进行一次解析。
    digitalWrite(LED_BUILTIN, LOW);//                在使用WiFi接入时,该语句也负责保持网络连接*/
    delay(200);
}



3.接线图

其中 attach(16) 就是舵机接在 esp8266的gpio 16上 就是nodeMCU 的D0
在222入图片描述
node MCU也可以 只不过接线的时候注意引脚

烧录程序 接线如图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210508211327886.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTM5NzIxNQ==,size_16,color_FFFFFF,t_70在这里插入图片描述
烧录后 把IO 0断开 就可以进行配置网络

4.配置方法

打开无线网 然后连接名字为AutoConnectAP的WIFI热点
会自动登录配网页面
如果不自动登录 可以点开网络旁边的感叹号
有网络的IP地址 直接在浏览器中输入也可以登录
在这里插入图片描述
然后在点灯科技配置自己的按键滑块

注意点:

数据键名 要正确 是在代码中
在这里插入图片描述

滑块的也是 数据键名 和 最大值等都要对
在这里插入图片描述

5.注意事项

注意 按键和滑块的键名按键类型不要配置错了

  • 15
    点赞
  • 214
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值