用户
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索

85

主题

155

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
42477
2017-2-6 00:20:11 geeiot 管理员 楼主 101806
       之前无聊,在家搭建了一套简易的智能家居平台,拥有良好的界面,简单方便的控制功能(比如电灯、空调、窗帘等)。而且拥有良好的接入功能,扩展性强。我会慢慢把教程整理出来,分享给大家。教程难度设定为苦难吧,涉及到很多东西,不会那么详细的描述。本次涉及到的全部源代码、工具会全部分享给大家。
       基本思路是以一台服务器为数据处理与转发中心。家庭里面的控制中心接入到服务器,通过网页或者安卓控制端通过服务器将命令转发到控制中心。       优化了一下代码,方便大家直接进行修改使用(2017.05.05)。
演示.jpg
一、材料准备
必要
1、服务器一台(需要有公网IP,作为TCP服务端,智能家居的数据处理中心)
接下来的步骤是搭建一个测试端。先把必要的东东列出来,服务器这儿用不着
2、Arduino开发板一块
3、ESP8266 WIFI模块一块
上面两个课替换为任何支持TCP连接的设备。比如树莓派(编写TCP客户端程序)
4、继电器一块
5、台灯一台(其他设备也行)
上面两个设备科任意替换,这儿只是演示

二、搭建服务器
需要去购买一台服务器,当然自己有的话就更好啦。基本的1核1G就够了,自己用的话。平时也可以放一些自己的东西
1、初始化服务器系统为Windows2008以上

2、搭建PHP运行环境
这里我们采用PHP套件,搭建起来快熟方便。首先直接下载我配置好的,下载后上传到服务器 运行upupw.exe然后执行s1启动全部服务,然后php运行环境包括数据库,网站均已搭建完成。在浏览器输入127.0.0.1(或者在本地浏览器中输入服务器IP地址),出现登录页面,随便注册一个账号,能够登录,表示搭建成功
以下为具体步骤:
(1)、打开WebServer,运行upupw.exe输入s1启动全部服务
01.jpg
02.jpg

(2)、浏览器输入127.0.0.1进行测试服务器是否运行正常
03.jpg

(3)、注册一个账号,测试网站功能是否正常a.注册账号
04.jpg
b.登录控制台
05.jpg

注意:
a.网页端我是随便套了一个模板,很多功能都没有实现。只有一个简单的显示数据的功能(还不完整,嘿嘿)。
b.数据库root账户密码:root    数据库geekiot_home账户密码:geekiot_home (如果搭建正式环境,一定要修改密码哦)
c.修改密码请见帖子附录1
d.数据库管理地址为:http://127.0.0.1/pmd 或者 http://远程地址/pmd  (如果搭建正式环境,一定要屏蔽远程访问哦)
e.控制台数据显示为NULL表示数据库中没有储存有数据。曲线没写,得自己动手哦(我写不来,嘿嘿)

3、运行数据服务器
(1)、必须先运行Web服务器并且启动正常之后才能运行数据服务器。因为数据服务器要依赖于Web服务器中的数据库服务
(2)、配置Config.ini
QQ截图20170505215626.jpg

(2)、打开DataServer中的TCPServer.exe,检查日志是否运行正常
06.jpg


注意:
a.DataServer中的Config.ini不要用记事本修改。记事本会添加一些莫名其妙的东西进去,推荐使用notepad++

4、到此为止,服务端架设完成。如果遇到什么问题,欢迎留言回帖。

5、服务器功能介绍
(1)、将web上面的指令发送到客户端
(2)、将android控制端的命令发送到客户端
(3)、收集客户端的消息,并展示在网页和android控制端上面
(4)、消息传递
智能家居通信.jpg
附录一 修改WebServer和DataServer密码
1、修改数据库密码
a.打开浏览器,输入http://127.0.0.1/pmd并用默认用户名和密码登录
07.jpg

b.选择用户
08.jpg

c.修改密码
09.jpg

注意!修改数据库密码后一定要修改网站配置和数据服务器配置

2、修改网站数据库配置
a.打开WebServer/htdoc/common/config_global.php ,修改对应地方的用户和密码就行
10.jpg

3、修改数据服务器密码
a.打开DataServer中的Config.ini,修改对应地方的用户和密码就行
11.jpg


附录二 指令传递格式  说明
(1)、消息传递说明
A、客户端到服务端
字串符
2,test,test,0,-,0,0,0,0,0,0,0,0,-,-,@

&0 标识符 1为树莓派,2位arduino
&1 用户名 11位数字组成的用户名(电话号码)
&2 密码 密码
&3 标识符 0为储存到数据库,1为直接转发的消息,2为向别人转发的消息(详细见附录1)
&4 占位符
&5 温度 浮点数
&6 湿度 浮点数
&7 有害气体浮点数
&8 PM2.5 浮点数
&9 预留数据位
&10 预留数据位
&11 预留数据位
&12 预留数据位
&13 占位符
&14 占位符
&15 发送完成标识符

传感器接收的数据,必须以此格式想服务器发送

B、程序内部传递
字串符
clientName,2,test,test,0,-,0,0,0,0,0,0,0,0,-,-,@

&0 链接名
&1 标识符 1为树莓派,2位arduino
&2 用户名 11位数字组成的用户名(电话号码)
&3 密码 密码
&4 标识符 0为储存到数据库,1为转发到网页不储存数据,2为向别人转发的消息,3转发到网页的同时存储数据
   4 转发到android ,5转发到android和web不储存数据,6转发到android和web储存数据(详细见附录1)
&5 占位符
&6 温度 浮点数
&7 湿度 浮点数
&8 有害气体浮点数
&9 PM2.5 浮点数
&10 预留数据位
&11 预留数据位
&12 预留数据位
&13 预留数据位
&14 占位符
&15 占位符
&16 发送完成标识符

附录:
"-" 表示占位符
"0" 表示数据获取失败

最后两位占位符自定义数据,密码后面两位占位符不能自定义数据,为系统预留
如果不按照次格式发送数据,将会报错,或者系统返回ERROR

(3)、WEB消息传递
clientName,test,6bc40d6f2d2536edb808ece9d57d52a5,0,-,-,1:1:1,COMMOND2,COMMOND3,@
&0 连接名
&1 用户名
&2 密码
&3 标识符 0为登录,1为命令模式,2为消息模式,3为下线(详细见附录2)
&4 占位符1
&5 占位符2
&6 命令1(消息1)
&7 命令2(消息2)
&8 命令3(消息3)
&9 发送完成标识符
MD5标识为用户名和密码生成,加强用户消息在网络透明传输过程中的安全性
状态:0->登录;1->命令模式;2->消息模式;3->登出模式,详细见附录2
WEB收到消息后首先判断在线列表中是否有当前客户端,如果有,则转发,如果没有,则抛弃
转发到TCPSOCKET的内容为三条命令或者三条消息。为占位符则不转发
命令模式命令格式:1:1:1 可用户自定义

(4)、android到客户端
clientName,test,6bc40d6f2d2536edb808ece9d57d52a5,0,-,-,1:1:1,COMMOND2,COMMOND3,@
&0 连接名
&1 用户名
&2 密码
&3 标识符 0为登录,1为命令模式,2为消息模式,3为下线(详细见附录2)
&4 占位符1
&5 占位符2
&6 命令1(消息1)
&7 命令2(消息2)
&8 命令3(消息3)
&9 发送完成标识符

附1:客户端发送消息到服务器 第三标识符说明
0为储存到数据库,1为直接转发的消息,2为向别人转发的消息(详细见附录1)
当为0时,判断为写入数据库,将会把数据写入数据库,不会转发到网页。网页会读取数据库内容。
当为1时,判断为转发模式,将会把数据直接转发到网页,不会写入数据库,为即时消息传递
    转发模式转发的数据内容为5-14位,最后@结尾
    转发不成功服务器将会送"ERROR"
当为2时,判断为转发模式,将会把消息转发到别人那里(用户名第三标识符),不会写入数据库,为及时消息

附2:WEB消息传递 第三标识符说明
0为登录,1为命令模式,2为消息模式,3为下线
当为0时,判断为登入模式,会将用户数据缓存到服务端当中,作为登入模式。在web登录后务必发送一条登入消息。就是第三标识符为0
当为1时,判断为命令模式,会将命令1,命令2,命令3发送到对应用户的客户端
当为2时,判断为消息模式,会将本来的三个命令作为短消息发送给对应的客户端
当为3时,判断为登出模式,服务器将清除用户缓存。可不发送登出信息
    命令模式或者消息模式发送不成功服务器会回送"ERROR"

资料下载:
游客,如果您要查看本帖隐藏内容请回复


到此为止,如果一切运行正常,那么这个简单的智能家居服务端就搭建完成了。下一步是制作一个简单的家庭控制中心。
使用道具 举报 回复
二楼留下来备用
使用道具 举报 回复 支持 反对
赞赞赞,非常值得学习,赶紧用arduino实践一下
使用道具 举报 回复 支持 反对
楼主智能家居做的如何了,我现在遇到个问题,如何通过tcp/ip协议上传数据至云端数据库
使用道具 举报 回复 支持 反对
以Arduino或树莓派为中心搭建简易智能家居控制中心_服务器篇
使用道具 举报 回复 支持 反对
2017-4-18 18:06:03 geeiot 管理员
6#
陈乃兴 发表于 2017-4-15 10:06
楼主智能家居做的如何了,我现在遇到个问题,如何通过tcp/ip协议上传数据至云端数据库 ...

上传数据的话,你可以参考这篇帖子。不过这一篇写的确实比较懒,当时只是做一个测试。使用TCP/IP协议的话,最好采用C/S模型进行设计,数据上传协定一定的通讯格式。如果一个数据帧前四个字节用来表示数据校验,数据内容等。也可以按照这篇帖子说的,按照某一格式上传数据,比如2,test,test,0,-,0,0,0,0,0,0,0,0,-,-,@

&0 标识符 1为树莓派,2位arduino
&1 用户名 11位数字组成的用户名(电话号码)
&2 密码 密码
&3 标识符 0为储存到数据库,1为直接转发的消息,2为向别人转发的消息(详细见附录1)
&4 占位符
&5 温度 浮点数
&6 湿度 浮点数
&7 有害气体浮点数
&8 PM2.5 浮点数
&9 预留数据位
&10 预留数据位
&11 预留数据位
&12 预留数据位
&13 占位符
&14 占位符
&15 发送完成标识符

传感器接收的数据,必须以此格式想服务器发送
使用道具 举报 回复 支持 反对
支持!!!!!!!
使用道具 举报 回复
很好 很强大 谢谢分享
使用道具 举报 回复 支持 反对

赞赞赞,非常值得学习,赶紧用arduino实践一下
使用道具 举报 回复 支持 反对
初来乍到,学习一下!
使用道具 举报 回复 支持 反对
谢谢楼主分享~~~~
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册