贝壳物联子设备 实现天猫精灵对ESP8266四路继电器的单路控制

作者:1197994757 | 更新时间:2019-07-12 | 浏览量:4807

这是一个不错的想法... ( 你怎么知道的?)

     这里我只写贝壳物联子设备的使用和“kaiguan.lua"的具体代码
详细教程比如使用的软件啊下载操作啊还有"init.lua" 我就不贴出来了,都一样的。不会的看参考教程
参考链接 
https://www.bigiot.net/help/20.html
https://blog.csdn.net/qq_33508087/article/details/82925995
https://www.bigiot.net/talk/927.html
 萌新看这三篇够了
 老司机直接开始
开始
 1.  添加设备 
    
 
    2. 点击编辑并将设备类型设置为万能遥控器保存


   
  

  3. 添加接口 保存

  


4.添加子设备 要添加四个(当然你要控制几路就添加几个),注意父设备的一致   保存





5. OK  接下来打开 "kaiguan.lua" 把里面的代码全删了, 把下面的代码复制上去。
DEVICEID = "12046" 
APIKEY   = "6870b391e"
INPUTID  = "10945"
host     = host or "www.bigiot.net"
port     = port or 8181
LED      = 5
LED1     = 6
LED2     = 7
LED3     = 1
gpio.mode(LED,gpio.OUTPUT)
gpio.mode(LED1,gpio.OUTPUT)
gpio.mode(LED2,gpio.OUTPUT)
gpio.mode(LED3,gpio.OUTPUT)
local function run()
  local cu = net.createConnection(net.TCP)
  cu:on("receive", function(cu, c) 
    print(c)
    r = cjson.decode(c)
    if r.M == "say" then
        if r.C == "play" and r.S =="D258" or r.C == "play1" then   
        gpio.write(LED, gpio.HIGH)  
        ok, played = pcall(cjson.encode, {M="say",ID=r.ID,C="LED turn on!"})
        cu:send( played.."\n" )
      end
    if r.C == "play" and r.S =="D259" or r.C == "play2" then   
          gpio.write(LED1, gpio.HIGH)  
          ok, played = pcall(cjson.encode, {M="say",ID=r.ID,C="LED1 turn on!"})
        cu:send( played.."\n" )
      end 
    if r.C == "play" and r.S =="D260" or r.C == "play3" then   
        gpio.write(LED2, gpio.HIGH)  
          ok, played = pcall(cjson.encode, {M="say",ID=r.ID,C="LED2 turn on!"})
        cu:send( played.."\n" )
      end
    if r.C == "play" and r.S =="D261" or r.C == "play4" then   
         gpio.write(LED3, gpio.HIGH)  
         ok, played = pcall(cjson.encode, {M="say",ID=r.ID,C="LED3 turn on!"})
        cu:send( played.."\n" )
      end
    if r.C == "stop" and r.S =="D258" or r.C == "stop1" then   
        gpio.write(LED, gpio.LOW)
        ok, stoped = pcall(cjson.encode, {M="say",ID=r.ID,C="LED turn off!"})
        cu:send( stoped.."\n" ) 
      end
    if r.C == "stop" and r.S =="D259" or r.C == "stop2" then   
          gpio.write(LED1, gpio.LOW)
          ok, stoped = pcall(cjson.encode, {M="say",ID=r.ID,C="LED1 turn off!"})
        cu:send( stoped.."\n" ) 
      end
    if r.C == "stop" and r.S =="D260" or r.C == "stop3" then   
        gpio.write(LED2, gpio.LOW)
          ok, stoped = pcall(cjson.encode, {M="say",ID=r.ID,C="LED2 turn off!"})
        cu:send( stoped.."\n" ) 
      end
    if r.C == "stop" and r.S =="D261" or r.C == "stop4" then   
        gpio.write(LED3, gpio.LOW)
        ok, stoped = pcall(cjson.encode, {M="say",ID=r.ID,C="LED3 turn off!"})
        cu:send( stoped.."\n" ) 
      end
    end
  end)
  cu:on('disconnection',function(scu)
    cu = nil
    --停止心跳包发送定时器,5秒后重试
    tmr.stop(1)
    tmr.alarm(6, 5000, 0, run)
  end)
  cu:connect(port, host)
  ok, s = pcall(cjson.encode, {M="checkin",ID=DEVICEID,K=APIKEY})
  if ok then
    print(s)
  else
    print("failed to encode!")
  end
  cu:send(s.."\n")
  tmr.alarm(1, 60000, 1, function()
    cu:send(s.."\n")
  end)
end
run()

6.修改代码

   代码前三行写你的  (LED 5 6 7 1 对应 ESP8266的  12 13 14  5  引脚 ,懂的自行修改)

将 “ if r.C == "play" and r.S =="D258" or r.C == "play1" then   ”里的258修改为你的子设备ID  我的对应插座一 

一样其余三个对应你的子设备ID修改

if r.C == "stop" and r.S =="D258" or r.C == "stop1" then   这个关的同理 也改好

7.改好 并下载到 ESP8266

   

 

8.复位或重启  去贝壳物联设备列表刷新看看设备有没有上线 (要好一会才能刷新出来) 

好吧 我这个号被禁止登录    没图了

 

----------------------------------------------------------------------

上线了试一下   设备对话--发送命令  play1   如果有返回数据就是正常了 

9.天猫精灵绑定贝壳物联 并刷新 看到四个插座后 就可以让猫精独立控制ESP 四路继电器了(可以用万用表测一下ESP 12  13  14   5  脚的电平)

因为是我的小号  所以不打码了 好让你们看清我的思路   这是重点  如果没有成功就看代码了解我的思路自己改去

sad我需要经验+1   我的子设备不够用没法继续折腾了crying 看完了回复一下吧sad我需要经验+1 sad


评论:共34条

贝壳物联 评论于:2019-07-13 19:05:12
多谢分享。
不磊哥 评论于:2019-07-13 22:32:59
原来如此,确实学到了
未来加油 评论于:2019-07-13 22:38:31
还有很多功能等大师们挖掘啊。按键那里程序不知道怎么写,就是使用一个按键控制开和关的功能,并同步返回。
1197994757 回复于:2019-07-14 15:18:38
回复 @未来加油:这个需要贝壳物联支持才行
未来加油 回复于:2019-07-15 11:52:28
回复 @1197994757:很多东西都是支持的。贝壳只要负责一个数据。还是可以从程序上下手做的。
1197994757 评论于:2019-07-15 21:03:02
可以参考其他东西的按键代码
17614713123 评论于:2019-07-17 19:45:48
我为什么下载进去就能控制一路
1197994757 回复于:2019-07-17 20:38:03
回复 @17614713123:那一路能控制呢?
贝壳物联 回复于:2019-08-09 16:15:27
回复 @17614713123:父设备设置为万能遥控器,才能加载出下面的子设备
17614713123 回复于:2019-08-09 19:56:46
回复 @贝壳物联:好的谢谢
蚌埠老梁 评论于:2019-07-18 22:03:09
貌似你是第一个教程控制子设备的 感谢分享
zhutr99 评论于:2019-08-08 10:58:51
现在好像天猫精灵不能添加子设备了,只认得主设备,天猫精灵发过来的代码也不像能支持子设备的样子,网络接收:{"M":"say","ID":"U8696","C":"play","SIGN":"Aligenie","T":"1565232966"}
有人能解决咩,我是用STM32加ESP8266透传实现的
zhutr99 评论于:2019-08-08 11:01:19
感觉像是贝壳平台不支持了,花了三天时间刚实现,难道又要转战阿里云平台吗???
贝壳物联 回复于:2019-08-09 16:14:40
回复 @zhutr99:父设备的设备类型设置为 万能遥控器,才会显示出子设备。
zhutr99 评论于:2019-08-12 16:01:29
十分感谢,已经在QQ上看到回复并实现了子设备了
铜cj 评论于:2019-08-26 16:33:14
ESP8266 lua开发 GPIO操作详解
http://www.51hei.com/bbs/dpj-140394-1.html
(出处: 单片机论坛)
GPIO 对应的数字。(参照 来自黑51论坛里面的大神)
17806253798 评论于:2019-09-12 20:47:56
LED 5 6 7 1 为什么对应 ESP8266的 12 13 14 5 引脚?
我这么接的灯没有反应?
1197994757 回复于:2019-09-12 22:47:52
回复 @17806253798:测一下电平是否有变化
ASUS124 评论于:2019-09-25 17:12:05
这个是单独控制的还是一起控制的,还有play2~4这个对应手机遥控那个键?本人小白,刚进来1天
Brant 评论于:2019-10-07 23:30:14
学习了,非常感谢
unison 评论于:2019-10-13 02:09:16
只能单路控制吗,有什么办法能双路控制,也可以关闭它
公元0001 评论于:2019-11-12 16:51:20
链接wifi的程序要自己加上去吗
公元0001 评论于:2019-11-20 14:09:57
掉线怎么自动重连
1197994757 回复于:2020-04-11 11:52:40
回复 @公元0001:关于掉线重连 最后那几行代码改成这样 如果你家网像我一样每24小时断线一次可以设置路由器自动重拨 +定时重启
cu:on('disconnection',function(scu)
--停止心跳包发送定时器,5秒后重试
tmr.delay(60000)
node.restart()--暴力重启
end)
cu:connect(port, host)
ok, s = pcall(cjson.encode, {M="checkin",ID=DEVICEID,K=APIKEY})
if ok then
print(s)
else
print("failed to encode!")
end
cu:send(s.."\n")
tmr.alarm(1, 40000, 1, function()
cu:send(s.."\n")
end)
end
run()
jayshitou 评论于:2019-11-22 20:58:48
掉线怎么自动重连+1
1197994757 回复于:2020-04-11 11:52:28
回复 @jayshitou:关于掉线重连 最后那几行代码改成这样 如果你家网像我一样每24小时断线一次可以设置路由器自动重拨 +定时重启
cu:on('disconnection',function(scu)
--停止心跳包发送定时器,5秒后重试
tmr.delay(60000)
node.restart()--暴力重启
end)
cu:connect(port, host)
ok, s = pcall(cjson.encode, {M="checkin",ID=DEVICEID,K=APIKEY})
if ok then
print(s)
else
print("failed to encode!")
end
cu:send(s.."\n")
tmr.alarm(1, 40000, 1, function()
cu:send(s.."\n")
end)
end
run()
njzc0232 评论于:2020-01-06 17:07:21
掉线怎么自动重连
njzc0232 评论于:2020-01-06 17:08:05
掉线怎么自动重连
njzc0232 评论于:2020-01-06 17:10:43
掉线怎么自动重连
1197994757 回复于:2020-04-11 11:52:13
回复 @njzc0232:关于掉线重连 最后那几行代码改成这样 如果你家网像我一样每24小时断线一次可以设置路由器自动重拨 +定时重启
cu:on('disconnection',function(scu)
--停止心跳包发送定时器,5秒后重试
tmr.delay(60000)
node.restart()--暴力重启
end)
cu:connect(port, host)
ok, s = pcall(cjson.encode, {M="checkin",ID=DEVICEID,K=APIKEY})
if ok then
print(s)
else
print("failed to encode!")
end
cu:send(s.."\n")
tmr.alarm(1, 40000, 1, function()
cu:send(s.."\n")
end)
end
run()
shuxiansheng 评论于:2020-03-03 21:06:00
cjson没有定制
E-niu 评论于:2020-12-16 00:22:07
子设备如何在小程序内控制呢
deng 评论于:2020-12-20 14:17:52
做成功的,能否教授一下,我照着搬过来,最终实现不了,还有哪里要改的吗?求加969439474
deng 评论于:2020-12-20 18:35:47
搬过去后一直在重连
返回顶部