查看: 605|回复: 2

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才几天,如果代码写法规范有误,还望指正。)

kittenblock中小学创客名师推荐的图形化编程软件

#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);
}


以上主要是硬件代码,主要用于轮询读取该API:
http://xxxx.com/aligenie/esp8266/client.php?method=state
返回示例:method[pin]led[2]state[1]
意思就是打开2引脚的高电平,这样就触发了继电器。


2.接下来是天猫精灵服务器端的代码部分,这里给出全部代码并做注释
天猫精灵WEB.rar (107.75 KB, 下载次数: 13)
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

热门推荐

BlinkerAT固件不能用
BlinkerAT固件不能用
如图,在配网的时候就卡住了,再发指令就没用了,固件和库都是今天刚下载的,以前的也不好
为什么这个库已经装好了可是在调用的时候却没有显示
为什么这个库已经装好了可
为什么这个库已经装好了可是在调用的时候却没有显示求解决
UART 传输(字符)不稳定,如何解决数据错位和乱码的情况
UART 传输(字符)不稳定
求助大家,我正在写一个 UART 传输多组数据的项目,想要将一端 Arduino 的多组数据通
请问这是什么板子?
请问这是什么板子?
如图,两年前比赛学校发的,但网上找不到资料,现在翻出来,想问问有人知道它怎么用吗
【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
【原创】 drawbot平面关节
这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
快速回复 返回顶部 返回列表