极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: chzhewl

DIY智能家居和乐联网开放平台对接(arduino+zigbee+openwrt)

  [复制链接]
发表于 2013-7-25 19:33:35 | 显示全部楼层
文章真不错,很佩服楼主的动手精神,系统很强大,期待看到楼主的github学习学习^_^。
现在为了省着拆路由,使用树莓派这个方案和楼主想到一块去了. 在树莓派上用python做个服务器进行管理。
看楼主用的是android,不知道有没有http://www.prowlapp.com/  这类推送软件,要不然可以在python上做事件触发判断,触发后以发送邮件的形式,消息就可以推送到手机上了。
回复 支持 反对

使用道具 举报

发表于 2013-7-25 19:51:12 | 显示全部楼层
还有一个小提议是,可以考虑在每个开关插线板上再装上一个红外小接收头,在家里的时候,拿着遥控器开关控制,这样不用去找手机,来的快。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-26 11:30:17 | 显示全部楼层
本帖最后由 chzhewl 于 2013-7-26 11:47 编辑
ogre_c 发表于 2013-7-25 19:51
还有一个小提议是,可以考虑在每个开关插线板上再装上一个红外小接收头,在家里的时候,拿着遥控器开关控制 ...


内部否认你的红外提议,你的提议方向很对,我总了以下几点:
1.使用事实证明手控制在家里并没想象的那么麻烦,我这个控制页面是网页实现的,只要手边一台能访问网页的设备的都可以实现控制,比如手机,ipad,pc等.
2.使用红外遥控器有一定的局限性(无法穿墙,必顺对着被遥控设备),比如控制热水器的设备是安装在洗手间里面的,在客厅使用红外肯定没法控制.
3.如果真正想方便的话,我认为在家里时单独设计一台类似于遥控器那种操作方式的设备,使用无线通讯,简单点下屏幕或按下按键就可以实现控制.
4.如果今后非特定语音控制技术成熟的话,使用语音控制会更加方便
回复 支持 反对

使用道具 举报

发表于 2013-7-26 11:58:48 | 显示全部楼层
chzhewl 发表于 2013-7-26 11:30
内部否认你的红外提议,你的提议方向很对,我总了以下几点:
1.使用事实证明手控制在家里并没想象的那 ...

另外,卓万的zigbee怎么样,稳定不,在家里能穿墙不?设备重启后,串口还能正常通讯吧?   今儿又想起个小建议是,可以考虑加个语音模块在路由上,开关命令发出,还有个响动,看上去像钢铁侠助手似的。
回复 支持 反对

使用道具 举报

发表于 2013-7-26 12:39:12 | 显示全部楼层
紧跟楼主步伐~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-26 13:02:42 | 显示全部楼层
本帖最后由 chzhewl 于 2013-7-26 13:11 编辑
ogre_c 发表于 2013-7-26 11:58
另外,卓万的zigbee怎么样,稳定不,在家里能穿墙不?设备重启后,串口还能正常通讯吧?   今儿又想起个小 ...


使用中感觉这款zigbee 还是不错的, 在家里隔两堵墙也可以用,重启后可以迅速进入网络. 很稳定.至今未发现问题, 卖家的淘宝店上还有一款号称高功率1.6公里的模块, 准备有时间入手试一下. 语音模块真是想到一块去了  在淘宝上发现了一款非特定语音识别的模块,地址: http://item.taobao.com/item.htm?spm=a230r.1.14.8.zCe9YK&id=14012089456&_u=q245ujt00d4   看评价还不错,也准备有时间入手玩玩呢. 如果你有这方面的资源一起交流下.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-26 13:03:06 | 显示全部楼层
linkkl 发表于 2013-7-26 12:39
紧跟楼主步伐~

感谢支持
回复 支持 反对

使用道具 举报

发表于 2013-7-26 14:38:00 | 显示全部楼层
chzhewl 发表于 2013-7-26 13:03
感谢支持

谢谢你的分享才对{:2_33:}学习了
回复 支持 反对

使用道具 举报

发表于 2013-7-26 14:43:01 | 显示全部楼层
chzhewl 发表于 2013-7-26 13:02
使用中感觉这款zigbee 还是不错的, 在家里隔两堵墙也可以用,重启后可以迅速进入网络. 很稳定.至今未发现 ...

嗯,不错,购买时是买的1个主机(协调器),几个路由的方案吗? 还是别的? 他家的zigbee没用过,不太了解。语音模块,之前想买这款来着:http://item.taobao.com/item.htm?spm=a1z10.1.w4004-1912740700.43.1x4yEO&id=25039504519  主要看着挺小巧的,听过例子音频,感觉还行。我现在是用的树莓派,跑的下边这个python角本,iphone运行了一个netio的软件,通过socket和这个角本通讯,基本能达到控制灯的效果,不过还有很多不尽如人意的地方,期待也能完整读读chzhewl 兄的python:)

  1. # coding=utf-8
  2. import socket
  3. import SocketServer
  4. import os
  5. import RPi.GPIO as GPIO
  6. import time
  7. import serial

  8. # Setup serial connection to arduino
  9. DEVICE = "/dev/ttyAMA0"
  10. BAUD = 9600
  11. ser = serial.Serial(DEVICE, BAUD)

  12. #Variables
  13. comingHomeStatus = 0
  14. class MyTCPHandler(SocketServer.BaseRequestHandler):
  15.         """
  16.         The RequestHandler class for our server.
  17.         It is instantiated once per connection to the server, and must
  18.         override the handle() method to implement communication to the
  19.         client.
  20.         """
  21.         def handle(self):
  22.                 global comingHomeStatus, ser
  23.                 while 1:
  24.                         # self.request is the TCP socket connected to the client
  25.                         self.data = self.request.recv(1024).strip()
  26.                         if not self.data: break
  27.                         print "Incoming connection from: {}".format(self.client_address[0])
  28.                         print "Received data:", self.data
  29. #LED1
  30.                         if self.data == 'led1 on':
  31.                                 ser.write('{"ID":1,"things":"light","command":"on"}')
  32.                                 print 'received on'
  33.                                 self.request.sendall('led1 open')
  34.                         elif self.data == 'led1 off':
  35.                                 ser.write('{"ID":1,"things":"light","command":"off"}')
  36.                                 print 'received off'
  37.                                 self.request.sendall('led1 close')
  38. #LED2
  39.                         if self.data == 'led2 on':
  40.                                 ser.write('{"ID":2,"things":"light","command":"on"}')
  41.                                 print 'received on'
  42.                                 self.request.sendall('led2 open')
  43.                         elif self.data == 'led2 off':
  44.                                 ser.write('{"ID":2,"things":"light","command":"off"}')
  45.                                 print 'received off'
  46.                                 self.request.sendall('led2 close')
  47. ### GROUPED LIGHTS
  48.                         #Coming-home-lights
  49.                         if self.data == 'comingHomeOn':
  50.                                 self.request.sendall('On')
  51.                                 GPIO.output(5, True)
  52.                                 GPIO.output(11, True)
  53.                                 GPIO.output(12, True)
  54.                                 comingHomeStatus = 1
  55.                         elif self.data == 'comingHomeOff':
  56.                                 self.request.sendall('Off')
  57.                                 GPIO.output(5, False)
  58.                                 GPIO.output(11, False)
  59.                                 GPIO.output(12, False)
  60.                                 comingHomeStatus = 0
  61.                                
  62.                         #Turn all indoor lights off
  63.                         if self.data == 'allIndoorLightsOff':
  64.                                 print "Turning all indoor lights off"
  65.                                 GPIO.output(5, False)        #Garage roof light
  66.                                 GPIO.output(7, False)        #Workshop roof light
  67.                                 GPIO.output(8, False)        #Storage roof light
  68.                                 self.request.sendall('.')
  69.                         #Turn all outdoor lights off
  70.                         if self.data == 'allOutdoorLightsOff':                               
  71.                                 print "Turning all outdoor lights off"
  72.                                 GPIO.output(11, False)        #Driveway light
  73.                                 GPIO.output(12, False)        #Carport light
  74.                                 GPIO.output(13, False)        #Workshop light
  75.                                 GPIO.output(16, False)        #Storage light
  76.                                 self.request.sendall('.')
  77.                                
  78. ### INDOOR LIGHTS
  79.                         #Garage roof light
  80.                         if self.data == 'garageRoofOn':
  81.                                 print "Turning garage roof light on"
  82.                                 GPIO.output(5, True)
  83.                                 self.request.sendall('.')
  84.                         elif self.data == 'garageRoofOff':
  85.                                 print "Turning garage roof light off"
  86.                                 GPIO.output(5, False)
  87.                                 self.request.sendall('.')
  88.                        
  89.                         #Workshop roof light
  90.                         if self.data == 'workshopRoofOn':
  91.                                 print "Turning workshop roof light on"
  92.                                 GPIO.output(7, True)
  93.                                 self.request.sendall('.')
  94.                         elif self.data == 'workshopRoofOff':
  95.                                 print "Turning workshop roof light off"
  96.                                 GPIO.output(7, False)
  97.                                 self.request.sendall('.')
  98.                         #Storage roof light
  99.                         if self.data == 'storageRoofOn':
  100.                                 print "Turning storage roof light on"
  101.                                 GPIO.output(8, True)
  102.                                 self.request.sendall('.')
  103.                         elif self.data == 'storageRoofOff':
  104.                                 print "Turning storage roof light off"
  105.                                 GPIO.output(8, False)
  106.                                 self.request.sendall('.')                                               
  107. ### OUTDOOR LIGHTS
  108.                         #Driveway light
  109.                         if self.data == 'drivewayOn':
  110.                                 print "Turning driveway light on"
  111.                                 GPIO.output(11, True)
  112.                                 self.request.sendall('.')
  113.                         elif self.data == 'drivewayOff':
  114.                                 print "Turning driveway light off"
  115.                                 GPIO.output(11, False)
  116.                                 self.request.sendall('.')
  117.                         #Carport light
  118.                         if self.data == 'carportOn':
  119.                                 print "Turning carport light on"
  120.                                 GPIO.output(12, True)
  121.                                 self.request.sendall('.')
  122.                         elif self.data == 'carportOff':
  123.                                 print "Turning carport light off"
  124.                                 GPIO.output(12, False)
  125.                                 self.request.sendall('.')
  126.                                
  127.                         #Workshop light
  128.                         if self.data == 'workshopOn':
  129.                                 print "Turning workshop light on"
  130.                                 GPIO.output(13, True)
  131.                                 self.request.sendall('.')
  132.                         elif self.data == 'workshopOff':
  133.                                 print "Turning workshop light off"
  134.                                 GPIO.output(13, False)
  135.                                 self.request.sendall('.')
  136.                                
  137.                         #Storage light
  138.                         if self.data == 'storageOn':
  139.                                 print "Turning storage light on"
  140.                                 GPIO.output(16, True)
  141.                                 self.request.sendall('.')
  142.                         elif self.data == 'storageOff':
  143.                                 print "Turning storage light off"
  144.                                 GPIO.output(16, False)
  145.                                 self.request.sendall('.')
  146. ### STATUS SENDS
  147.                         #Garagedoor button text
  148.                         if self.data == 'door_button':
  149.                                 if GPIO.input(15):
  150.                                         self.request.sendall('Close')
  151.                                         #GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP)
  152.                                         print "Sending buttontext: Close"
  153.                                 else:
  154.                                         self.request.sendall('Open')
  155.                                         #GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
  156.                                         print "Sending buttontext: Open"
  157.                         #Garagedoor position
  158.                         if self.data == 'door_status':
  159.                                 #print "Sending Door status: ", GPIO.input(15)
  160.                                 if GPIO.input(15):
  161.                                         print "Sending that garagedoor is open"
  162.                                         self.request.sendall('open')
  163.                                 else:
  164.                                         print "Sending that garagedoor is closed"
  165.                                         self.request.sendall('closed')
  166.                         #Coming-home-lights status               
  167.                         if self.data == 'comingHomeStatus':
  168.                                 if comingHomeStatus == 1:
  169.                                         self.request.sendall('On')
  170.                                         print "Sending that coming home lights are on"
  171.                                 else:
  172.                                         self.request.sendall('Off')
  173.                                         print "Sending that coming home lights are off"
  174.                        
  175. if __name__ == "__main__":
  176.         HOST, PORT = "", 54321
  177.     # Create the server, binding to localhost on port 54321
  178.         server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
  179.     # Activate the server; this will keep running until you
  180.     # interrupt the program with Ctrl-C
  181.         server.serve_forever()
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-26 17:01:51 | 显示全部楼层
ogre_c 发表于 2013-7-26 14:43
嗯,不错,购买时是买的1个主机(协调器),几个路由的方案吗? 还是别的? 他家的zigbee没用过,不太了解。 ...

zigbee 使用协调器和路由, 代码在卖家发货前已经刷好的. 这款语音模块好小啊,但是只能合成语音不能识别吧? 看了你的python 代码,大体明白了实现原理,很好的思路.  我的实现基本上没用到python,用c++写的(回头准备换成python 的,维护起来容易很多),代码还没整理,有需要可以传你份.
回复 支持 反对

使用道具 举报

发表于 2013-7-26 20:18:43 | 显示全部楼层
chzhewl 发表于 2013-7-26 17:01
zigbee 使用协调器和路由, 代码在卖家发货前已经刷好的. 这款语音模块好小啊,但是只能合成语音 ...

嗯,这只是一个语音合成模块,语音识别的话发现taobao上LD3320 ASR语音模块的方案很多,不过我也没玩过,不知道实际效果怎么样。那个语音合成模块到不是60元那种模块能比的,出来的语音感觉很自然,好像还有4-5种男声女音可选,所以有点心动。chzhewl要方便的话,代码发我[email protected]邮箱一份,我现在arduino端用ajson解析的这种{"ID":1,"things":"light","command":"off"}字符串响应命令的,所以稳定性不如你那种有数据包头的好, 学习一下你的思路。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-29 13:28:07 | 显示全部楼层
ogre_c 发表于 2013-7-26 20:18
嗯,这只是一个语音合成模块,语音识别的话发现taobao上LD3320 ASR语音模块的方案很多,不过我也没玩过, ...

邮件已发送
回复 支持 反对

使用道具 举报

发表于 2013-7-29 21:25:22 | 显示全部楼层
chzhewl 发表于 2013-7-29 13:28
邮件已发送

谢谢无为!!待我研究研究,感谢啊
回复 支持 反对

使用道具 举报

发表于 2013-7-29 23:58:37 | 显示全部楼层
很给力啊!感觉楼主的继电器模块可用光耦代替,那样体积会小很多的样子!
回复 支持 反对

使用道具 举报

发表于 2013-7-31 15:21:07 | 显示全部楼层
很好的文章,这个要顶。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 04:27 , Processed in 0.083196 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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