数码之家

标题: 希望开发一套基于智能手机为中央处理的智能家居系统 [打印本页]

作者: liyuqing0318    时间: 2019-8-24 08:47
标题: 希望开发一套基于智能手机为中央处理的智能家居系统
本帖最后由 liyuqing0318 于 2019-8-25 07:52 编辑

希望开发一套基于智能手机为中央处理的智能系统,家里淘汰的手机太多,太浪费了。

用小电脑来处理,太耗电,用不起。
用单片机来处理计算能力又太低。
用其它方式总有不太理想的地方。

总结了一下就手机比较不错!

人机界面好,屏幕够大,还多点触屏控制 。
自带高灵敏麦克风,可监听,可录音,可语音控制。
自带喇叭可外放音乐,音质音源都不错。追求效果的可外加功放,全屋背景音,效果杠杠的。
自带WIFI方便远程连接,即使离家万里也能对家了如指掌。
自带摄像头,大多还都很高清,视频监控,监护,让小偷无所遁形。
自带存储卡,一般还都支持8G32G,循环录制也还凑合,可参考行车记录仪。
自带红外发射,可遥控部分家电,模拟有人在家的假象。
自带蓝牙模块,可与蓝牙音箱组合。
体积轻薄小巧,方便居家隐藏。让闯入者想不到,也搜不到。
整机低功耗设计,自带后备电池,不怕突然停电,即使停电也能坚持个一天半天的。



至于跟其它传感器组成安防系统,我想可用单片机+WIFI模块+433射频模块组成一套外设体系用于扩展手机的触角。外设只包含三大模块,体积较小,用来延伸信号距离。
其功能如下:

监测手机整点提示音。

每天早上七点报当天天气预报。

晚上起夜自动开柔光灯。

晚上监测到主人回家,自动开启灯光,背景音乐。实现方法:(监控手机监测到家里的路由器中出现用户手机,为主人回家,也可复加红外、门磁等,PING命令实现。)

433射频可与市场上的大部分门磁、红外、燃气泄露组成报警系统,可扩展探测范围和距离,实现多探点复合信息,送于单片机或手机进行判断,避免发生误报警(误报警是大多数家居安防设备被停用的主要原因)。探头的无需重复开发,节约成本。毕竟现在探头都已经设计成形,而且还是白菜价。    .

WIFI模块可与手机通信,可补充手机传感的功能和距离的短板,让手机知道有人闯入,并开启视频实时外网储存模式,即使手机被小偷找到破坏掉,视频信息也早就被送到外网服外器了(抖音、优酷、百度网盘等,全城围观,调动大家抓小偷的积极性,小偷成网红,想找不到都难。)

蓝牙模块,可与蓝牙音箱组合,关键时候播放报警音,吓退小偷(如小偷不退出,其在寻找关闭蓝牙音箱的同时,或主动引诱小偷到指定区域,方便手机记录其身体和面部形象,便于抓捕),设置多个蓝牙音箱还可干扰小偷,使其无瑕查找监控主机(手机)。

WIFI模块自行联网与监控手机互动,也可直接通过路由器向用户手机发送报警信息点。
如果怕网线被破坏扯断,手机内放个流量卡,走4G流量或直接拔打电话。小偷不会为了偷个居家小钱,连基站都一块破坏了吧。

我就想到了这么多,大家想到了欢迎补充!!


:titter:最后的最后,单片机,WIFI,射频模块我都能实现。我想问问数码达人开发安卓手机软件用什么编辑软件环境?:titter:





实现上面的功能:WIFI模块有ESP8266 八块钱,433射频 五块钱,单片机八块钱,外围元件十块钱,闲置智能小米华为手机的一块(这两牌子,真的使不坏呀!华为双摄夜拍,真是有点光就现形),门磁、红外、燃气泄露探头若干。。。


由51单片机组成的外设体系的功能:

1.负责录入所有433射频模块采集到的各种传感器地址。地址为一个字节,理论可带256个探头。
2.传感器发出开关量报警信号,负责将报警传感器的地址通过WIFI发送给手机。地址为一个字节。
3.传感器发出模拟量信号,负责将报警传感器的地址和模拟量的值通过WIFI发送给手机,两个字节,地址+数据。。
4.外设如遇到警情向内网监控手机地址发布警报,也要向多个外网手机地址发布警报。
5.外设要实时掌握外网手机的IP地址。
6.外设可以设立多部,方便覆盖信号不好的区域。
7.手机对外设实行循查制,周期为1秒一次。外设要在0.5秒内完成应答。
8.外设设有三色灯指示,方便查看其工作状态。
9.外设大小尽量做小,最好只为一个三孔插头或手机充电器大小,插在不起眼的角落里,方便伪装。。


由淘汰手机组成的智能家居中央处理的功能:

1.平时主要巡检外设的在线情况。根据探头触发一些事件(报警,开门,开关灯)由用户自行编辑探头与事件组合。2.根据时间触发一些事件,比如闹钟,天气预报,催眠音乐等。3.语音识别,触发条件(就像百度音响的小度小度),识别用户语音(讯飞)转成文字,监测文字中的关键字(比如:关  灯、开 电视、开 空调、打电话 ***),用红外发射器 控制家电。
4.特定视频,直接上传互联网。
5.周一到周六8点到17点,如果用户手机未连在路由器上,就自动进入布防状态。晚上23点到早5点进入预警状态
6.想到了我再写吧。




不要小看现在的淘汰的手机性能,赛过当年的奔腾速龙好几倍了,控制个智能家电,感知个居家环境,处理个安防报警,上传点视频文件,我认为都大才小用了呢!

不要因为淘汰手机便宜就蔑视它,其实一部手机的开发和生产成本一点不低,是因为进入民用领域,用量大才便宜的。
就我上面说的 5.5寸视网膜屏幕、十点电容触屏控制、千万像素双感光摄像头、HIWI音响标准、高速WIFI、3G4G自动切换、高速蓝牙、超长待机电池这几样功能,要做到性能不比淘汰手机差,大家用其它任何硬件拼装组装完全做出来,成本都是一部新手机的几倍才行。我不要再讲8核处理器,4G运行内存、64G固态存储器、GPS这些功能、全国家电的红外发射编码库,也不是一个几百元板子能买到的功能。即使买到了,其体积功耗质量跟手机也根本没法比。







作者: xueyuking    时间: 2019-8-24 09:23
发安卓手机软件用Android studio.

作者: ww5223017240    时间: 2019-8-24 09:24
做系统并不难,全部WIFI连接做个界面控制而已,麻烦的是外围设备的组合调试,我也很想做个这样的系统,早上报时,定时开窗帘,还能雨天自动关窗,要是连上新风系统还能调控温湿度,要做的测试太多没啥时间搞啊,如果是做成产品销售的话还有动力,自己用就没动力了。:sweat:
作者: xueyuking    时间: 2019-8-24 09:35
现在有好几家现成的如米家。
作者: liyuqing0318    时间: 2019-8-24 09:51
ww5223017240 发表于 2019-8-24 09:24
做系统并不难,全部WIFI连接做个界面控制而已,麻烦的是外围设备的组合调试,我也很想做个这样的系统,早上 ...

由51单片机组成的外设体系的功能:

1.负责录入所有433射频模块采集到的各种传感器地址。地址为一个字节,理论可带256个探头。
2.传感器发出开关量报警信号,负责将报警传感器的地址通过WIFI发送给手机。地址为一个字节。
3.传感器发出模拟量信号,负责将报警传感器的地址和模拟量的值通过WIFI发送给手机,两个字节,地址+数据。。
4.外设如遇到警情向内网监控手机地址发布警报,也要向多个外网手机地址发布警报。
5.外设要实时掌握外网手机的IP地址。
6.外设可以设立多部,方便覆盖信号不好的区域。
7.手机对外设实行循查制,周期为1秒一次。外设要在0.5秒内完成应答。
8.外设设有三色灯指示,方便查看其工作状态。
9.外设大小尽量做小,最好只为一个三孔插头或手机充电器大小,方便伪装。




作者: wenxueroom    时间: 2019-8-24 10:00
手机上班还带着不 带着家里就用不了  不带着和放台专门的服务器有啥区别  有些Android 系统熄灭屏幕就断Wi-Fi,后台还自动清理进程。像树莓派 n1 t1 之类的功耗低arm设备比手机省电 刷个linux系统 跑个docker什么的 贼稳定。恕在下愚见,专门的事情请交给专业的设备来处理,就比如我一直拆的是12mm的螺丝,我用活动扳手行不行?行 但是不专业,没次我都得调节扳手的大小,就不如我买一个12mm的固定套头 拆的省心 省神 。专门的事情交给专业的设备处理,模块化开发 岂不爽 至于淘汰的手机 还是拆字库 做优盘吧 剩下的外壳还能换大盆 换剪子 换菜刀 换儿童玩具:titter::titter::titter:
作者: liyuqing0318    时间: 2019-8-24 10:18
wenxueroom 发表于 2019-8-24 10:00
手机上班还带着不 带着家里就用不了  不带着和放台专门的服务器有啥区别  有些Android 系统熄灭屏幕就断Wi- ...

树莓派累积到手机的摄像、录音、屏幕、输入、蓝牙、WIFI、电池,这些功能价格怎么也得1000开外吧。

作者: wenxueroom    时间: 2019-8-24 10:42
liyuqing0318 发表于 2019-8-24 10:18
树莓派累积到手机的摄像、录音、屏幕、输入、蓝牙、WIFI、电池,这些功能价格怎么也得1000开外吧。
...

我理想中的智能家居系统
摄像:家里的监控应该是一套独立的系统,基本的录像功能应该一直是存在的,录像画面活动的时候 录像系统会提交给我的家庭服务器,家庭服务器通过训练好的人工神经网络识别是不是我感兴趣的东西,比如 我的宠物,或者家里来客人了 客人是谁 客人带的什么东西
录音:见上述摄像
屏幕:低成本情况下 不会给家庭服务器配专门的屏幕,用web端控制 类似homeassistant 需要看相关参数时 手机电脑甚至智能电视,或者浴室的化妆镜子都可以成为屏幕(包含输入) 智能家居的定位绝不是把按钮换个位置移动到手机上,本来我按一下就能打开的等 为什么要先开手机 在开app 。我希望能通过手势或者语音控制加上对我生活习惯的长时间记录训练的神经网络来控制。
输入:见上述屏幕
蓝牙:蓝牙没啥用
Wi-Fi:树莓派集成的Wi-Fi和蓝牙 但是我选择连接网线,亲测网线的稳定性比wifi好的多
电池:电池什么ups的交给太阳能发电系统
组网:家庭内网+zigbee网关+路由+zigbee协议实现的各种传感器、控制设备。一方面减轻Wi-Fi路由器压力,另一方面利用zigbee协议的自组网 自动路由功能 减少用户配置
用手机玩玩行 要想长久使用 省时省力 还是算了吧
作者: ww5223017240    时间: 2019-8-24 13:02
liyuqing0318 发表于 2019-8-24 09:51
由51单片机组成的外设体系的功能:

1.负责录入所有433射频模块采集到的各种传感器地址。地址为一个字节 ...

51就算了,扩展之类的都麻烦,起码用stm32,至少扩展方便,以后要加设备可以直接加
作者: ww5223017240    时间: 2019-8-24 13:04
liyuqing0318 发表于 2019-8-24 10:18
树莓派累积到手机的摄像、录音、屏幕、输入、蓝牙、WIFI、电池,这些功能价格怎么也得1000开外吧。
...

没那么贵,也不需要用树莓派,可以用些其他类似的板子,屏幕完全不需要还占了一半成本,直接远程就可以了
作者: ww5223017240    时间: 2019-8-24 13:05
wenxueroom 发表于 2019-8-24 10:42
我理想中的智能家居系统
摄像:家里的监控应该是一套独立的系统,基本的录像功能应该一直是存在的,录像 ...

有钢铁侠的贾维斯千分之一的性能就行了,哈哈
作者: ww5223017240    时间: 2019-8-24 13:06
用废旧手机做不如淘个RK3288的平板,能刷linux不是什么都解决了,屏幕输入蓝牙wifi都有,linux编程也比手机方便,性能也更好一点
作者: ww5223017240    时间: 2019-8-24 13:09
另外提醒下,很多手机的MAC都不是固定的,每次联网都会变
作者: ww5223017240    时间: 2019-8-24 13:17
刚开始没理解楼主的意思,是要拿手机当中控的意思吗?这个我觉得还是用台普通电脑做中控比较方便,手机用来管理这样比较好,电脑不用大的,迷你的就行,加个UPS也不怕断电,小电脑不耗电的很多。另外说你的外设准备怎么供电?全用电池的话不加电量检测恐怕不行。另外看了下你的应用场景,感觉很多不需要中控介入,直接单片机或者程序就能处理。报警的话是肯定要用流量卡的,用wifi不保险。
作者: skylly    时间: 2019-8-24 17:14
希望开发一套基于智能手机为中控的人造卫星发射系统。
作者: 蕴殇    时间: 2019-8-24 18:37
开发一个IO控制的软件和板卡就好了.用电脑的话直接买IO卡做简单很多
作者: so0502    时间: 2019-8-24 19:30
等两年吧,华为的鸿蒙成熟了就可以啦:smile:
作者: 袁鑫源    时间: 2019-8-24 22:34
小米的小爱同学可以办到
作者: 行走时光    时间: 2019-8-25 00:44
楼主说的俺好向往:shy:
作者: liyuqing0318    时间: 2019-8-25 06:39
ww5223017240 发表于 2019-8-24 13:17
刚开始没理解楼主的意思,是要拿手机当中控的意思吗?这个我觉得还是用台普通电脑做中控比较方便,手机用来 ...

用小电脑加UPS,这得多大体积,怎么隐藏。你打算让小偷直接打包带走吗?

话说我发现很多门头店里的监控一体机就在吧台下面,小偷进店找不到值钱的东西,完全可以把监控一体机搬走呀,起码也值个三头二百的,贼不走空的原则不能破!:lol:


作者: liyuqing0318    时间: 2019-8-25 06:55
本帖最后由 liyuqing0318 于 2019-8-25 07:00 编辑
skylly 发表于 2019-8-24 17:14
希望开发一套基于智能手机为中控的人造卫星发射系统。

不要小看现在的淘汰的手机性能,赛过当年的奔腾速龙好几倍了,控制个智能家电,感知个居家环境,处理个安防报警,上传点视频文件,我认为都大才小用了呢!

不要因为淘汰手机便宜就蔑视它,其实一部手机的开发和生产成本一点不低,是因为进入民用领域,用量大产便宜的。
就我上面说的 5.5寸视网膜屏幕、十点电容触屏控制、千万像素双感光摄像头、HIWI音响标准、高速WIFI、3G4G自动切换、高速蓝牙、超长待机电池这几样功能,要做到性能不比淘汰手机差,大家用其它任何硬件拼装组装完全做出来,成本都是一部新手机的几倍才行。我不要再讲8核处理器,4G运行内存、64G固态存储器、GPS这些功能,也不是一个几百元板子能买到的功能。即使买到了,其体积功耗质量跟手机根本没法比。

作者: liyuqing0318    时间: 2019-8-25 07:07
xueyuking 发表于 2019-8-24 09:35
现在有好几家现成的如米家。

其实我需要的是一个手机APP,带有智能家电控制、报警视频网络上传功能。我的51单片机外设会通过WIFI报告给手机APP,当前有那些感应器被触发。手机APP根据被触发的外设类型,由用户自主编辑家居场景。
作者: liyuqing0318    时间: 2019-8-25 07:15
wenxueroom 发表于 2019-8-24 10:00
手机上班还带着不 带着家里就用不了  不带着和放台专门的服务器有啥区别  有些Android 系统熄灭屏幕就断Wi- ...

其实我就是想用百八十元做个外设,再花个百八十的买堆门磁红外探头,然后用个淘汰手机装个APP,让用户自己灵活的编辑用户场景,组成个智能家居安防的系统。满足70-100平方的两居或三居室的场景就可以了。

您说的这些高大尚的功能,不住个别墅都不好意思拿来用。。。
作者: klop    时间: 2019-8-25 10:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: ww5223017240    时间: 2019-8-25 10:23
liyuqing0318 发表于 2019-8-25 06:39
用小电脑加UPS,这得多大体积,怎么隐藏。你打算让小偷直接打包带走吗?

话说我发现很多门头店里的监控 ...

你想多了,小电脑可以一个路由大小,UPS也不用放在一起,拉条线就行,手机小就不会被带走吗,不是更容易,电脑你还能锁柜子里,手机你锁柜子里信号都没了
作者: 剑飘扬    时间: 2019-8-25 14:12
全套的小米,基本实现你的要求
作者: infozx    时间: 2019-8-26 12:57
开发安卓只要一台你家里淘汰的旧手机,一台电脑安装一个Android stuidio,连上网就可以了。

网上有教程的,只要够投入,7天从入门到精通到删库跑路。

作者: sckocn    时间: 2019-8-26 13:17
想法很好啊,就像Ipad可以做家庭Homekit的中枢一样。
我给Apple发过类似的提议,可他们回复我的答非所问。
作者: chenppo    时间: 2019-8-26 14:59
ww5223017240 发表于 2019-8-24 09:24
做系统并不难,全部WIFI连接做个界面控制而已,麻烦的是外围设备的组合调试,我也很想做个这样的系统,早上 ...

后来能买得到的东西,我都懒得折腾了。或者买成品来改装,加装自己需要的或者成品没有的功能。
作者: chenppo    时间: 2019-8-26 15:01
liyuqing0318 发表于 2019-8-25 07:15
其实我就是想用百八十元做个外设,再花个百八十的买堆门磁红外探头,然后用个淘汰手机装个APP,让用户自 ...

我偏向于用旧手机当做可以双向数传的‘显示器’。控制全部交给单片机就行了。

作者: pops    时间: 2019-8-26 16:06
这个主要是任务调度模块。
定时调度,添加删除。
作者: 睡不着    时间: 2019-8-26 19:31
咱也不懂咱就看看,感觉类似的方案应该好弄吧
作者: junyee    时间: 2019-8-27 07:29
ww5223017240 发表于 2019-8-24 13:09
另外提醒下,很多手机的MAC都不是固定的,每次联网都会变

好奇你的是什么手机...
原厂自带的 换MAC 功能?
作者: snoopy8008    时间: 2019-8-27 09:04
没有盈利点,厂家为啥要做呢?
作者: ww5223017240    时间: 2019-8-27 10:53
junyee 发表于 2019-8-27 07:29
好奇你的是什么手机...
原厂自带的 换MAC 功能?

貌似手上的手机都这样,中兴的,小米的,高通的,联发科的U,都一样,想路由绑定IP都不行
作者: zhiyiyunmeng    时间: 2019-8-27 11:58
貌似你把小米的东西配齐差不多能实现你需求的功能了。也是一部手机的问题
作者: junyee    时间: 2019-8-27 12:07
ww5223017240 发表于 2019-8-27 10:53
貌似手上的手机都这样,中兴的,小米的,高通的,联发科的U,都一样,想路由绑定IP都不行 ...

会不会你网络问题,, MAC 地址如果随机变肯定是不正常的,
MAC有唯一性(虽然可以改),但一般大厂是自己买的 地址段~~~

我这边这么多年都没发现这情况.
作者: 飞菜鸟    时间: 2019-8-27 12:29
如果重点是防小偷的话,那就搞个人像识别系统,陌生人进屋就会给你发消息提醒
作者: zgz715    时间: 2019-8-28 02:47
很好很不错
作者: 喜羊羊    时间: 2019-8-28 08:48
HomeAssistant 可以使用手机当服务器
作者: a1073247229    时间: 2019-8-28 09:36
楼主说得好:smile::smile:
作者: b280444623    时间: 2019-8-28 23:11
ww5223017240 发表于 2019-8-24 13:09
另外提醒下,很多手机的MAC都不是固定的,每次联网都会变

是ip吧   Mac地址可以在路由器里绑定ip   一般Mac 地址不变的 除非人为  类似于电脑网卡 更改
作者: ww5223017240    时间: 2019-8-28 23:35
b280444623 发表于 2019-8-28 23:11
是ip吧   Mac地址可以在路由器里绑定ip   一般Mac 地址不变的 除非人为  类似于电脑网卡 更改 ...

不是IP,是MAC,绑不了,手上记得试过3个,都会变,据说是软MAC
作者: zhao4515    时间: 2019-8-29 10:19
你说的这些功能确实是一个APP就能解决的,但是你可知道现在既能编程又能设计硬件的人,一般都是团队,分别负责软件和硬件,能一个人搞定软硬件可是少之又少啊,而且手机的话输入输出接口不好搞。可以给你提供一个建议,手机跟单片机可以放在一起的话,通信可以不用靠WIFI,用音频,这样开发起来是不是能简单一些,至于说手机读取路由器发现主人手机联网,ping是个好方法
作者: b280444623    时间: 2019-8-29 18:08
ww5223017240 发表于 2019-8-28 23:35
不是IP,是MAC,绑不了,手上记得试过3个,都会变,据说是软MAC

可能是虚拟的
作者: 大头文    时间: 2019-8-30 13:40
liyuqing0318 发表于 2019-8-25 06:39
用小电脑加UPS,这得多大体积,怎么隐藏。你打算让小偷直接打包带走吗?

话说我发现很多门头店里的监控 ...

很久以前网上看过一个新闻,有小偷进店偷东西,没找到钱,看到监控的显示器画面,害怕了,于是把显示器拆走了……
作者: sky84722    时间: 2019-8-30 14:45
学习一下,谢谢楼主分享。
作者: 261307853    时间: 2019-8-30 18:24
说了一大堆,等于啥也没说
作者: fryefryefrye    时间: 2019-8-30 19:03
我已经做好的系统:
1:一台树莓派作为中央数据服务器。
2:ESP8266,自带mcu作为各个被控设备的节点。
3:每个房间一个手机贴在墙上,作为触摸操作屏。

315/433 mhz 我尽量还是淘汰掉了,因为是单向通信,无法获得是否控制成功,也无法获得当前灯是亮是灭,是否被本地控制开关控制过。一律用ESP8266节点代替。
作者: fryefryefrye    时间: 2019-8-30 21:55
b280444623 发表于 2019-8-28 23:11
是ip吧   Mac地址可以在路由器里绑定ip   一般Mac 地址不变的 除非人为  类似于电脑网卡 更改 ...

Android8.0 开始,为了防止用户的手机被各种有不可告人目的的wifi追踪。现在每次连接都用一个随机的MAC地址。

至于苹果,很早已经就是这么干了。
作者: yhky    时间: 2019-8-31 07:56
用小电脑觉得功耗高,单片机性能又不够的,机顶盒可能非常适合你
作者: liyuqing0318    时间: 2019-8-31 10:11
fryefryefrye 发表于 2019-8-30 21:55
Android8.0 开始,为了防止用户的手机被各种有不可告人目的的wifi追踪。现在每次连接都用一个随机的MAC地 ...

看样手机每次连上网都要主动向外设报告自己的IP地址了,难度增加一点点。。
作者: liyuqing0318    时间: 2019-8-31 10:25
本帖最后由 liyuqing0318 于 2019-8-31 10:27 编辑
fryefryefrye 发表于 2019-8-30 19:03
我已经做好的系统:
1:一台树莓派作为中央数据服务器。
2:ESP8266,自带mcu作为各个被控设备的节点。

各有优缺点吧,315/433 mhz 的低功耗比较不错,传输距离比较远,可以探测较远的又不方便接电的场合使用。算是安防必备吧。

用ESP8266,自带mcu作为各个被控设备的节点,是非常好的主意,适合没有遥控功能的设备。

我想用ESP8266和红外发射管配合,增加手机红外遥控的空间和距离。现在家电,高级的有WIFI遥控,低级的红外遥控家电比较多。没有遥控功能的家电才考虑自己添加ESP8266模块来遥控,要处理电源和安装空间,也比较麻烦。

高级家电设备自带的WIFI遥控,要先破译出来遥控指令,也可能要权限之类,也可能还要依附于厂家的云服务,反而不如ESP8266加红外发射管来的简单。

作者: liyuqing0318    时间: 2019-8-31 10:52
本帖最后由 liyuqing0318 于 2019-9-1 09:56 编辑

[attach]368495[/attach]


上图为信号接收示意图。控制示意有空我再补上。
充电器就是外设,带射频与WIFI功能 ,将探头的开关量通过路由传递给手机,通过手机APP,由用户自主决定需要启动什么场景。



作者: jdq116    时间: 2019-8-31 13:48
home assistant 可以了解一下,楼主要的功能基本能实现
作者: fryefryefrye    时间: 2019-8-31 14:37
liyuqing0318 发表于 2019-8-31 10:25
各有优缺点吧,315/433 mhz 的低功耗比较不错,传输距离比较远,可以探测较远的又不方便接电的场合使用。 ...

ESP8266确实耗电,必须有电源线供电才行,安防部分,我还是有315/433设备,而且家里有一个8266节点带了315/433模块作为转发基站,把信号转换成wifi,转发给树莓派服务器。

我的8266节点最多的就是加装在空调上的,直接取空调控制板的5v电源,然后把原机控制板上的红外接收头的输出引脚飞线出来,接8266,监控平时用遥控器直接控制的信息。然后再焊接了一个红外发光二极管在8266上,可以自己发送信号控制空调。这样做到双向的信息交换,能控制,能监控。而且现在都是变频空调,又加了个功率计也接在8266上。挺好用的。
[attach]367533[/attach]


作者: liyuqing0318    时间: 2019-9-1 07:09
fryefryefrye 发表于 2019-8-31 14:37
ESP8266确实耗电,必须有电源线供电才行,安防部分,我还是有315/433设备,而且家里有一个8266节点带了315 ...

求你的:“有一个8266节点带了315/433模块作为转发基站,把信号转换成wifi,”的程序。:biggrin:

这两天我正在研究ESP8266和315射频这两个模块结合的程序,既然你有现成的,是否能发来看看。


作者: 778702918    时间: 2019-9-1 07:28
ww5223017240 发表于 2019-8-25 10:23
你想多了,小电脑可以一个路由大小,UPS也不用放在一起,拉条线就行,手机小就不会被带走吗,不是更容易 ...

你的手机不是锁柜子里了吧?是锁保险箱里面去了吧?难道你家的保险箱是木头做的,柜子才是全铁做的???怒在下无知
作者: fryefryefrye    时间: 2019-9-1 08:33
liyuqing0318 发表于 2019-9-1 07:09
求你的:“有一个8266节点带了315/433模块作为转发基站,把信号转换成wifi,”的程序。

这两天 ...

我四年前装修的时候,并不知道ESP8266,当年为了实现所谓的智能家居,家里所有的灯的开关,都是用的带315接收的86面板。 另外还有两个电动窗帘是433的。这样家里可以在任意常用位置粘贴遥控器,实现在家只要开关灯,基本上伸手按一下就行,不用跑来跑去。

现在用8266和树莓派做成了智能中央控制系统之后,发现315的通信不可靠问题非常麻烦,比如出门的时候,关闭所有的灯,要315转发基站把所有的灯的关闭命令都发一边,10多个灯,要花10多秒,而且如果关闭失败,中央控制服务器就不知道的。

下一步计划是把灯的控制器改成8266主控+315接收。既可以用遥控器直接控制,也可以从wifi控制与监控。

下面的代码是我现在用的转发基站,8266每秒一次向主服务器查询是否有315/433命令需要发送,同时也算是心跳包。查询到需要发送命令,就从315或者433模块发送出去。  硬件结构就是一个8266+315发送模块+433发送模块+电源。
https://github.com/fryefryefrye/ ... ter/RX/other/rf_esp
作者: liyuqing0318    时间: 2019-9-1 08:34
本帖最后由 liyuqing0318 于 2019-9-1 08:36 编辑
778702918 发表于 2019-9-1 07:28
你的手机不是锁柜子里了吧?是锁保险箱里面去了吧?难道你家的保险箱是木头做的,柜子才是全铁做的??? ...

我是想手机方便隐藏,比如放在挂画后面,钟后面,花瓶里面,饮水机里等等不起眼的角落里。手机一般比较小巧,又很薄,应该能藏身的地方很多。而不是放在保险柜里。尤其是小电脑罗列出一堆功能,体形又太大,放家里都占地方。在这里不讨论这个问题吧,大家想想能怎么实现功能最重要。


作者: liyuqing0318    时间: 2019-9-1 09:09
本帖最后由 liyuqing0318 于 2019-9-1 09:25 编辑
zhao4515 发表于 2019-8-29 10:19
你说的这些功能确实是一个APP就能解决的,但是你可知道现在既能编程又能设计硬件的人,一般都是团队,分别 ...

硬件外设ESP8266+433射频+PIC,我来搞,

要求:
1.做为中央处理器的手机每次连路由,如果IP发生变化要向 外设 通告自己的IP地址,(外设IP地址固定,由路由绑定。)主要为了防止楼上讲的软MAC的问题。(我想安卓8.0能用软MAC,难道就不保留MAC锁定的功能?)外设要记录中央手机的IP。

2.当外设收到,中央处理器手机每1秒发出一条巡检指令192.168.2.12+99时,外设应在0.5秒内回应192.168.2.12+00,已表明自己在线并且工作正常。

3.外设收到射频探头信号,PIC要向中央处理器手机,报自己的IP地址+探头编号。例:192.168.2.12 + 03。意思为192.168.2.12号卫生间外设,第3号探头有触发动作。

4.外设有一个按键用来备案射频探头的地址码。依照备案的先后顺序,依次编为1、2、3号探头。






作者: liyuqing0318    时间: 2019-9-1 09:32
本帖最后由 liyuqing0318 于 2019-9-1 09:49 编辑
fryefryefrye 发表于 2019-9-1 08:33
我四年前装修的时候,并不知道ESP8266,当年为了实现所谓的智能家居,家里所有的灯的开关,都是用的带315 ...

打开了,英文注释,我水平菜呀,看起来费劲。

硬件结构就是一个8266+315发送模块+433发送模块+电源。难道没有个单片机做主控协调这三个模块?
315做接收控制,后四位没加按键区分吗?如果加了按键区分,就可以多发几遍关灯命令,总有一遍能关闭掉吧。
[attach]368482[/attach]

我需要的是个8266+315接收模块或433接收送模块+单片机+电源的程序:lol::lol:。

望把您的实物贴个图来瞻仰一下:handshake:。。。。




作者: ww5223017240    时间: 2019-9-1 10:22
liyuqing0318 发表于 2019-9-1 08:34
我是想手机方便隐藏,比如放在挂画后面,钟后面,花瓶里面,饮水机里等等不起眼的角落里。手机一般比较小 ...

问题是手机的信号普遍都不太好,你再藏起来信号就更是个问题了
作者: fryefryefrye    时间: 2019-9-1 17:30
liyuqing0318 发表于 2019-9-1 09:09
硬件外设ESP8266+433射频+PIC,我来搞,

要求:

我的中央服务器是树莓派,固定IP。所有各个外设节点记录了服务器IP。外设每秒发送一个UDP数据包给服务器,有数据就发数据,没数据就发空包作为心跳。
作者: fryefryefrye    时间: 2019-9-1 19:09
本帖最后由 fryefryefrye 于 2019-9-1 19:18 编辑
liyuqing0318 发表于 2019-9-1 09:32
打开了,英文注释,我水平菜呀,看起来费劲。

硬件结构就是一个8266+315发送模块+433发送模块+电源。难道 ...

淘宝买 “D1 mini” 或者 “node MCU” 15元左右(功能一样,就是大小差别)。 上面主要是一个ESP8266模块,不仅仅可以WiFi通信,而且本身也可以烧入程序,作为单片机主控使用。一片搞定CPU和通信。 而且自带USB接口,用数据线插上电脑,就可以直接用Arduino环境直接烧写代码进去。如果第一次用USB烧过我例子里的那个带”空中升级“的代码,以后可以直接通过WiFi烧程序,都不需要把节点拆下来接上电脑更新程序。

我给的代码就是arduino的程序,arduino1.8.7环境直接编译烧写进去。当然我的代码是配合我的服务器用的,你只能用来参考。

实物图不方便拍了,硬件很简单,8266+315接收模块或433接收送模块 都接上5v电源。然后ESP8266的两个GPIO引脚分别接到315/433的输入脚。

发送的编码就是你贴的这个EV1527编码。当然带按键区分,必须发送正确的地址和按键才能操作。
作为遥控信号的发送器,你是不知道操作成功还是失败,难道发很多遍?关家里所有的灯,家里10几个灯,全部发一遍就是10多秒,两遍就是20秒,有时候还是会有灯漏关。

所以说状态反馈非常重要。

作者: microxp    时间: 2019-9-1 19:19
你需要的是个贾维斯
作者: liyuqing0318    时间: 2019-9-6 19:53
本帖最后由 liyuqing0318 于 2019-9-8 09:18 编辑

大家 别着急,我一步一步的来,现学现卖。
搜了很多网上关于射频433模块315模块的解码程序,感觉有些乱,这几天下班写了个315MHz模块的解码程序,发射芯片是SC1527。解码模块FY-RX04

程序我注解的比较详细,希望给后来者以启示。原理:
利用自填装定时器T0,每99.82368微秒就定时中断。数据端口跳变时记录高低电平的中断次数,来判断数据位的高低。

/*******************************************************************************
*  标题:                  315射频模块SC1527解码程序                                                                               *
*                                                                                                                                                            *
*  连接方法:参照接线图                                                                                                                                 *
********************************************************************************
*                                                                                                                                                                     *
* 基于普中科技的51开发板测试通过。                                                                                                  *
********************************************************************************/


#include < reg51.h >
#include <intrins.h>
#include <I2C.H>
#include <stdio.h>
#include<Function.h>
#include<string.h>


#define  AT24C02 0xa0     //存储器AT24C02地址   1010 0000

sbit LS138A=P2^2;                    //数码管选择端口
sbit LS138B=P2^3;
sbit LS138C=P2^4;

sbit shiyan=P1^0;                                  //实验
sbit RFRX = P3^2;                 //接RF模块数据脚
sbit KEY_save  = P1^7;                          //存按键
sbit KEY_take  = P1^6;                          //取按键

bit  Head,RF_Head;                                  //RF跳变前的状态;数据头检出标志
unsigned char Step;                      //RF步=中断次数
unsigned char Step_L,Step_H;          //RF低位步数,高位步数
unsigned char RF_bit;                      //RF接收数据串的总位数
unsigned char RF_bit;                      //RF接收数据串的总位数
unsigned long RF_d,RF_data;       //RF315收到的数据

unsigned char KEY_Rec;                          //按键记录

unsigned int  Disp_delay,KEY_delay;        //延时
unsigned int  LedOut[8];                        //数码段显示代码

//此表为 LED 的字模, 共阴数码管 0-9  -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

`

/*******************************************************************/
/********************生成显示数组 ******************** *************/
/*******************************************************************/
void DISPTAB()                  //生成含有8个数码管的显示数组LedOut[n]
{         
   if(++Disp_delay>300)        //主循环每运行1000次1秒就更新一次显示数组
           {     Disp_delay=0;        
                      RF_data++;                 //临时调试
                  LedOut[0]=Disp_Tab[RF_data%100000000/10000000];
                  LedOut[1]=Disp_Tab[RF_data%10000000/1000000];
                  LedOut[2]=Disp_Tab[RF_data%1000000/100000];
                  LedOut[3]=Disp_Tab[RF_data%100000/10000]|0x80; //0x7f小数点

                  LedOut[4]=Disp_Tab[RF_data%10000/1000];
                  LedOut[5]=Disp_Tab[RF_data%1000/100];
                  LedOut[6]=Disp_Tab[RF_data%100/10];
                  LedOut[7]=Disp_Tab[RF_data%10];                                    
             }
}

/*******************************************************************/
/*******     将LedOut[]显示数组发送到数码段进行显示     ************/
/*******************************************************************/
void LEDdisp()                 //驱动显示。
{  unsigned char j,i;
   for( i=0; i<8; i++)
         {                          
           switch(i)            //使用switch 语句控制138译码器,先译出要点亮哪位8;                          
               {            
                        case 0:P0 = 0;LS138A=0; LS138B=0; LS138C=0;   //先关闭P0口,再进行译码   
                                   P0 = LedOut; break;             //将DISPTAB{}程序生成的八个数码段的显示数组LedOut[],依次送入P0口进行显示。                                       
                        case 1:P0 = 0;LS138A=1; LS138B=0; LS138C=0;
                               P0 = LedOut; break;  //138选择具体哪个引脚为L,其它脚都为H。                  
                        case 2:P0 = 0;LS138A=0; LS138B=1; LS138C=0;
                               P0 = LedOut; break;
                        case 3:P0 = 0;LS138A=1; LS138B=1; LS138C=0;
                               P0 = LedOut; break;
                        case 4:P0 = 0;LS138A=0; LS138B=0; LS138C=1;
                               P0 = LedOut; break;
                        case 5:P0 = 0;LS138A=1; LS138B=0; LS138C=1;
                                   P0 = LedOut; break;
                        case 6:P0 = 0;LS138A=0; LS138B=1; LS138C=1;
                                   P0 = LedOut;break;            //将DISPTAB{}程序生成的八个数码段的显示数组LedOut[],依次送入P0口进行显示。                                          
                        case 7:P0 = 0;LS138A=1; LS138B=1; LS138C=1;
                                   P0 = LedOut;break;            //将DISPTAB{}程序生成的八个数码段的显示数组LedOut[],依次送入P0口进行显示。        
               }           
       for (j = 0 ; j<5 ;j++){;} //每1个数码段8的显示间隔时间。整个程序唯一的一个延时,加大j可增加显示亮度,但拖慢了的刷新速度,肉眼可见闪烁
     }
   P0 = 0; //返回主程序时,先关闭LED显示。
}

/*******************************************************************/
/********************  按键程序   ******************** *************/
/*******************************************************************/
void KEY()                        //按键
{  
   if(++KEY_delay>250)                   //主循环500次后0.5秒,按键依然被按下才有效
          {   KEY_delay=100;                                  //超过250就预置成0
                    if(KEY_Rec==(P1&0xc0))                  //两次按键状态一致,&0xc0=11000000屏蔽非按键口。
                  {
                               if(KEY_save==0)                   //存按键被按下
                                      {   KEY_delay=0;          //加大延时2.5秒,防止重复执行
                                              if( RF_data!=0)
                                                               {   char E2P[4],*p=(char *)&RF_data;          //将长整型数据转成四个字节数组
                                                                    memcpy(E2P,p,4);                                        //将长整型数据转成四个字节数组
                                                                    ISendStr(AT24C02, 0 , &E2P[0], 4);  // ISend=P3^7;  存                                                               
                                                               }
                                       }
                         if(KEY_take==0)                  //取按键被按下
                                      {          long i;
                                                  KEY_delay=0;          //加大延时2.5秒,防止重复执行
                                                  IRcvStr (AT24C02, 0 , &E2P[0], 4);  // IRcv =P3^6;  读EEPROM参数  
                                                  i       = E2P[0];                                          //四个字节的数组转换成一个32位的整型
                                                  i       =(i<<8);
                                                  i       =        i+E2P[1];
                                                  i       =(i<<8);         
                                                  i       =        i+E2P[2];
                                                  i       =(i<<8);
                                                  RF_data =        i+E2P[3];
                                       }
                          }
              KEY_Rec = (P1&0xc0);                 //将P3口五个按键状态进行记录
           }
}

/*******************************************************************/
/********************  分析程序   ******************** *************/
/*******************************************************************/
void analyse()                  //分析程序
{         
;
}

/*******************************************************************/
/*******                主程序                                ************/
/*******************************************************************/
void main(void)
{                  
   TMOD = 0x02;      //定时器T0工作方式2自动装入八位计数器  
   TH0  = 0xa3;      //计92个数,时间99.82368微秒。
   TR0  = 1;         //开启T0定时器           
   ET0  = 1;                  //允许定时器中断                                                                             
   EA   = 1;         //开总中断

   while(1)
   {
         DISPTAB();                           //生成含有8个数码管的显示数组LedOut[n]
         LEDdisp();                           //驱动显示。
         KEY();                               //按键程序。
         analyse();                           //分析
   }
}


/****************************************************
           T0 (99.82368微秒)定时中断(将收到的数据存于 RF_data)
/*****************************************************/
void Time0(void) interrupt 1   //定时器1的中断号1,定时器0的中断号0,外部中断1, 2外部中断2,串口中断4
{         
     Step++;
         if((!RFRX) & (Head))                                      //端口跳低,
                      {  Step_H=Step;Step=0;Head=0;   //记录高步数,清步,标低。
                          if (RF_Head)                                                   //数据头已被检出
                               {        if (Step_H>7)                                  //7步为高        
                                               {  RF_d =((RF_d<<1)+ 1);      //左移加1存正;
                                                   RF_bit++;                                                                 
                                                   Step_L=Step_H=Step=0;    //清低位高位步数
                                                }
                                        else  {  RF_d =  RF_d<<1;              //否则左移为负;
                                                   RF_bit++;                           
                                                   Step_L=Step_H=Step=0;    //清低位高位步数  
                                                }
                                }
                     }

         if((RFRX) & (!Head))                        //端口跳高,
                     {  Step_L=Step;Step=0;Head=1;  }              //记录低步数,清步,标高。

          if((Step_H==4)&(Step_L==133))                             //RF数据头被检出,(通过P1.0在T0中断反转状态,示波器直接点出数据)
                     {  RF_Head=1;Step_L=Step_H=Step=0;}    //标记数据头;清低位高位步数

         if(RF_bit>24)          //接收地址有20个位,按键码有4个位                                                     
                     {   RF_bit = 0;                       //位数清零
                          RF_Head     = 0;               //清零数据头
                          RF_data = RF_d;              //RF接收到的数据送去显示
                          RF_d  = 0;                        //清接收到的数据
                          Step_L=Step_H=0;          //清低位高位步数
                      }
}




补充内容 (2019-9-18 15:19):
下面有改进版
作者: lemontreenm    时间: 2019-9-9 02:26
楼主纯粹的垃圾佬思想。
但是你想过没有,这样做硬件是省钱了,但是软件成本会无限上升,因为每个人的手机都不一样,每个人都需要定制开发。而且能买到的其他安防模块各家自己的通信协议都不一样,有些甚至还有加密,你要花多少时间去适配?不用上班不用生活了?
更何况手机摄像头是固定的,但是现在的智能家居摄像头很多都是带云台能遥控或者自动转动的,这在使用体验上完全不同。
安防上来说你拿个手机放家里当智能/防盗中心,那你有没有想过万一进贼了这个手机会被偷,被偷了后你这安防就全废了,因为录像存手机上的,而且他们会关机。当然,智能家居也变智障了。你还要防着那贼下次直接拿这手机进你家,你的智能家居会给他开灯开空调甚至开门。
作者: lemontreenm    时间: 2019-9-9 02:34
飞菜鸟 发表于 2019-8-27 12:29
如果重点是防小偷的话,那就搞个人像识别系统,陌生人进屋就会给你发消息提醒 ...

这个系统没几百万搞不定
作者: lemontreenm    时间: 2019-9-9 02:46
fryefryefrye 发表于 2019-9-1 08:33
我四年前装修的时候,并不知道ESP8266,当年为了实现所谓的智能家居,家里所有的灯的开关,都是用的带315 ...

灯是否关闭其实不一定要让灯自己反馈的,你可以通过功率检测、亮度监测来间接获知,基本上不会有误报。
你如果不急,可以等我的LED灯驱动,到时免费寄你两套试用
作者: fryefryefrye    时间: 2019-9-9 09:31
lemontreenm 发表于 2019-9-9 02:46
灯是否关闭其实不一定要让灯自己反馈的,你可以通过功率检测、亮度监测来间接获知,基本上不会有误报。
...

对于灯,用功率,亮度之类的,属于高射炮打蚊子了。

我现在用ESP8266驱动继电器开关灯。 ESP8266可以通过   墙壁开关/315/WiFi  三个方式控制。

所以不管用哪种方式控制的, 单片机都能准确的知道继电器状态。
作者: lemontreenm    时间: 2019-9-9 09:42
fryefryefrye 发表于 2019-9-9 09:31
对于灯,用功率,亮度之类的,属于高射炮打蚊子了。

我现在用ESP8266驱动继电器开关灯。 ESP8266可以通 ...

我打算做个LED灯驱动,能遥控器调光调色,能用普通开关控制开关,预留通讯接口可以接8266模块
作者: fryefryefrye    时间: 2019-9-9 10:11
lemontreenm 发表于 2019-9-9 09:42
我打算做个LED灯驱动,能遥控器调光调色,能用普通开关控制开关,预留通讯接口可以接8266模块 ...

你这个控制器,需要一个可编程的单片机吗?如果需要的话,不如直接用一片8266算了,既可以做主控,又可以做通信。
作者: lemontreenm    时间: 2019-9-9 12:23
fryefryefrye 发表于 2019-9-9 10:11
你这个控制器,需要一个可编程的单片机吗?如果需要的话,不如直接用一片8266算了,既可以做主控,又可以 ...

要单片机的,也想过直接用8266,但是8266成本还是太高,我是准备量产的,显然傻瓜驱动的市场更大。所以我准备先做傻瓜驱动。
如果有市场或者有需要,可以直接加个8266模块就能联网。主要考虑自己开发的东西没有其他组件和软件配套,除了一票小众DIYer对其他人来说联网并没有带来足够的优势。
作者: yang77778888    时间: 2019-9-9 12:47
研究吧,俺岁数大了没精力折腾了,前几年还想着把手机改成工业用的人机界面,因为买个触摸屏太他娘的贵了,淘汰手机速度快触控灵敏比人机界面电阻屏好多了
作者: liyuqing0318    时间: 2019-9-10 19:53
lemontreenm 发表于 2019-9-9 02:26
楼主纯粹的垃圾佬思想。
但是你想过没有,这样做硬件是省钱了,但是软件成本会无限上升,因为每个人的手机 ...

数码之家是干什么的?DIY是什么精神?

做为电子爱好者我们在追求什么?

用简单的东西处理简单的事物,而不是罗列一堆高级硬件,彰显自己的财力有多雄厚!

将自己的想法,通过不断的学习来实现,我认为就是DIY的精神所在!

最近通过写这段程序让我又了解和巩固了很多知识点,我认为这就够了。



作者: fryefryefrye    时间: 2019-9-10 21:28
lemontreenm 发表于 2019-9-9 12:23
要单片机的,也想过直接用8266,但是8266成本还是太高,我是准备量产的,显然傻瓜驱动的市场更大。所以我 ...

你量产的话,估计用433/315遥控。

实际上淘宝上类似的产品售价要到50元,也不便宜。

用WiFi的话,服务器是大问题,我是DIY,所以无所谓,自己搭一个就行。你加了8266模块的话,网络部分也蛮复杂的。先把傻瓜驱动卖起来吧。
作者: lemontreenm    时间: 2019-9-11 08:13
fryefryefrye 发表于 2019-9-10 21:28
你量产的话,估计用433/315遥控。

实际上淘宝上类似的产品售价要到50元,也不便宜。

准备用红外貌控,家用的时候体验和成本比无线强多了。
淘宝已经有实体开关和遥控不冲突的驱动或者开关了?我看到的都是成本很高的方案,50块的没看到。你看到的话发个链接我看下?
作者: jachal2009    时间: 2019-9-11 10:06
想法丰满现实骨感
作者: fryefryefrye    时间: 2019-9-11 19:22
本帖最后由 fryefryefrye 于 2019-9-11 19:23 编辑
lemontreenm 发表于 2019-9-11 08:13
准备用红外貌控,家用的时候体验和成本比无线强多了。
淘宝已经有实体开关和遥控不冲突的驱动或者开关了 ...

实体开关和遥控不冲突,这些都行啊。随便按墙上的按钮,或者按遥控器,都没问题。

我就把遥控器贴在床头,晚上睡觉起夜,伸手就按。你用红外的话,达不到这么好的效果的。


[attach]384110[/attach]


作者: lmy2003    时间: 2019-9-11 20:21
开发智能家居的目的就是卖硬件,装旧手机上要少卖钱了
作者: lemontreenm    时间: 2019-9-12 09:51
fryefryefrye 发表于 2019-9-11 19:22
实体开关和遥控不冲突,这些都行啊。随便按墙上的按钮,或者按遥控器,都没问题。

我就把遥控器贴在床头 ...

你说的这些我都看过,也都知道。对于我这个强迫症患者来说无法忍受。
1、成本不便宜,这个你也说了。
2、难看。这些东西很难和家里其他的开关插座保持形象统一,这基本上不可能做到。
3、很多类似产品做工质感很差(这其实和上一条属于同一性质的)。
4、只能控制开、关,相对普通开关并没有本质区别。但是价钱至少高了5倍。

我想做的这个不是这种类型的,墙上的实体开关还是用传统最普通的那种开关,想用哪家都行,这在外观上可以保持全屋统一,质感也会好很多。同时做到开关和遥控不冲突。至于你说把遥控器贴在床头,那是不需要的,床头的实体开关就能控制。遥控器爱放哪里放哪里,只是调整亮度、色温的时候需要遥控器。

我觉得智能家居是让人用着舒服、方便的。所以我的理念是不为了智能而智能,只为了方便而作改进
作者: fryefryefrye    时间: 2019-9-12 18:58
lemontreenm 发表于 2019-9-12 09:51
你说的这些我都看过,也都知道。对于我这个强迫症患者来说无法忍受。
1、成本不便宜,这个你也说了。
2、 ...

这种单火线86面板基本上是在现有照明布线体系下,能保证两种方式都可以控制的唯一方法了。
用普通开关,断电的时候,装在灯上的遥控接收器就没用了。
不知道你是如何解决这个问题的。
作者: xny    时间: 2019-9-14 23:25
去了解一下ESP8266  
作者: xny    时间: 2019-9-14 23:28
domoticz这个开源的平台 搭配ESP8266  可以考虑一下  
作者: liyuqing0318    时间: 2019-9-17 16:58
xny 发表于 2019-9-14 23:28
domoticz这个开源的平台 搭配ESP8266  可以考虑一下

谢谢我的51单片机,加SC1527模块和ESP8266软件和硬件硬件初型已设计完成。
作者: liyuqing0318    时间: 2019-9-18 15:21
lmy2003 发表于 2019-9-11 20:21
开发智能家居的目的就是卖硬件,装旧手机上要少卖钱了

呵呵,实践证明卖硬件的赚不过卖软件的,卖软件的赚不过卖服务的。
作者: liyuqing0318    时间: 2019-9-18 15:29
fryefryefrye 发表于 2019-9-12 18:58
这种单火线86面板基本上是在现有照明布线体系下,能保证两种方式都可以控制的唯一方法了。
用普通开关, ...

断电时,开关两端有电压,有电压就可以采用微电流方式取电来用,当然前提是遥控电路要足够低功耗。
通电时,开关两端电压消失,串电流互感器取电,成本可不低。。。。

而且上面需要两套取电方式,我是不建议这么用。

建议原有机械开关当主开关用,平时常开。遥控开关装于灯头上,方便取电。


作者: liyuqing0318    时间: 2019-9-18 15:30
本帖最后由 liyuqing0318 于 2019-9-18 15:52 编辑

想要的外设大部分功能已经完成。代码贴出。欢迎坛友跟进。。。。。。。
想要的外设大部分功能已经完成。代码贴出。欢迎坛友跟进。。。。。。。
想要的外设大部分功能已经完成。代码贴出。欢迎坛友跟进。。。。。。。

智能家居设计构想。
[attach]392679[/attach]


高大尚的开发这里没有,因为我还没有这样的城堡。
[attach]392662[/attach]


硬件贴图
[attach]392663[/attach][attach]392664[/attach][attach]392665[/attach]

/*******************************************************************************
*  标题:                  315MHz射频模块SC1527解码程序                         *
*                                                  ESP8266通信程序。                                                                           *
*  连接方法:参照接线图                                                                                *
********************************************************************************
*   本程序是为了将315/433射频模块 (基于SC1527模块)发射出的无线信号,用FY-RX04无线
*   接收后用51单片机进行解码后,如与地址库码相对应,就将对应信息通过ESP8266向互联网中
*   其它IP客户端发送。                                                                                                   *
*   射频模块可录入20组探头信息,存于24C02。上电时加载。数量可扩展。。。
*            
*        DISPTAB();        LEDdisp();        两个显示程序块不是必需,只为调试方便
*   SC1527模块头码 差值大收到干扰码率会升高。
*        录入探头地址时,先触发探头,再按KEY_save键,led_g闪烁后松开,即录入成功。
*        依次录入20组探头,重启后有效。
*
*
*                                                                        
*                                                                转载请注明来自数码之家        liyuqing0318
********************************************************************************/


#include < reg51.h >
#include <intrins.h>
#include <I2C.H>
#include <stdio.h>
#include<Function.h>
#include<string.h>


#define  AT24C02 0xa0     //存储器AT24C02地址   1010 0000

sbit LS138A=P2^2;                    //数码管选择端口
sbit LS138B=P2^3;
sbit LS138C=P2^4;

sbit shiyan=P1^0;                                  //实验测试脚
sbit RFRX = P3^2;                 //接RF模块数据脚
sbit KEY_save  = P1^7;                          //存按键
sbit KEY_take  = P1^6;                          //取按键
sbit led_g     = P2^7;                          //状态指示灯


bit  Head,RF_Head;                                    //RF跳变前的状态;数据头检出标志
unsigned char Step;                        //RF步=中断次数
unsigned char Step_L,Step_H;            //RF低位步数,高位步数
unsigned char RF_bit;                        //RF接收数据串的总位数  
unsigned long RF_d,RF_one,RF_data,RF_data1; //RF315收到的数据

unsigned char KEY_Rec;                            //按键记录
unsigned char Sen_Number;                    //传感器数量
unsigned char E2P[4];                        //24C02存取临时数组
unsigned xdata Sensor[20][4];             //传感器地址库取出后的二维数组

unsigned int  Disp_delay,KEY_delay;        //延时

unsigned int  LedOut[8];                        //数码段显示代码
//此表为 LED 的字模, 共阴数码管 0-9  -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
/*******************************************************************/
unsigned char r;                        //数组指针
unsigned char Wifi_send[30];   //接收到WIFI送来数据组,大小为30个字节的数组



/*******************************************************************/
/*******************延时程序****************************************/
/*******************************************************************/
void Delay1ms( unsigned int j)
{
          while(j>1){j--;}
}

/*******************************************************************/
/********************生成显示数组 ******************** *************/
/*******************************************************************/
void DISPTAB()                  //生成含有8个数码管的显示数组LedOut[n]
{         
   if(++Disp_delay>500)        //主循环每运行1000次1秒就更新一次显示数组
           {  Disp_delay=0;        
//                      RF_data=RF_data+100;                 //临时调试
          LedOut[0]=Disp_Tab[RF_data%100000000/10000000];
          LedOut[1]=Disp_Tab[RF_data%10000000/1000000];
          LedOut[2]=Disp_Tab[RF_data%1000000/100000];
          LedOut[3]=Disp_Tab[RF_data%100000/10000]|0x80; //0x7f小数点

              LedOut[4]=Disp_Tab[RF_data%10000/1000];
          LedOut[5]=Disp_Tab[RF_data%1000/100];
          LedOut[6]=Disp_Tab[RF_data%100/10];
          LedOut[7]=Disp_Tab[RF_data%10];                                    
             }
}
   
/*******************************************************************/
/*******     将LedOut[]显示数组发送到数码段进行显示     ************/
/*******************************************************************/
void LEDdisp()                 //驱动显示。
{  unsigned char j,i;
   for( i=0; i<8; i++)
         {                          
           switch(i)            //使用switch 语句控制138译码器,先译出要点亮哪位8;                          
               {            
                        case 0:P0 = 0;LS138A=0; LS138B=0; LS138C=0;   //先关闭P0口,再进行译码   
                                   P0 = LedOut; break;             //将DISPTAB{}程序生成的八个数码段的显示数组LedOut[],依次送入P0口进行显示。                                       
                case 1:P0 = 0;LS138A=1; LS138B=0; LS138C=0;
                               P0 = LedOut; break;  //138选择具体哪个引脚为L,其它脚都为H。                  
                case 2:P0 = 0;LS138A=0; LS138B=1; LS138C=0;
                               P0 = LedOut; break;
                case 3:P0 = 0;LS138A=1; LS138B=1; LS138C=0;
                               P0 = LedOut; break;
                        case 4:P0 = 0;LS138A=0; LS138B=0; LS138C=1;
                               P0 = LedOut; break;
                        case 5:P0 = 0;LS138A=1; LS138B=0; LS138C=1;
                                   P0 = LedOut; break;
                        case 6:P0 = 0;LS138A=0; LS138B=1; LS138C=1;
                                   P0 = LedOut;break;            //将DISPTAB{}程序生成的八个数码段的显示数组LedOut[],依次送入P0口进行显示。                                          
                        case 7:P0 = 0;LS138A=1; LS138B=1; LS138C=1;
                                   P0 = LedOut;break;            //将DISPTAB{}程序生成的八个数码段的显示数组LedOut[],依次送入P0口进行显示。        
               }           
       for (j = 0 ; j<5 ;j++){;} //每1个数码段8的显示间隔时间。整个程序唯一的一个延时,加大j可增加显示亮度,但拖慢了的刷新速度,肉眼可见闪烁
     }
   P0 = 0; //返回主程序时,先关闭LED显示。
}

/*******************************************************************/
/********************  多按键分解程序   ******************** *************/
/*******************************************************************/
void KEY()                        //多按键检测程序
{  
   if(++KEY_delay>600)                   //主循环500次后0.5秒,按键依然被按下才有效
          {   KEY_delay=400;                                  //超过250就预置成0
                    if(KEY_Rec==(P1&0xc0))                  //两次按键状态一致,&0xc0=11000000屏蔽非按键口。
                  {
                       if((KEY_save==0)&(RF_data!=0))                   //存24C02按键被按下
                                      {   if (Sen_Number<20)//存储高于20个,就从头覆盖。
                                                   {   char E2P[4], *p=(char *)&RF_data;          //将一个长整型数据转成四个字节型数组
                                                       memcpy(E2P,p,4);                                            //将一个长整型数据转成四个字节型数组                                                               
                                                       KEY_delay =0;         //加大延时2.5秒,防止重复执行
                                                       led_g     =0;     //打开指示灯
                                                       ISendStr(AT24C02, Sen_Number*4, &E2P[0], 4);  // ISend=P3^7;  存  //每次跳转4个空间  
                                                                   Sen_Number++;            
                                                           }
                                                  else     Sen_Number=0;
                                          }
                         if(KEY_take==0)                  //取24C02按键被按下
                                      {   
                                              if (Sen_Number<20)
                                                       {   long i;         
                                                       KEY_delay=0;          //加大延时2.5秒,防止重复执行                                                                    
                                                       IRcvStr (AT24C02, Sen_Number*4, &E2P[0], 4);  // IRcv =P3^6;  读EEPROM数据  
                                                                   led_g     =0;     //打开指示灯
                                                           Sensor[Sen_Number][0]= E2P[0];         //加载24C02的数据进二维数组
                                                           Sensor[Sen_Number][1]= E2P[1];
                                                           Sensor[Sen_Number][2]= E2P[2];
                                                           Sensor[Sen_Number][3]= E2P[3];                  
                                                           i = (i =   Sensor[Sen_Number][0])<<8;          //字节型数组的4个数据转换成1个32位长整型数RF_data           
                                                           i = (i = i+Sensor[Sen_Number][1])<<8;          //字节型数组的4个数据转换成1个32位长整型数RF_data            
                                                           i = (i = i+Sensor[Sen_Number][2])<<8;          //字节型数组的4个数据转换成1个32位长整型数RF_data         
                                                           RF_data= i+Sensor[Sen_Number][3];                  //字节型数组的4个数据转换成1个32位长整型数RF_data
                                                                   Sen_Number++;
                                                           }         
                                                  else           Sen_Number=0;
                                                      
                              }                  
                          }
              KEY_Rec = (P1&0xc0);                 //将P3口五个按键状态进行记录
                  led_g   = 1;                   //关闭指示灯
           }
}

/*******************************************************************/
/*******************WIFI模块初始化**********************************/
/*******************************************************************/
void WiFi_Init()
{        
        Delay1ms(6000);
        Delay1ms(6000);
        Delay1ms(6000);
        Delay1ms(6000);
        Delay1ms(6000);
        Delay1ms(6000);
        strcpy(Wifi_send,"AT+CIPMUX=1\r\n"); //将字符串存入数组中
        TI = 1;                  //进入串口中断程序
        Delay1ms(4000);
        strcpy(Wifi_send,"AT+CIPSERVER=1,11883\r\n");        //将字符串存入数组中
         TI = 1;                  //进入串口中断程序
}

/*******************************************************************/
/********************  加载探头地址   *************** ************/
/*******************************************************************/
void Sensor_Library()            //初始化加载探头地址程序,执行一次加载一个探头地址
{                                                               
                           IRcvStr (AT24C02, Sen_Number*4, &E2P[0], 4);  // IRcv =P3^6;  读EEPROM参数  
                           led_g     =0;     //打开指示灯
                           Sensor[Sen_Number][0]= E2P[0];         //加载24C02的数据进Sensor二维数组
                           Sensor[Sen_Number][1]= E2P[1];
                           Sensor[Sen_Number][2]= E2P[2];
                           Sensor[Sen_Number][3]= E2P[3];        
                           Sen_Number++;                         //每次加载一组数据4个字节
}
  
/*******************************************************************/
/********************  分析程序   ******************** *************/
/*******************************************************************/
void analyse()                  //分析RF_data与Sensor[m][0]哪组数据相匹配
{  unsigned char a,b,c,d,m;            //m为匹配代码
   if(RF_data1!=RF_data)            //RF数据发生改变时
           {  char E2P[4],*p=(char *)&RF_data;          //将一个长整型数据转成四个字节型数组
                            memcpy(E2P,p,4);                            //将一个长整型数据转成四个字节型数组
                          for (m=0; m<8; m++)                                        //将20个探头地址拿来比较
                                {
                                    a = Sensor[m][0]; b = Sensor[m][1];c = Sensor[m][2]; d = Sensor[m][3];//为兼容Keil编译器分为两行                                                                                                            
                                    if(a==E2P[0] & b==E2P[1] & c==E2P[2] & d==E2P[3])  //如果4组数据匹配成功
                                                      {         //   unsigned char r;          //数组指针
                                                                led_g = 0;                    //打开指示灯,
                                    strcpy(Wifi_send,"AT+CIPSEND=0,10\r\n");  //AT+CIPSEND=0,8   发送给客户端0号,发送的字节数10
                                        TI = 1;                 //进入串口中断程序
                                        Delay1ms(4000);
                                                                        switch(m)            //第几组数据匹配成功,         
                                             {            
                                                      case 0:   strcpy(Wifi_send,"SC1527E00A"); break; //发对应的码给wifi                                       
                                              case 1:   strcpy(Wifi_send,"SC1527E00B"); break;               
                                              case 2:   strcpy(Wifi_send,"SC1527E00C"); break;
                                              case 3:   strcpy(Wifi_send,"SC1527E00D"); break;
                                                      case 4:   strcpy(Wifi_send,"SC1527E00E"); break;
                                                                                  case 5:   strcpy(Wifi_send,"SC1527E00F"); break; //发对应的码给wifi                                       
                                              case 6:   strcpy(Wifi_send,"SC1527E00G"); break;               
                                              case 7:   strcpy(Wifi_send,"SC1527E00H"); break;         
                                              case 8:   strcpy(Wifi_send,"SC1527E00I"); break;
                                                      case 9:   strcpy(Wifi_send,"SC1527E00J"); break;
                                                                                  case 10:  strcpy(Wifi_send,"SC1527E01K"); break; //发对应的码给wifi                                       
                                              case 11:  strcpy(Wifi_send,"SC1527E01L"); break;               
                                              case 12:  strcpy(Wifi_send,"SC1527E01M"); break;
                                              case 13:  strcpy(Wifi_send,"SC1527E01N"); break;
                                                      case 14:  strcpy(Wifi_send,"SC1527E01O"); break;
                                                                                  case 15:  strcpy(Wifi_send,"SC1527E01P"); break; //发对应的码给wifi                                       
                                              case 16:  strcpy(Wifi_send,"SC1527E01Q"); break;               
                                              case 17:  strcpy(Wifi_send,"SC1527E01R"); break;
                                              case 18:  strcpy(Wifi_send,"SC1527E01S"); break;
                                                      case 19:  strcpy(Wifi_send,"SC1527E01T"); break;            
                                                                                 }                                       
                                        TI = 1;             //进入串口中断程序
                                                          }            
                                         }                  
                          RF_data1=RF_data;
                   }
}
  
/*******************************************************************/
/*******                主程序                          ************/
/*******************************************************************/
void main(void)             //主程序
{  
   TMOD = 0x22; //定时器T0,T1为自动装入八位计数器
   //////////初始化串口///////////////////
   SCON = 0x50;      // REN=1允许串行接受状态,串口工作模式1
   PCON|= 0x80;      //        SMOD位置1,波特率加倍
   TH1  = 0xFd;      // baud*2  /* 波特率19200、数据位8、停止位1。效验位无 (11.0592);设置8位自动加载计时器定时时间,
   TL1  = 0xF3;      // 公式TL1 = 256- fosc(SMOD+1)/(32*12*波特率)
   TR1  = 1;         // 启用定时器T1  
   ES   = 1;         // 开串口中断   
   //////////初始化T0/////////////////////               
   TH0  = 0x58;      //计161个数,时间199.64736微秒。
   TR0  = 1;         //开启T0定时器           
   ET0  = 1;                  //允许定时器T0中断                                                                           
   EA   = 1;         //开总中断
   ////////加载探头地址库//////////////
   Sen_Number=0;          //Sensor[0][0]开始
   Sensor_Library();  //加载探头地址0
   Sensor_Library();  //加载探头地址1
   Sensor_Library();  //加载探头地址2
   Sensor_Library();  //加载探头地址3
   Sensor_Library();  //加载探头地址4
   Sensor_Library();  //加载探头地址5
   Sensor_Library();  //加载探头地址6
   Sensor_Library();  //加载探头地址7
   Sensor_Library();  //加载探头地址8
   Sensor_Library();  //加载探头地址9
   Sensor_Library();  //加载探头地址10
   Sensor_Library();  //加载探头地址11
   Sensor_Library();  //加载探头地址12
   Sensor_Library();  //加载探头地址13
   Sensor_Library();  //加载探头地址14
   Sensor_Library();  //加载探头地址15
   Sensor_Library();  //加载探头地址16
   Sensor_Library();  //加载探头地址17
   Sensor_Library();  //加载探头地址18
   Sensor_Library();  //加载探头地址19
   
   /////////初始化WIFI////////////////
   WiFi_Init();
  /////////////主循环//////////////////
   while(1)
   {
           DISPTAB();                           //生成含有8个数码管的显示数组LedOut[n]
     LEDdisp();                           //驱动显示。
         KEY();                               //按键程序。
          analyse();                           //分析
   }
}

/*************************************
         T0 定时器中断(SC1527解码)
/*************************************/
void Time0(void) interrupt 1   //定时器1的中断号1,定时器0的中断号0,外部中断1, 2外部中断2,串口中断4
{    unsigned long RF;
     Step++;
//         shiyan= ~shiyan;
         if((!RFRX) & (Head))                          //端口跳低,
              {  Step_H=Step;Step=0;Head=0;      //记录高步数,清步,标低。
                     if (RF_Head)                                     //数据头已被检出
                               {        if (Step_H>3)        //上一个高电平4步为高        
                                  {  RF_d =((RF_d<<1)+ 1);   //为高左移补1;
                                             RF_bit++;                                                                 
                                             Step_L=Step_H=Step=0;         //清低位高位步数
                                      }
                            else  {  RF_d =  RF_d<<1;              //为低左移补0;
                                             RF_bit++;                           
                                             Step_L=Step_H=Step=0;         //清低位高位步数  
                                      }
                                        }
                  }
         if((RFRX) & (!Head))                          //端口跳高,
              {  Step_L=Step;Step=0;Head=1;  }   //记录低步数,清步,标高。                  
           if((Step_H==2)&(70<Step_L)&(Step_L<74))  //(12.5V时计71;9V时计74;P1.0在T0中断时反转,示波器直点数据)
              {  RF_Head=1;Step_L=Step_H=Step=0;     shiyan= ~shiyan;} //标记数据头;清低位高位步数
         if(RF_bit>24)               //接收地址有20个位,按键码有4个位                                                     
          {   RF_bit = 0;        //位数清零
                          RF_Head  =   0;         //清零数据头
                          RF       = RF_d;         //RF接收到的数据送去显示
                          if(RF==RF_one)     //两次收到的数据一致,才为有效数据
                                RF_data= RF;
                          else  RF_one = RF;
                          RF_d  = 0;                 //清接收到的数据
                          Step_L=Step_H=0;          //清低位高位步数                          
                    }
}

/*****************************************************
             串口中断程序  (WIFI通信ESP8266)
******************************************************/
void ser_int (void) interrupt 4 using 1          //串口发送或接收中断程序
{   
    TI = 0;//清除发送中断标志位
        if(Wifi_send[r]!='\0')  //未收到结束符
           {  
              SBUF=Wifi_send[r];
                  r++;
           }
        else  r=0;  //发送完成r清零            
}



作者: fryefryefrye    时间: 2019-9-19 22:21
liyuqing0318 发表于 2019-9-18 15:29
断电时,开关两端有电压,有电压就可以采用微电流方式取电来用,当然前提是遥控电路要足够低功耗。
通电 ...

淘宝上可以买到现成的单火线供电模块。应该用起来很方便的。

只不过我做的东西都是自己家用,所以照明开关处,装修的时候都已经布了零线,所以没有这个问题。
作者: fryefryefrye    时间: 2019-9-19 22:22
liyuqing0318 发表于 2019-9-18 15:30
想要的外设大部分功能已经完成。代码贴出。欢迎坛友跟进。。。。。。。
想要的外设大部分功能已经完成。代 ...

你这套系统,要把大量的中央处理的代码,用Android开发吗?
作者: liyuqing0318    时间: 2019-9-21 13:48
fryefryefrye 发表于 2019-9-19 22:22
你这套系统,要把大量的中央处理的代码,用Android开发吗?

是安卓,因为要利用淘汰的旧手机来做。

我对安卓开发并不熟悉。初步想法是:想要的功能大都有成熟的APP能够做到,我只是想模拟用户操作,调用一下这些APP。再加上简单的探点组合,触发自己想要的场景应用。
作者: zwz0106    时间: 2019-9-21 20:53
支持楼主,虽然我不懂
作者: fryefryefrye    时间: 2019-9-21 20:54
liyuqing0318 发表于 2019-9-21 13:48
是安卓,因为要利用淘汰的旧手机来做。

我对安卓开发并不熟悉。初步想法是:想要的功能大都有成熟的APP ...

别想了,Android系统和Windows系统的最大区别就是:Android系统每个APP都有自己的运行环境,更本不知道其他的程序,想调用其他程序的话,除非对方程序主动提供的调用接口。别的程序在运行的时候,你连屏幕截屏都拿不到,怎么控制?

这种机制,在苹果的手机比这个更加严格。




欢迎光临 数码之家 (https://www.mydigit.cn/) Powered by Discuz! X3.4