物联网智能家居?
硬件
- ESP 8266 12F WIFI 芯片
- SG90 舵机*2
- micro usb 数据线一根
- 杜邦线若干
- 充电宝(给芯片供电)
- 热熔胶(固定舵机等)
软件
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>
Servo myservo1; Servo myservo2; #include <Blinker.h>
char auth[] = "548fbd17b6d7"; char ssid[] = "ChinaNet-xxXx"; char pswd[] = "xxxxxxxx";
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同步到天猫精灵要时间
- 其他语音助手也可以
资料来源