切换到宽版
  • 34090阅读
  • 109回复

[STM]stm32+ESP8266的门磁和红外遥控,有微信推送和微信控制功能(开源) [复制链接]

上一主题 下一主题
离线tempchar
 

发帖
87
M币
3052
专家
5
粉丝
21
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2016-06-01
— 本帖被 發騷友 设置为精华,作者+3000M币+5专家(2017-02-26) —
前阵子做了个门磁,然后不断改进就加上微信推送,又加上学习型红外遥控和微信控制。
看着差不多完善了,主控板都稳定运行两个月不用重启,赶紧分享给大家。

硬件用的是stm32F030C8T6,开始用的f103c8发现太浪费了,就改F030C8。本来还有预留F030F4P6的部分,可惜pcb设计功力不够,nsf24l01要飞线出来才能通信,插板上就不行,这部分我可能最后讲。
设备分三种,一种是主控,插上esp8266,可以微信配置ssid和密码,通过nrf24l01和其他两种设备通信;

这个是空板,插上ESP8266和nRF24L01就可以用。板子大概是4.5×4.5cm


这个是正常使用时,插上ESP8266和nRF24L01的样子。


我自己用的就套上个POS机透明盒子,高度宽度都刚好,旁边钻个洞插2.1mm电源线。




第二种是门磁,插上nrf24l01和主控通信,休眠电流1ma不到,中断唤醒,自己实现了简单的失败重传;
引出来三组线,橙色和黄色的两组线分别是两个干簧管,分别挂在内门和外门上,另外的7根线是nRF24L01。
整个板放在盒子里,弄点3M胶粘墙上,再引条线到旁边插个移动电源就能用了。

门磁板后来又装了一个PIR人体红外感应,有人在白色菲涅尔透镜前走过时会有高低电平,外部中断唤醒MCU,通过NRF24L01发送消息给主控板。
找了个智能插座的盒子挖孔刚好。




第三种是红外,插上nrf24l01和主控通信,接个红外led和TL1838,把学习到的红外指令存到mcu的flash上。
随便焊了洞洞板插在板上,红外LED是草帽广角度的,功率差不多2W,用两个三极管两级放大。



服务器端有两个,一个是物联网服务器,用的onenet,他们承诺个人用途几百个设备都能免费;第二个是微信要有服务器端支撑,我用的是SAE,新浪云,随便弄个手机号然后实名制注册都有400云豆,够你免费用200天。

微信的效果图
门开关时微信收到的消息



红外功能菜单,有录红外和播放红外的菜单,点击后跳转到网页。按下网页的按钮,服务器就会通过物联网平台发消息给主控,主控在转发给红外板,红外板根据消息进行红外录制或播放。




新浪云SAE的具体我下面讲,由于要用到定时任务每隔1.5秒刷新门磁数据和推送消息,所以每天都要消耗几个云豆,换算成RMB就是3分钱每天。
你要是新注册的话,新浪云送你4块钱,够用很久了。




内容比较多,我会分几部分写。



本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共23条打赏M币+96
jackkane M币 +30 好东西。精品的设计 03-15
8411240410 M币 +3 - 03-05
慕名而来 M币 +3 虽然还没有动手的冲动,但必须要支持原创,挺复杂挺厉害的。 02-28
rs16 M币 +3 原創內容優秀文章 01-15
i6950 M币 +2 優秀文章 2016-12-25
深渫 M币 +3 - 2016-12-19
smzj692 M币 +3 謝謝分享 2016-11-02
报告大王 M币 +3 優秀文章, 鼓励原创 2016-09-11
anb510769 M币 +3 優秀文章 2016-08-25
absflash M币 +3 绝对好东西,原来还可以这么玩 2016-07-15
离线tempchar

发帖
87
M币
3052
专家
5
粉丝
21
只看该作者 1楼 发表于: 2016-06-01
占楼1,硬件和相关设计

用sprint layout 6设计了主控板和门磁板两种PCB,都是4.5*4.5cm大小的,拼了4块刚好10*10cm打样。接地层都没做,运气好到没出问题。
Gerber文件和sprint layout6的文件可以到百度云PCB下载地址http://pan.baidu.com/s/1jID9Lno 下载。
打样回来的PCB勉强能用,但是有两个问题:
1.主控板的boot1没有接地,串口下载程序时要多试几次才能成功下载;
2.门磁板的nrf24l01离2.1mm电源插口太近了,会受到干扰,只能飞线出来把nsr24l01放到远一点的地方。


主控板
三种设备其实都可以用主控板的pcb,就是下图这块。
用到的元件有stm32f030c8t6,HT7333 LDO两片,104电容4片,106电容1片,226电容1片(8266用的),ESP8266-01,nrf24l01+,还有4个0805的led和200~1k欧的0805限流电阻。除此以外还有干簧管、跳线帽、2.1电源口和2.54的排母排针若干。
电容电阻都是0805封装。
                      

下载程序到mcu时,用跳线帽把右上角boot0那3个排针插上,拉高boot0,然后通电,通过下方的TX1、RX1串口下载程序。

引脚使用情况大家可以参考下面,其他的可以参考PCB上的丝印
1.右下角的4个led的引脚和对应的定时器:pa8(tim1_ch1) pb5(tim3_ch2) pb6(GPIO) pb7(tim7_ch1n)
2.ESP8266的引脚:mcu的uart2,reset引脚接MCU的pa1。MCU可以通过GPIO复位。
3.nrf24l01的引脚:spi1, csn接pb1,  ce接pb0
MCU的引脚配置情况,下面是cubeMX的配置图





门磁板
门磁板PCB,右上角是2.1mm电源插口,电源插口下面是nrf24l01。MCU是stm32f030f4p6。


烧录时把中间的boot0拉高,然后串口接下方的pa9(tx) pa10(rx),就能下载程序了。
引脚情况:
1.3个led:pa9 pa10 pf1
2.2个可以输出pwm的引脚:pa9(tim1_ch2) pa10(tim1_ch3)
3.外部中断EXTI引脚:pa13 pa14 pf0
4.nrf24l01接MCU的spi1, csn接pb1,ce接pa4。
5.pa0可以通过三极管控制上方中间的继电器,这部分我最后没用到,后面大家有兴趣可以试试。

MCU的引脚配置情况,下面是cubeMX的配置图






[ 此帖被tempchar在2016-06-05 12:31重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共6条打赏M币+18
深渫 M币 +3 - 2016-12-19
anb510769 M币 +3 - 2016-08-25
Ω囿圉Ω M币 +3 这个配置软件不错 2016-06-08
hongo M币 +3 優秀文章 2016-06-01
落叶风 M币 +3 謝謝分享 2016-06-01
ling11052001 M币 +3 MARK,等楼主上传完 2016-06-01
离线tempchar

发帖
87
M币
3052
专家
5
粉丝
21
只看该作者 2楼 发表于: 2016-06-01
占楼2,设备代码

配置设备信息
设备代码里需要配置你申请到的ONENET设备ID和APIKEY。
配置方法如下:
1.登录onenet网站http://open.iot.10086.cn/
2.注册用户,添加设备,在设备里添加test1,test2,test3这3个数据流
3.添加设备的APIKEY,然后记下来,后面改代码要用到
4.记下设备的ID,后面该代码要用到
5.打开“esp8266.h"文件,把第26和第28行的

#define ESP8266_IOT_DEVICEIDSTR        "9999999"
#define ESP8266_IOT_APIKEYSTR            "FFFFFFFFFFFFFFFFFFFFF"
ID和APIKEY改成你自己的

配置nRF24L01地址前缀
nRF24L01的地址是5个字节,我设计时把4个字节做成预定义,方便大家用不同的地址区分开。
修改main.c文件里#define RF24ADDRPREFIX 0x306c6c6c
把 0x306c6c6c改成你自己的4个字节的地址前缀。

编译生成二进制HEX文件
用keil MDK v5打开项目,就是*.uvprojx文件,然后打开菜单的“Project”,进入“Options for Target ……”,在弹出的框里选择一个目录,填上Hex文件名,勾选“Create hex file”创建Hex文件的选项。
最后按F7,build,进入你刚才设置的目录就能看到Hex文件了,用Flash loader demonstrator下载到MCU就大功告成。




代码地址如下:

F030C8T6
F030C8T6
F030F4P6

代码结构我后面详细解释。

未完待续
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共3条打赏M币+9
深渫 M币 +3 收藏! 我最近也在搞8266 2016-12-19
anb510769 M币 +3 - 2016-08-25
hongo M币 +3 謝謝分享 2016-06-01
离线tempchar

发帖
87
M币
3052
专家
5
粉丝
21
只看该作者 3楼 发表于: 2016-06-01
占楼3,服务器代码

申请微信企业号
打开腾讯的企业号申请网页https://qy.weixin.qq.com/,扫码按要求填写即可。
然后开始配置你的应用:
0.点击”设置“,进入基本信息,把corpid复制出来,下面要用。
1.点击应用中心
2.创建消息应用,应用名称随便写,应用可见范围一定要勾上你自己或者全部成员
3.在应用中心进入你刚创建的应用,最下面的模式选择设置成回调模式
4.进入回调模式的详细设置。
URL是你等下申请的新浪云的URL,TOKEN填你的corpid,AESKEY随机获取,然后记下来
5.进入设置->功能设置->权限管理,创建一个普通管理组。在这个管理组的应用权限里勾选步骤2创建的应用。然后记下这个管理组的Secret
经过以上几步,你已经建好微信企业号,上传好代码就能通过新浪云发微信消息给自己了。




配置SAE新浪云
打开新浪云主页http://www.sinacloud.com/,注册个用户,创建个PHP空白应用,把PHP代码上传上去。
上传代码两种方法:
1.SVN,会用SVN的直接照新浪的提示操作;
2.新浪的代码编辑器,逐个把php文件里的内容复制粘贴上去。就像下图,在左侧的“应用”展开后可以看到“代码管理”,进入后点击红框里的“编辑代码”。在弹出来的窗口里逐个新建文件,粘贴代码保存就可以了,用起来和文本编辑器一样。







上传代码之前,有几个地方要修改,改成你自己的设备ID和微信corpid。
0.上传微信的库文件


微信的php库文件就是上图选中的这几个,大家在SAE里逐个创建,然后把代码粘贴进去就可以了。


1.修改微信接口
打开sendwechat.php文件,把第6、7行的

    $wxcorpIdStr = "wx689999999999" ;
    $wxPTGLZsecret = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" ;
分别改成你的微信corpID和微信普通管理组的secret。
现在可以测试发微信给自己了,假设你申请的SAE的地址是nidesaedizhi.applinzi.com,在浏览器输入地址
http://nidesaedizhi.applinzi.top/sendwechat.php?simple=1&msg=aaabbbcccddd,按回车。
这时候你的微信企业号就能收到一条aaabbbcccddd消息。


2.修改物联网接口
打开onm.php文件,把第117行开始的

//////////////////////////////////////////////////////设备id和apikey
$deviceOneNetId = '999999' ;
$deviceApiKeyOneNet = 'FFFFFFFFFFFFFFFFFFFF' ;
//////////////////////////////////////////////////////发微信接口的url
$wechatapiurl = "http://nidesaedizhi.applinzi.top/sendwechat.php?simple=1&msg=" ;
改成你自己的设备ID、APIKEY,把你微信接口的url填上。
注意前后的双引号要保留。


3.设置SAE定时任务
设置定时任务是为了让新浪每分钟打开一边onm.php文件,onm.php文件隔1.5秒刷新1次,看看你的设备有没有新数据,有的话就发到你的微信企业号。
定时任务设置时参照下图。






服务器端代码下载链接:
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共6条打赏M币+18
zy0818 M币 +3 - 2016-12-19
anb510769 M币 +3 - 2016-08-25
rogerllg M币 +3 很详细,要给楼主加分~ 2016-07-15
zenghongtu M币 +3 非常厉害呀 2016-06-24
alphax86 M币 +3 謝謝分享,好详细的步骤 2016-06-07
hongo M币 +3 精彩回帖 2016-06-01
离线digifix

发帖
11263
M币
3924
专家
5
粉丝
109
只看该作者 4楼 发表于: 2016-06-01
支持。希望有个pos版的。pos上的stm32闲着太可惜
离线阿甲

发帖
2262
M币
6786
专家
7
粉丝
43
只看该作者 5楼 发表于: 2016-06-01
前排等待大作
离线digifix

发帖
11263
M币
3924
专家
5
粉丝
109
只看该作者 6楼 发表于: 2016-06-01
楼主辛苦了,贴图码字都要不少精力。
离线ling11052001

发帖
4791
M币
3076
专家
2
粉丝
74
只看该作者 7楼 发表于: 2016-06-01
MARK,等楼主上传完
离线2545889167

发帖
11235
M币
24866
专家
143
粉丝
4388
只看该作者 8楼 发表于: 2016-06-01
话说用个51就够了吧,上32有点浪费了
在线sanzs

发帖
1725
M币
1864
专家
0
粉丝
7
只看该作者 9楼 发表于: 2016-06-01
等待楼主更新
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个