esp8266接入天猫精灵开关灯详细教程与全部代码开源-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24117|回复: 6

esp8266接入天猫精灵开关灯详细教程与全部代码开源

[复制链接]
发表于 2019-3-2 13:11 | 显示全部楼层 |阅读模式
本帖最后由 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.接下来是天猫精灵服务器端的代码部分,这里给出全部代码并做注释
天猫精灵WEB.rar (107.75 KB, 下载次数: 406)

代码结构说明:
OAuth       OAuth协议库,不用做任何改动
cnFrame    个人编写的一个小框架(plugin/config.php 数据库配置)

aligenie    天猫精灵的通讯文件夹目录
      aligenieHand/aligenie.class.php        负责处理由天猫精灵发过来的指令(基本不需要做改动)

esp8266    主要是给esp8266模块读取的
      client.php     给esp8266读取开关灯的数据

skillHandl.php     处理天猫精灵的响应数据
QQ截图20190302125545.jpg
当我们收到TurnOn或TurnOff(由天猫发出)的指令后,直接CURL($cnNl->http)来访问client.php文件(起始也就是 esp8266/client.php 的文件)来修改数据,使得控制灯



3.服务器代码和硬件部分都可以了,下面是接入天猫的教程:

1.用淘宝绑定好天猫精灵后,用淘宝号登录进天猫精灵AliGenie开发者平台
2.新建技能,选择智能家居

1.jpg
注意,必须选智能家居,因为其他的我没试过,我只试过自定义的,需要加调用词。



3.在服务设置里,按照下面如下配置(除了域名换成自己的,其他的按照图片输入)
12.jpg


4.这里的Client ID和Client Secret请遵照

https://blog.csdn.net/xh870189248/article/details/85126364 进行配置(属于OAuth2的部分,因为涉及到数据库,这里就不另外详细讲解)




最后请看效果视频:
http://v.douyin.com/Y7moDy/
私人技术交流群:
251129682




发表于 2019-3-27 02:37 | 显示全部楼层
开发者网关地址

这个怎么填?

5555.png
发表于 2019-9-6 13:18 来自手机 | 显示全部楼层
代码里怎么没有gata.php
发表于 2020-1-17 17:13 | 显示全部楼层
你好,大哥,想付费请你帮我调试一下天猫的后台,我的qq  2098574144  你可以家我,备注天猫就行了。服务器我已经搭建了,php的,ssl证书也有了。linux系统,mysql数据库。
发表于 2020-7-25 22:05 来自手机 | 显示全部楼层
来学习,家里正好有天猫精灵,有时间试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 08:49 , Processed in 0.343626 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表