标题: ESP8266用Arduino IDE通过贝壳物联接入天猫,可以小程序,和语音控制 [打印本页]

作者: xuzuxiong    时间: 2019-9-4 14:49
标题: ESP8266用Arduino IDE通过贝壳物联接入天猫,可以小程序,和语音控制
       物联网没有服务器是不行的,那只能叫局域网。今天写一下通过贝壳物联怎么打造属于自己的智能开关。首先说一下要备一片8266的模块,推荐ESP826  NodeMCU   因为这个比很方便一条安卓USB数据线就可以了。 其次是在贝壳物联注册一个账号,网址是   www点bigiot点net 然后添加智能设备,添加完成后你会得到设备的ID 和密码  。这些准备好了以后你还得有Arduino IDE,添加8266的开发环境这个网上有很多教程。不会的自己百度一下。接下来就是代码:
#include <ESP8266WiFi.h>#include <aJSON.h>
//=============  此处必须修该============
String DEVICEID="*****";//你的设备编号==改成你贝壳物联里智能设备的ID
String APIKEY="*****";//设备密码==改成你贝壳物联里智能设备的密码
const char* ssid="CMCC-hkws";//WiFi名称  你的WIFI名称
const char* password="147258369";//WiFi密码 你的WIFI密码
//=======================================
#define OUT 2//输出控制继电器端口
//=======================================
unsigned long lastCheckInTime=0;//记录上次报到时间
const unsigned long postingInterval=40000;//每隔40秒向服务器报到一次
const char* host="www点bigiot点net";
const int httpPort=8181;
WiFiClient client;
void setup()
{
  pinMode(OUT,OUTPUT);//设置输出
  digitalWrite(OUT,LOW);//上电打开输出
  pinMode(LED_BUILTIN,OUTPUT);//设备板载LED输出模式
  digitalWrite(LED_BUILTIN,HIGH);//关闭LED
  Serial.begin(115200);
  Serial.println();
  Serial.println();
  WiFi.begin(ssid,password);//连接WiFi  
  while(WiFi.status()!= WL_CONNECTED)//等待WiFi连接成功
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
}
void loop()
{  
  // Use WiFiClient class to create TCP connections
  if(!client.connected())
  {
    if(!client.connect(host, httpPort))
    {
      Serial.println("connection failed");
      delay(5000);
      return;
    }
  }
  if(millis()-lastCheckInTime>postingInterval||lastCheckInTime==0)
    checkIn();

  // Read all the lines of the reply from server and print them to Serial
  if (client.available())
  {
    String inputString=client.readStringUntil('\n');
    inputString.trim();
    Serial.println(inputString);
    int len=inputString.length()+1;
    if(inputString.startsWith("{") && inputString.endsWith("}"))
    {
      char jsonString[len];
      inputString.toCharArray(jsonString,len);
      aJsonObject *msg = aJson.parse(jsonString);
      processMessage(msg);
      aJson.deleteItem(msg);         
    }
  }
}
void processMessage(aJsonObject *msg)
{
  aJsonObject* method=aJson.getObjectItem(msg,"M");
  aJsonObject* content=aJson.getObjectItem(msg,"C");     
  aJsonObject* client_id=aJson.getObjectItem(msg,"ID");
  if(!method)
    return;
  String M=method->valuestring;
  if(M=="say")
  {  
    String C=content->valuestring;
    String F_C_ID=client_id->valuestring;
    digitalWrite(LED_BUILTIN,LOW);//接收到指令就闪一下LED
    delay(50);
    digitalWrite(LED_BUILTIN,HIGH);
    if(C=="stop")                                     //接收到的是停止指令
    {
      digitalWrite(OUT,HIGH);//关闭
      sayToClient(F_C_ID,"LED All off!");        
    }

  if(C=="play")                                   //接收到的是停止指令//接收到的不是停止指令
    {
      digitalWrite(OUT,LOW);//打开
      sayToClient(F_C_ID,"LED All on!");   
    }
  }
}
void checkIn()
{
  String msg="{\"M\":\"checkin\",\"ID\":\"" + DEVICEID + "\",\"K\":\"" + APIKEY + "\"}\n";
  client.print(msg);
  lastCheckInTime=millis();
}
void sayToClient(String client_id, String content)
{
  String msg="{\"M\":\"say\",\"ID\":\"" + client_id + "\",\"C\":\"" + content + "\"}\n";
  client.print(msg);
  lastCheckInTime=millis();
}

需要修改为你的设备的信息和你的WIFI信息 编译下载到8266串口打赢信息如下




1567579667(1).png (99.84 KB, 下载次数: 288)

8266 NodeMCU

8266 NodeMCU

1567580085(1).png (17.65 KB, 下载次数: 295)

智能设备添加后

智能设备添加后

作者: xuzuxiong    时间: 2019-9-4 15:11
本帖最后由 xuzuxiong 于 2019-9-4 18:08 编辑

接下来手机微信搜索下程序贝壳物联你就可以通过微信小程序空你的8266的IO口状态了。如果有天猫精灵的朋友,在精灵APP里面搜索贝壳物联,然后授权给天猫精灵,在设置好你的设备的名字就完成了语音配置,很简单的因为都不需要你去做逻辑和对接,所有的业务逻辑贝壳物联都做好了。
作者: xuzuxiong    时间: 2019-9-4 15:13
还有这个有个库可能很多朋友找不到,我把它发上来   #include <aJSON.h>
这个库必须的有才行

aJson.zip

21.64 KB, 下载次数: 222, 下载积分: 黑币 -5


作者: 林哈哈    时间: 2019-9-27 16:24
楼主,问一下,接入天猫精灵后 ,如果贝壳物联里只有一个设备,但是我要控制3个地方的灯,天猫精灵也可以做到吗?还是一个设备只能控制一个灯?
作者: mcusir    时间: 2019-11-12 20:40
楼主的附件下载不到啊!

作者: mcusir    时间: 2019-11-12 20:53
楼主好像用的不是Arduino IDE上兼容的代码
作者: wgzh0026    时间: 2019-11-30 10:35
还没理顺好,下载后不能用,
作者: zmc419    时间: 2019-12-9 09:38
拷贝代码编译通不过,请上编译过得Arduino文件
作者: ebeeb    时间: 2020-3-1 18:42
谢谢楼主,下载试试
作者: 要你蛋炒饭    时间: 2020-3-3 12:24
好像这个网站更新有点慢,还停留在2018.2019上
作者: 1519810852    时间: 2020-3-25 19:32
你好,方便加个好友吗?想向你请教一下969439474@qq.com
作者: cwt    时间: 2020-4-9 20:47
为什么我语音回答是对的,但是就是控制没反应,继电器也是可以的,想请教下

作者: cwt    时间: 2020-4-9 21:31
你好,楼主请教下,为什么你这个程序下进去了。语音控制对答也对的,为什么灯就是没有反应呀。加个好友可以吗?124839965

作者: XBBL    时间: 2020-5-19 01:07
谢谢大佬的代码,但是有好多问题
作者: 121131151    时间: 2020-8-6 23:52
#define OUT 2 是gpio2 ?
作者: 121131151    时间: 2020-8-8 09:43
请问楼主,下载的ajson,能不能给个说明书之类的,能不能当作一个类?
作者: 可可分享    时间: 2020-8-13 16:43
121131151 发表于 2020-8-8 09:43
请问楼主,下载的ajson,能不能给个说明书之类的,能不能当作一个类?

直接下载解压到库文件夹里就可以了要不然编译不了
作者: lekeak47    时间: 2020-10-2 19:05
这资料好啊~!简单明了,不像有的还要各种环境,编译之类的
作者: xuzuxiong    时间: 2021-1-17 20:23
补全代码补充链接
作者: cr8526    时间: 2021-1-28 09:14
可以控制扫地机吗?

作者: room07    时间: 2021-1-28 23:36
網上找不到,可否我把它发上来   <esp8626.h>
作者: Highnose    时间: 2021-1-29 09:41
请问 可有反馈? 怎么知道 服务器已经收到信息?
作者: hhdsdy    时间: 2021-1-30 00:00
本帖最后由 hhdsdy 于 2021-1-30 09:27 编辑

这个不需要下载的,但是需要下载8266的支持文件,下载链接这是回复21楼的,忘了在他的帖子下点回复,编辑一下

作者: room07    时间: 2021-1-31 14:56
hhdsdy 发表于 2021-1-30 00:00
这个不需要下载的,但是需要下载8266的支持文件,下载链接这是回复21楼的,忘了在他的帖子下点回复,编辑一 ...

謝謝幫忙
作者: jiangyou    时间: 2021-8-10 13:13
楼主好像用的不是Arduino IDE上兼容的代码

作者: xuzuxiong    时间: 2022-2-11 23:34
这个确实是Arduino IDE上兼容的代码,不过我好久都没有用了,现在转到HA (homeassitant)上面了,自动化更强大的系统。在HA论坛有一些帖子。

作者: lanxichang    时间: 2022-5-23 15:02
反馈信息里最后是K:15:00:20.506 -> {"M":"token","ID":"26899","K":"02520404687f13e10960086a4dbcff98"}怎么回事呢? 联不上网




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1