本帖最后由 cih1996 于 2019-3-2 13:13 编辑
Esp8266接入天猫精灵智能家居控制开关灯
硬件需要的材料: 1.ESP8266模块(我这里是CP2102芯片) 2.继电器控制模块(不用也行,为了灯更亮,因为ESP8266是3.3V) 3.LED灯(把某宝买的USB灯剪断来用了) 4.天猫精灵一只
天猫精灵需要的材料: 1. 一个VPS服务器 2. 一个域名 3. OAuth2授权协议 4. Esp8266提交的数据处理
天猫精灵对接: 天猫经理官网有多种接入模式,智能家居这个模式比较复杂,如果用自定义模式的话,必须叫“天猫精英”“调用词”“意图名称”,太麻烦了。所以这里先讲一下使用智能家居的接入模式。
1.开始ESP8266代码的处理过程:
这是ESP8266的烧录代码,主要流程是,先连接到家里的WIFI,然后在LOOP处轮询获取网页数据,用于判断开关引脚,如下代码: (刚接触ESP8266才几天,如果代码写法规范有误,还望指正。)
[mw_shl_code=arduino,true]#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h>
#include <ESP8266HTTPClient.h>
#include <string.h>
#ifndef STASSID
#define STASSID "ChinaNet-zyd"
#define STAPSK "85913323"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
//切割字符串
String fenge2(String str,String p1,String p2)
{
int point1;
int point2;
point1 = str.indexOf(p1);
if(point1 == -1){return "";}
point2 = str.indexOf(p2,point1);
return str.substring(point1 + p1.length(),point2);
}
//初始化STA模式
void initSTA()
{
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
if (MDNS.begin("esp8266")) {
Serial.println("MDNS responder started");
}
}
void setup(void) {
//设定串口频率
Serial.begin(115200);
//设定WIFI模式
initSTA();
Serial.println("");
Serial.println("IP address: "+WiFi.localIP());
}
void loop(void) {
WiFiClient client;
HTTPClient http;
http.begin(client, "http://xxxx.com/aligenie/esp8266/client.php?method=state");
int httpCode = http.GET();
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
String Method = fenge2(payload,"method[","]");
if(Method=="pin")//控制引脚开关
{
String led = fenge2(payload,"led[","]");
String state = fenge2(payload,"state[","]");
Serial.println("pin:"+led+"->"+state);
pinMode(led.toInt(),OUTPUT);
digitalWrite(led.toInt(), state.toInt());
}
}
}
MDNS.update();
delay(1000);
}[/mw_shl_code]
以上主要是硬件代码,主要用于轮询读取该API: http://xxxx.com/aligenie/esp8266/client.php?method=state 返回示例:method[pin]led[2]state[1] 意思就是打开2引脚的高电平,这样就触发了继电器。
2.接下来是天猫精灵服务器端的代码部分,这里给出全部代码并做注释
代码结构说明: OAuth OAuth协议库,不用做任何改动 cnFrame 个人编写的一个小框架(plugin/config.php 数据库配置)
aligenie 天猫精灵的通讯文件夹目录 aligenieHand/aligenie.class.php 负责处理由天猫精灵发过来的指令(基本不需要做改动)
esp8266 主要是给esp8266模块读取的 client.php 给esp8266读取开关灯的数据
skillHandl.php 处理天猫精灵的响应数据 当我们收到TurnOn或TurnOff(由天猫发出)的指令后,直接CURL($cnNl->http)来访问client.php文件(起始也就是 esp8266/client.php 的文件)来修改数据,使得控制灯
3.服务器代码和硬件部分都可以了,下面是接入天猫的教程:
1.用淘宝绑定好天猫精灵后,用淘宝号登录进天猫精灵AliGenie开发者平台 2.新建技能,选择智能家居
注意,必须选智能家居,因为其他的我没试过,我只试过自定义的,需要加调用词。
3.在服务设置里,按照下面如下配置(除了域名换成自己的,其他的按照图片输入)
4.这里的Client ID和Client Secret请遵照
https://blog.csdn.net/xh870189248/article/details/85126364 进行配置(属于OAuth2的部分,因为涉及到数据库,这里就不另外详细讲解)
最后请看效果视频: http://v.douyin.com/Y7moDy/
私人技术交流群:
251129682
|