https://blog.csdn.net/qq_47749454/article/details/117638828
想法来源地址在上面,可以去参考一下,建议是结合两篇文章一块看,按照大佬的先来折腾一次,有问题了在看我这个,会比较齐全。
具体的折腾细节方面可以去上面的博主页面去参考,这里想聊一些那个博主没涉及到的。

1.买的型号,SG90舵机,淘宝应该很多,和ESP8266的连线也是ok的,没有困难,连完线难题就开始了,首先舵机驱动并没有搞过,其次ESP8266也忘记的差不多了,然后,这个程序实际上还有另外一个第三方库,Bliker点灯科技,他的库也没用过,也没了解过,那就简单点,直接copy(不是)借鉴上面大佬的代码,到自己的开发环境,编译烧写,发现不起作用,舵机是可以转动,但是只能转动一点点,和大佬代码里的29度和-29度并没有关系,于是开始了反复的debug,于是一天过去了。

2.第二天,准备换个思路,先去百度找到一个单独驱动舵机的程序,就是让舵机自己正转180,再倒转180,结果烧写进去,发现我自己这个,只能转动90度,和别人写的根本不一样,于是,我就想着,驱动不成就先放弃吧,角度也不定是固定的,所以就放弃了挣扎,能转动一定的符合要求的角度就ok了。

3.再有一个,就是舵机怎么和开关绑定的问题,舵机这么轻,也并没有一个很好的方式来固定到开关上,所以一开始就想着搞个透明胶带,后来才上了热熔胶,上了热熔胶也来来回回粘了好几次,建议是先挤一丢丢热熔胶在舵机和开关盖子上,把这两个东西固定住,并且压紧等几分钟,看效果还ok了之后,再松掉,加多点热熔胶固定周边,(热熔胶这玩意还真的好用,因为开关的壳子和舵机表面都本来就很光滑的,所以基本可以不费太多事就可以完美拆除,并且不留痕迹,以后要多买一些备用了~~

4.再有,就是blinker这个app,上面博主并没有涉及到blinker这个app怎么搞,只是接入了小爱同学,实际上blinker这个app也提供了丰富的自定义能力,来让你自己去在app里DIY你自己设备的控制面板上的按钮,你DIY的按钮的ID或者说标识,要和你的实际程序里的代码相吻合,然后就可以正常使用了。
5. 再有就是说,不知道是我的姿势有问题,还是买的舵机力道太小了,我这个 舵机居然无法在侧边打开和关闭开关,最终没办法,只能换个单边的头,用来做触发操作,在每次开灯操作触发的代码上外挂自己的方法,来实现功能~~~
6. 最后,再有就是,接入小爱同学的话,小爱同学是要即时返回的,所以如果你的代码中,操作舵机这种需要等待的方法,尽量不要去用,不然小爱在每次操作需要等待的操作的时候,会提示说“要操作的设备出问题了”之类的提示语,当然我就没所谓了,因为已经能够实现关灯的动作触发了,只是因为没有即时返回导致音箱提示异常,谁还在乎 个音箱说设备在不在呢对不对~
7. 最后的最后,前面也说了,因为单舵机并不支持能够开关等,所以说后面可能还需要在继续买个单独的舵机,用热熔胶粘贴到设备的后面,来实现开关灯都可以独立控制。
8. 最后的最后的最后,附上我的调试的代码,角度或者是具体执行的方法等这些东西,是要你自己去调试的,所以这部分我会特殊标注出来。

#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET#include <Blinker.h>
#include<Servo.h>char auth[] = "Your Sercet Key";
char ssid[] = "Your SSID";
char pswd[] = "Your SSID Password";bool oState = false;
Servo servo;
int pos = 0;void doAction(const String & state) {
//here is your method BLINKER_LOG("doAction : ", state);if(state == BLINKER_CMD_ON) {//暂时先空着,先不留开开关的BLINKER_LOG("开关 开了");} else if(state == BLINKER_CMD_OFF) {BLINKER_LOG("开关 关了");for (pos = 90; pos >= 0; pos --) { // 从180°到0°servo.write(pos);              // 舵机角度写入delay(15);                       // 等待转动到指定角度}delay(200);for (pos = 0; pos <= 90; pos ++) { // 0°到180°// in steps of 1 degreeservo.write(pos);              // 舵机角度写入delay(15);                       // 等待转动到指定角度}delay(200);//延时0.2s}
}
void miotPowerState(const String & state)
{BLINKER_LOG("need set power state: ", state);if (state == BLINKER_CMD_ON) {digitalWrite(LED_BUILTIN, LOW);doAction(state);BlinkerMIOT.powerState("on");BlinkerMIOT.print();oState = true;}else if (state == BLINKER_CMD_OFF) {digitalWrite(LED_BUILTIN, HIGH);doAction(state);BlinkerMIOT.powerState("off");BlinkerMIOT.print();oState = false;}
}void miotQuery(int32_t queryCode)
{BLINKER_LOG("MIOT Query codes: ", queryCode);switch (queryCode){case BLINKER_CMD_QUERY_ALL_NUMBER :BLINKER_LOG("MIOT Query All");BlinkerMIOT.powerState(oState ? "on" : "off");BlinkerMIOT.print();break;case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :BLINKER_LOG("MIOT Query Power State");BlinkerMIOT.powerState(oState ? "on" : "off");BlinkerMIOT.print();break;default :BlinkerMIOT.powerState(oState ? "on" : "off");BlinkerMIOT.print();break;}
}void dataRead(const String & data)
{BLINKER_LOG("Blinker readString: ", data);Blinker.vibrate();uint32_t BlinkerTime = millis();Blinker.print("millis", BlinkerTime);
}void setup()
{Serial.begin(115200);BLINKER_DEBUG.stream(Serial);pinMode(LED_BUILTIN, OUTPUT);digitalWrite(LED_BUILTIN, HIGH);servo.attach(D0);Blinker.begin(auth, ssid, pswd);Blinker.attachData(dataRead);BlinkerMIOT.attachPowerState(miotPowerState);BlinkerMIOT.attachQuery(miotQuery);doAction("off");
}void loop()
{Blinker.run();
}

ESP8266驱动SG90舵机控制开关灯(灯的开关)的折腾记录相关推荐

  1. (含代码)ESP8266+舵机 制作wifi灯控开关(arduino,点灯科技,小爱同学/天猫精灵实现)

    目录 项目涉及的主代码 前言 一.环境搭建 二.开发步骤 1.注册点灯科技平台 2.在点灯科技平台注册设备,获取Secret Key 3.在Arduino IDE中编写代码,写入ESP8266 4.编 ...

  2. 怎么控制LED灯的开关呢?最简单的方法是给它加一个开关

    怎么控制LED灯的开关呢?最简单的方法是给它加一个开关,然后串联一个电阻,闭合开关,LED灯就会亮,断开开关,LED灯就会熄灭,但这种方法的缺陷是得需要人为的参与. 如果频率很快,比如一秒钟开关100 ...

  3. Arduino-Mixly-超声波测距仪-实现距离控制LED灯的开关

    Arduino-Mixly-超声波测距仪-实现距离控制LED灯的开关 Arduino:个人理解那块电板就叫arduino,本质上它是一块单片机(功能不怎么强大的计算机),具备了接受信息处理信息的能力, ...

  4. 鸿蒙系统分享----软件驱动使用JS控制LED灯实验方法

    第一:鸿蒙系统环境搭建方法 1.BearPi-HM Micro ubuntu 镜像下载和虚拟机VMware Workstation 安装(虚拟机环境) 2.VS Code的安装和安装RaiDrive工 ...

  5. STM32驱动sg90舵机失败

    背景:        十月份参加学校举办的Robomaster校内赛,使用sg90舵机驱动机械臂夹取小球. 遇到问题:        使用STM32单片机的定时器输出PWM来驱动舵机,一直无法使舵机运 ...

  6. 基于STM32驱动SG90舵机

    1.舵机介绍 这边对SG90舵机进行一个简短的文字介绍: 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围,总间隔为2ms.脉冲的宽度将决定马达转动的距 ...

  7. 【STM32】基于F103C8T6和ESP01远程控制灯光开关(SG90舵机控制)

    先上实物! 视频演示 主控和配件选择 主控板选择经济实惠的c8t6,网络通信选择esp01,因为寝室使用不能更改电路,所以用一个sg90舵机来按点灯开关. 服务器 服务器使用自己搭建的emqx服务器, ...

  8. C51单片机定时器2实现SG90舵机控制

    谈起舵机最初的了解应用于航模,偶然的机会在网上看到有牛人使用多个舵机做人形机器人的关节,感觉这小东西很有趣,蒙发了买来学习学习的想法,这已经是多年前的事了,后来由于某些原因,这个想法直到今年才落地.小 ...

  9. 驱动——按键中断控制LED灯实验

    三个按键实现按键中断 要求:按键按一下灯亮,再按一下灯灭 注:由于开发板位置,为了方便一一对应观察,采用key1控制LED3,key2控制LED2,key3控制LED1 0.添加相关设备树节点信息 ① ...

最新文章

  1. MIME::Base64::encode格式
  2. hibernate查询之条件查询
  3. 【算法竞赛学习】资金流入流出预测-挑战Baseline_数据探索与分析1
  4. 【算法】Huffman编码(数据结构+算法)
  5. 2的负x次幂图像_数学| NO.2,3函数 T51
  6. sql机器学习服务_机器学习服务–在SQL Server中配置R服务
  7. svn关键字替换_SVN关键字替换示例
  8. extjs office java_Extjs使用(最最基础)
  9. 项目经理应具备的9种能力
  10. 初中英语语法(014)-现在完成时
  11. CCF NOI 2022获奖名单
  12. 李开复,活在AI与人群里
  13. C语言 :探究Char 到底是啥
  14. 百度分享不支持https的解决方案
  15. Mac电脑打开app,提示无法验证此App不包含恶意软件解决方法
  16. PS中矢量形状图层的合并交叉等运算
  17. 断网后parsec无法检测发现台式机设备的解决办法
  18. 绵阳计算机维修价格,绵阳台式电脑维修
  19. 22-07-14 西安 Git 分布式版本控制系统 、代码管理
  20. 程序人生--2000年(4)

热门文章

  1. 西门子plc博图与优傲UR机器人进行Profinet通讯,s7-1200/1500 与UR机器人通讯,实际应用案例使用中
  2. OracleOCP认证 之 Linux基础
  3. 线上测评图形题技巧一
  4. 吉米_王:乌班图下安装pycharm的方式
  5. 计算机语言不能用中文吗,为什么不能用中文来做编程呢?
  6. 微信小程序用户头像编辑上传
  7. linux su -含义,linux su命令详解步骤
  8. 【论文笔记】CIRNet:基于CycleGAN的无监督循环配准模型
  9. Android国际化多语言切换
  10. Gradle 学习 ----Gradle 进阶说明