ESP8266+点灯科技+天猫精灵+舵机 实现语音控制灯光开关

物联网智能家居?

 

硬件

  • ESP 8266 12F WIFI 芯片
  • SG90 舵机*2
  • micro usb 数据线一根
  • 杜邦线若干
  • 充电宝(给芯片供电)
  • 热熔胶(固定舵机等)

 

软件

  • Arduino
  • blinker(手机App)
  • 天猫精灵(手机App)

 

blinker设置

  • 打开blinker-->添加设备-->独立设备-->网络接入-->阿里云-->复制key
  • 返回我的设备-->新的设备-->设置-->修改设备名和图标

 

天猫精灵设置

  绑定点灯科技账号:我的-->智能家居管理-->搜索绑定blinker

 

esp8266烧录

esp8266 驱动安装

  CH340驱动安装, 不然显示不出端口,在设备管理器里能看到端口

 

Ardunio添加开发板管理网址

  文件-->首选项-->设置-->附件开发板管理器网址 添加https://www.arduino.cn/package_esp8266com_index.json

 

Ardunio开发板管理器添加esp8266

  工具-->开发板-->开发板管理器-->搜索安装esp8266

 

Ardunio安装blinker库文件

  工具-->库管理-->搜索安装blinker

 

Ardunio代码编写

  • 同时使用两个舵机来控制开关
  • char auth[] = "548fbd17b6d7" 填入blinker里复制的key
  • myservo1.attach(D0) 意思是用D0作为舵机1的控制信号线; myservo2.attach(D1) 意思是用D1作为舵机2的控制信号线
  • 舵机旋转角度需要根据安装舵机位置自己调节
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
#define BLINKER_WIFI
#define BLINKER_ALIGENIE_OUTLET
#include <Servo.h>

// #define PIN_SERVO D0 //舵机信号线

Servo myservo1;
Servo myservo2;

#include <Blinker.h>

char auth[] = "548fbd17b6d7"; // key
char ssid[] = "ChinaNet-xxXx"; // wifi name
char pswd[] = "xxxxxxxx"; // wifi passpord

bool oState = false;

void aligeniePowerState(const String & state)
{
BLINKER_LOG("need set power state: ", state);

myservo1.attach(D0);
myservo2.attach(D1);

if (state == BLINKER_CMD_ON) {
myservo1.write(48);//舵机正转度数
myservo2.write(60);
delay(1000);

BlinkerAliGenie.powerState("on");
BlinkerAliGenie.print();

oState = true;
}
else if (state == BLINKER_CMD_OFF) {

myservo1.write(-48);//舵机反转度数
myservo2.write(-60);
delay(1000);

BlinkerAliGenie.powerState("off");
BlinkerAliGenie.print();

oState = false;
}
}

void aligenieQuery(int32_t queryCode)
{
BLINKER_LOG("AliGenie Query codes: ", queryCode);

switch (queryCode)
{
case BLINKER_CMD_QUERY_ALL_NUMBER :
BLINKER_LOG("AliGenie Query All");
BlinkerAliGenie.powerState(oState ? "on" : "off");
BlinkerAliGenie.print();
break;
case BLINKER_CMD_QUERY_POWERSTATE_NUMBER :
BLINKER_LOG("AliGenie Query Power State");
BlinkerAliGenie.powerState(oState ? "on" : "off");
BlinkerAliGenie.print();
break;
default :
BlinkerAliGenie.powerState(oState ? "on" : "off");
BlinkerAliGenie.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, LOW);

Blinker.begin(auth, ssid, pswd);
Blinker.attachData(dataRead);

BlinkerAliGenie.attachPowerState(aligeniePowerState);
BlinkerAliGenie.attachQuery(aligenieQuery);
}

void loop()
{
Blinker.run();
}

 

Ardunio代码烧录

  • 将esp8266用micro usb 数据线连接电脑
  • 工具-->开发板-->选 NodeMcu 0.9
  • 工具-->端口-->根据8266端口号码选择
  • 点击Ardunio左上角箭头图标,编译上传到esp8266芯片
  • 上传成功后,芯片蓝色led转为常亮状态

 

esp8266连接舵机与最后安装调试

舵机接线

  两舵机橙色分别接D0和1,红色接VV或者3V,棕色接G

 

安装固定舵机

  用热熔胶固定舵机,用充电宝给8266供电

 

语音控制

 

改进测试

  • 可支持多台设备
  • 网络有延迟:blinker同步到天猫精灵要时间
  • 其他语音助手也可以

 

资料来源