【无聊的改造】esp-01s舵机控制开关灯支持小爱同学-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2438|回复: 14

[分享] 【无聊的改造】esp-01s舵机控制开关灯支持小爱同学

[复制链接]
发表于 2022-4-5 01:47 | 显示全部楼层 |阅读模式
无聊的改造 esp-01s舵机控制开关灯支持小爱同学

用到的模块有
esp-01s/sg90舵机/esp-01s配套的烧写器




  1. #define BLINKER_WIFI
  2. #define BLINKER_MIOT_OUTLET
  3. #include <Servo.h>
  4. #include <Blinker.h>


  5. char auth[] = "a5146fd5a283";   // blinker app 中那个密匙key
  6. char ssid[] = "wldgz";          //wifi名称(英文名称 2.4gwifi)
  7. char pswd[] = "wldgz5566";      //wifi密码



  8. // 创建开关
  9. BlinkerButton Button1("btn_k");    //舵机的开
  10. BlinkerButton Button2("btn_g");    //舵机的关


  11. //创建舵机
  12. Servo myservo;//定义(创建)一个舵机名称为myservo





  13. //创建6个滑块
  14. BlinkerSlider Slider1("ran_max1");   //滑块1 控制第一个舵机最大角度
  15. BlinkerSlider Slider2("ran_min1");   //滑块2 控制第一个舵机最小角度
  16. BlinkerSlider Slider3("ran_mid1");   //滑块3 控制第一个舵机中间角度




  17. //定义3个变量
  18. int ran_max1, ran_min1, ran_mid1;

  19. //创建一个Bool类型的变量
  20. bool on_or_off = false;
  21. bool oState = false;

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

  25.   myservo.write(ran_max1);  //写入滑块1 的角度   这个角度大小可以通过滑块1 来设置
  26.   Blinker.vibrate();       //使手机震动
  27.   Blinker.delay(1000);    //这个delay 一定要有 不然舵机转不过来
  28.   myservo.write(ran_mid1);  //1s后恢复到滑块3设置的角度,
  29.   Blinker.vibrate();  //使手机震动

  30. }
  31. void button2_callback(const String & state) {
  32.   BLINKER_LOG("get button state: ", state);//这个和上面的一样
  33.   myservo.write(ran_min1);
  34.   Blinker.vibrate();
  35.   Blinker.delay(1000);
  36.   myservo.write(ran_mid1);
  37.   Blinker.vibrate();
  38. }


  39. //小爱电源回调函数
  40. //里面同样设置舵机的动作
  41. void miotPowerState(const String & state)
  42. {
  43.   BLINKER_LOG("need set power state: ", state);
  44.   if (state == BLINKER_CMD_ON) {
  45.     // digitalWrite(LED_BUILTIN, HIGH);
  46.     myservo.write(ran_max1);  //写入滑块1 的角度   这个角度大小可以通过滑块1 来设置
  47.     Blinker.delay(1000);    //这个delay 一定要有 不然舵机转不过来
  48.     myservo.write(ran_mid1);  //1s后恢复到滑块3设置的角度,
  49.     BlinkerMIOT.powerState("on");
  50.     BlinkerMIOT.print();
  51.   }
  52.   else if (state == BLINKER_CMD_OFF) {
  53.     //  digitalWrite(LED_BUILTIN, LOW);
  54.     myservo.write(ran_min1);
  55.     Blinker.delay(1000);
  56.     myservo.write(ran_mid1);
  57.     BlinkerMIOT.powerState("off");
  58.     BlinkerMIOT.print();
  59.   }
  60. }



  61. void miotQuery(int32_t queryCode)
  62. {
  63.   BLINKER_LOG("MIOT Query codes: ", queryCode);

  64.   switch (queryCode)
  65.   {
  66.     case BLINKER_CMD_QUERY_ALL_NUMBER :
  67.       BLINKER_LOG("MIOT Query All");
  68.       BlinkerMIOT.powerState(oState ? "on" : "off");
  69.       BlinkerMIOT.print();
  70.       break;
  71.     case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
  72.       BLINKER_LOG("MIOT Query Power State");
  73.       BlinkerMIOT.powerState(oState ? "on" : "off");
  74.       BlinkerMIOT.print();
  75.       break;
  76.     default :
  77.       BlinkerMIOT.powerState(oState ? "on" : "off");
  78.       BlinkerMIOT.print();
  79.       break;
  80.   }
  81. }

  82. void dataRead(const String & data)
  83. {
  84.   BLINKER_LOG("Blinker readString: ", data);

  85.   Blinker.vibrate();

  86.   uint32_t BlinkerTime = millis();
  87.   Blinker.print(BlinkerTime);
  88.   Blinker.print("millis", BlinkerTime);
  89. }



  90. //滑块设置
  91. void slider1_callback(int32_t value)   //最大角度滑动条
  92. {
  93.   ran_max1 = value;
  94.   myservo.write(ran_max1);
  95.   Blinker.vibrate();  //使手机震动
  96.   Blinker.delay(1000);
  97.   BLINKER_LOG("get slider value: ", value);
  98. }


  99. void slider2_callback(int32_t value)  //最小角度滑动条
  100. {
  101.   ran_min1 = value;
  102.   myservo.write(ran_min1);
  103.   Blinker.vibrate();  //使手机震动
  104.   Blinker.delay(1000);
  105.   BLINKER_LOG("get slider value: ", value);
  106. }


  107. void slider3_callback(int32_t value)   //中间角度滑动条
  108. {
  109.   ran_mid1 = value;
  110.   myservo.write(ran_mid1);
  111.   Blinker.vibrate();  //使手机震动
  112.   Blinker.delay(1000);
  113.   BLINKER_LOG("get slider value: ", value);
  114. }



  115. // 初始化串口,并开启调试信息
  116. void setup() {


  117.   Serial.begin(115200);



  118.   // 初始化有LED的IO

  119.   pinMode(LED_BUILTIN, OUTPUT);  //LED_BUILTIN 开发版上的led 不需要灯亮可以删掉

  120.   digitalWrite(LED_BUILTIN, HIGH);

  121.   // 初始化blinker

  122.   Blinker.begin(auth, ssid, pswd);

  123.   Button1.attach(button1_callback); //绑定按键执行回调函数
  124.   Button2.attach(button2_callback); //绑定按键执行回调函数


  125.   Slider1.attach(slider1_callback);
  126.   Slider2.attach(slider2_callback);
  127.   Slider3.attach(slider3_callback);

  128.   myservo.attach(0); //定义舵机连接的引脚


  129.   BlinkerMIOT.attachQuery(miotQuery);   //小爱同学回调函数
  130.   Blinker.attachData(dataRead);
  131.   BlinkerMIOT.attachPowerState(miotPowerState);

  132. }





  133. void loop() {

  134.   Blinker.run();  //*每次运行都会将设备收到的数据进行一次解析。

  135. }



  136. //blink app 界面配置代码复制到app里面即可
  137. //{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨tex¨¨t0¨¨blinker入门示例¨¨t1¨¨文本2¨¨bg¨Ë¨ico¨´´¨cols¨Í¨rows¨Ê¨key¨¨tex-272¨´x´É´y´É¨speech¨|÷¨lstyle¨Ê¨clr¨¨#FFF¨}{ßC¨btn¨ßJ¨fal fa-power-off¨¨mode¨ÉßE¨关灯¨ßGßHßIÉßKËßLËßM¨btn_g¨´x´Î´y´ÏßPÉ}{ßCßSßJßTßUÉßE¨开灯¨ßGßHßIÉßKËßLËßM¨btn_k¨´x´Ê´y´ÏßPÉ}{ßC¨ran¨ßE¨最大角度¨ßQ¨#389BEE¨¨max¨¢2u¨min¨ÉßIÉßKÑßLËßM¨ran_max1¨´x´É´y´¤DßPÉ}{ßCßZßE¨最小角度¨ßQßbßcº0ßdÉßIÉßKÑßLËßM¨ran_min1¨´x´É´y´ÒßPÉ}{ßCßZßE¨中间角度¨ßQßbßcº0ßdÉßIÉßKÑßLËßM¨ran_mid1¨´x´É´y´¤BßPÉ}{ßC¨deb¨ßUÉßIÉßKÑßLÌßM¨debug¨´x´É´y´Ì}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßn¨source_zh¨¨开关状态¨¨state¨|ßpßr÷¨state_zh¨|¨打开¨´关闭´÷}÷´rt´|÷}
复制代码


发表于 2022-4-7 21:02 | 显示全部楼层
666楼主这个代码刚好帮了大忙
发表于 2022-4-12 14:48 | 显示全部楼层
刚好我也需要,谢谢楼主
发表于 2022-5-12 19:12 来自手机 | 显示全部楼层
esp-01s
发表于 2022-5-12 19:12 来自手机 | 显示全部楼层
esp-01s
发表于 2022-5-13 12:53 来自手机 | 显示全部楼层
esp-01s
发表于 2022-5-18 15:15 | 显示全部楼层
楼主的教程实操一遍过。楼主能出一个8266双开并联现有开关同时使用的教程吗
发表于 2022-6-11 12:16 | 显示全部楼层
烧录程序上传成功,但在点灯.blinker里,设备却上不了线,找不到原因,怎么办?
发表于 2022-6-11 15:12 | 显示全部楼层
hmsabc 发表于 2022-6-11 12:16
烧录程序上传成功,但在点灯.blinker里,设备却上不了线,找不到原因,怎么办? ...

找到原因了,用同样的程序写入另一esp8266模块,成功了,说明原先的那块坏了。真害人!新手真得注意。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:24 , Processed in 0.253311 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表