1、介绍

  1、支持手机app远程控制
  2、支持小爱语音控制

2、成品展示

  话不多说,先看效果

点击查看app界面

点击查看成品效果

教程开始👻

3、材料清单

1、SG90或MG9S舵机一个(大概5-12元)
2、ESP8266串口wifi 无线模块 ESP-01、ESP-01S均可(5元左右)
3、烧录下载器(大概8-10元)
4、杜邦线 注意:需要用的是公对母(4元左右)
5、数据线 用手机的即可
6、电源模块可自行适配
7、无痕胶(可选)
方案可选:

直接插在一个充电器插头(比如手机充电器)上,然后插插座

直接插在充电宝上注意:部分充电宝无电源输出可能会自动关闭供电

可用充电电池加电源模块,比较麻烦

4、我的方案

1、SG90 (后悔了,一定要买一个好一点的舵机,可能是我的开关力度比较大,时不时会出现舵机转不动的情况!)
2、ESP8266串口wifi 无线模块 ESP-01S安信可
3、烧录下载器 这没什么好说的
4、杜邦线 公对母
5、手机数据线
6、电源模块我采用的是直接用插头插插座
7、无痕胶

5、软件安装配置

5.1 下载配置Arduino IDE

下载地址

  选择适合自己的版本下载即可

5.2 配置ESP8266开发环境

5.2.1 安装串口驱动

  ESP8266串口驱动大多是CH340CP2102CH9102,具体可在计算机管理界面查看端口处或直接看芯片,当然,直接问店家也行!
CH系列驱动下载官网,搜索具体型号之后在驱动与工具处下载,当然也可以直接下载我的。CH340密码:8oto CH9102密码:3ty4


CP系列驱动下载官网,因为我是CH9102,所以我就没有弄这个,可自行下载。
端口选择COM3或者COM5(后边连接后再p选择),具体端口号可在计算机管理界面查看端口。

5.2.2 安装ESP8266库

  ESP8266库的安装方式有两种,第一种是服务器下载,因其服务i其在国外,常规手段下载超慢;第二种方式时安装包下载。推荐使用安装包方式

服务器方式下载
  打开Arduino软件,进入首选项(Preferences),找到其他开发板管理器地址(Additional Board Manager URLs),添加 http://arduino.esp8266.com/stable/package_esp8266com_index.json,点击确定(OK)。

  点击工具-开发板-开发板管理器,进入开发板管理器界面,搜索esp8266下载。

  点击工具,按图片所示选择ESP-12 MoudleESP-12E Moudle

离线数据包方式下载
  离线数据包可以去Arduino中文社区下载,因为本次要用的是点灯科技的app,所以我用的是点灯科技的数据包。官方地址
当然,你也可以直接下载我的密码:ccrm,直接双击安装即可。

  点击工具,按图片所示选择ESP-12 MoudleESP-12E Moudle

5.2.3 下载点灯科技SDK

点击进入官方下载地址,点击下载Arduino(C++)
官方地址
下载后解压,直接复制粘贴到Arduino安装目录的libraries文件夹中


下载后解压,直接复制粘贴到Arduino安装目录的libraries文件夹中

最后如果文件-示例处出现Blinker,即证明已配置成功!

5.3 下载点灯科技app

密码:2o4v,密码关不掉,我也木滴办法!
  下载安装后注册登录,点击右上角 + 添加设备-独立设备-网络接入,此时会出出现一个key值,保存好这个key值,一会要用!

6、连线

  买到手的舵机是自带三根线的,分别是红、棕、橙三色,将自己买到的杜邦线选择三根颜色一样的对应连接,另外一头分别插在:红色:3v3橙色:IO0棕色:GND。如下图所示:

7、代码烧录

  回到Arduino IDE,点击文件-新建,粘贴以下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#include <dummy.h>

#define BLINKER_WIFI
#define BLINKER_MIOT_OUTLET
#include <Servo.h>
#include <Blinker.h>


char auth[] = "###"; // 点灯密匙key
char ssid[] = "###"; //wifi名称
char pswd[] = "###"; //wifi密码



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

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

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


//定义3个变量
int ran_max1, ran_min1, ran_mid1;
//小爱同学专属两个变量
int xa_mid1 = 110;
int xa_max1 = 15;

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

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

myservo.write(ran_max1); //写入滑块1 的角度 这个角度大小可以通过滑块1 来设置
//Blinker.vibrate(); //使手机震动
Blinker.delay(1000); //这个delay 一定要有 不然舵机转不过来,1000毫秒延迟
myservo.write(ran_mid1); //1000毫秒=1s后恢复到滑块3设置的角度,
Blinker.vibrate(); //使手机震动
}
void button2_callback(const String& state) {
BLINKER_LOG("get button state: ", state); //这个和上面的一样
myservo.write(ran_min1);
Blinker.vibrate();
Blinker.delay(1000);
myservo.write(ran_mid1);
Blinker.vibrate();
}


//小爱电源回调函数
//里面同样设置舵机的动作
void miotPowerState(const String& state) {
BLINKER_LOG("need set power state: ", state);
if (state == BLINKER_CMD_ON && ran_mid1 == 0 && ran_max1 == 0) { //先判断是否满足最大角度和中间角度为0,满足0度则是esp重启初始化了,默认使用所给的固定变量
myservo.write(xa_max1);
Blinker.delay(1000);
myservo.write(xa_mid1);
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
} else if (state == BLINKER_CMD_ON) { //上面条件不满足就是我在点灯设置了角度,重新判断是否为开,并按照点灯的数据来设置
// digitalWrite(LED_BUILTIN, HIGH);
myservo.write(ran_max1); //写入滑块1 的角度 这个角度大小可以通过滑块1 来设置
Blinker.delay(1000); //这个delay 一定要有 不然舵机转不过来
myservo.write(ran_mid1); //1s后恢复到滑块3设置的角度,
BlinkerMIOT.powerState("on");
BlinkerMIOT.print();
} else if (state == BLINKER_CMD_OFF && ran_mid1 == 0 && ran_max1 == 0) { //判断是否为关并且两个角度是否为0
myservo.write(ran_min1);
Blinker.delay(1000);
myservo.write(xa_mid1); //为0就使用小爱的默认固定中间角度变量
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
} else if (state == BLINKER_CMD_OFF) {
// digitalWrite(LED_BUILTIN, LOW);
myservo.write(ran_min1);
Blinker.delay(1000);
myservo.write(ran_mid1);
BlinkerMIOT.powerState("off");
BlinkerMIOT.print();
}
}


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(BlinkerTime);
Blinker.print("millis", BlinkerTime);
}


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

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

void slider3_callback(int32_t value) //中间角度滑动条
{
ran_mid1 = value;
myservo.write(ran_mid1); //打印输出滑条角度设置数据
//Blinker.vibrate(); //使手机震动
Blinker.delay(1000);
BLINKER_LOG("get slider value: ", value);
}


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

Serial.begin(115200);
Blinker.begin(auth, ssid, pswd);

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


Slider1.attach(slider1_callback);
Slider2.attach(slider2_callback);
Slider3.attach(slider3_callback);

myservo.attach(0); //定义舵机连接的引脚
pinMode(LED_BUILTIN, OUTPUT); //定义灯引脚

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

void loop() {

Blinker.run(); //*每次运行都会将设备收到的数据进行一次解析。
//digitalWrite(LED_BUILTIN, HIGH); //不要亮灯把这个删掉
//digitalWrite(LED_BUILTIN, LOW); //不要亮灯把这个删掉
}

//blink app 界面配置代码复制到app里面即可
//{¨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´|÷}

  需要更改的地方有三处,不要出现中文
1
2
3
char auth[] = "###";   //key
char ssid[] = "###"; //wifi名称
char pswd[] = "###"; //wifi密码

  点击烧录,写入程序,这里我没有连接就不放图了。

8、配置点灯科技app

  选择刚刚新建的设备,点击开始使用(如果不是第一次没有这个)-右上角三个点-界面配置

  粘贴如下代码,确定即可。

1
{¨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´|÷}

  此时你会发现已经有按钮了,按钮角度参数根据自己实际情况调整,如果不习惯这个界面,可自行创建!

9、小爱同学配置

  多数手机频频均可下载小爱同学app,实测时没有问题的,因为我的目前的手机不是小米的,也不喜欢用小爱语音控制,就卸载了小爱同学,这里就不放图介绍了,简单来说绑定第三方点灯科技后导入即可。

到这里,那么恭喜啦,偷懒小能手功法又精进啦!👻