【转】51 单片机接入 oneNET
|倒序浏览 |阅读模式一、单片机电路图 电路由STC11F04E单片机、max232TTL转串口集成电路,编解码集成电路PT2272、T2262和相应的无线收发模块组成。MAX232的作用是把单片机的串口数据TTL电平转换成232电平送到串口转wifi模块。单片机的作用是收发数据,并通过无线接收模块检测报警数据,通过无线发送模块控制家用电器。
http://upfiles.heclouds.com/forum-app/2016/04/11/00c7175c2647c63703928c0ba986e76d.jpg 二、 HLK-RM04串口转WIFI模块 有关HLK-RM04的资料请到http://www.hlktech.com/网站下载。我用的是如下图所示的带底板的模块。
http://upfiles.heclouds.com/forum-app/2016/04/11/3c937fd5a2c8772902725542ad2f43a2.jpg 如果是自己设计电路板也可购买如下图所示模块。
http://upfiles.heclouds.com/forum-app/2016/04/11/c1cb6ff67ac840a750ab851592b0905e.jpg 使用的时候可下载HLK-RM04_CONFIG_V1.2.exe软件,来配置该模块。连接好串口线,打开该软件,进行配置如下图:
http://upfiles.heclouds.com/forum-app/2016/04/11/025f8c2fdec7252698beaba97ea86fa1.jpg 1、选择串口号 2、点击搜索模块,如果连接成功左侧待发送命令框和命令执行与恢复框有显示 3、选择工作模式,串口以太网模式是网线连接,无线网卡模式是无线wifi连接 4、网络协议选TCP客户端 5、无线参数就是要连接的无线AP参数(你家的wifi名称、密码) 6、远端IP填写183.230.40.39,远端端口填写876 7、串口参数填写波特率应与单片机的串口波特率一致9600 8、不启用DHCP 9、点击提交配置 10、 可以点击查询配置来查看是否配置成功 三、 HLK-RM04模块连接oneNET 给HLK-RM04模块上电后如果能连上oneNET的ip地址183.230.40.39,说明配置正确,如果配置正确,但还连接不上,这需要检查你家的路由器是否进行了端口映射,是否打开了防火墙,有关端口映射的方法请参考有关资料,也可在我的博文中找。 在确认HLK-RM04已能连上oneNET后,打开串口工具,把HLK-RM04的串口连接到微机串口上,就可以发送数据到oneNET上了。 四、接收程序 接收oneNET设备发送来的数据采用中断方式,程序代码如下:注意接收数据的格式是16进制数,而不是ASII码,开始我用ASII码格式接收调试不成功,改成16进制接收就好了。 S: PUSH ACC
[*] PUSH PSW
[*] PUSH DPH
[*] PUSH DPL
[*] CLR TR0
[*] MOV 20H,#0
复制代码
JS0: CLR ES
[*] CLR EA
[*] SETBREN;允许接收
[*]LCALL PDRI;等待下一个串口数据
[*]MOV A, SBUF ;读输入缓冲区
[*]MOV B,A
复制代码
S1: MOV A,B
[*] XRL A,#40H ;连接断开
[*]JNZ JS
[*] CLR FLAG ;置连接断开标志
[*]MOV R2,#3 ;接收长度是2个字符长度
[*]AJMP JS2
复制代码
JS: MOV A,B
[*] XRL A,#20H ;连接成功
[*]JNZ JS1
[*] MOV R2,#02H ;接收长度是2个字符长度
[*]AJMP JS2
复制代码
JS1: MOV R2,#16 ;接收16个字节数据 JS2: MOV R0,#2CH ;2CH接收缓冲区首址
[*]SETBREN ;允许接收
复制代码
S2: LCALL PDRI;等待下一个串口数据
[*]MOV A, SBUF ;读输入缓冲区
[*]CLR RI;软件清除串口中断标记
[*]MOV @R0,A
[*] INC R0
[*] DJNZ R2,S2
复制代码
SEND1:SETB FLAG_0 ;置接收到数据标志 SEND: POP DPL
[*] POP DPH
[*] POP PSW
[*] POP ACC
[*] SETB ES
[*] SETB EA
复制代码
SD: RETI
五、发送数据程序 向oneNET设备发送数据的程序如下: FSZJ: MOV R2,#14 FSZJ1: MOV DPTR,#SJA ;WIFI FS: CLR EA ;ONENET
[*] ANL AUX,#07FH ;p3.0p3.1当串口
复制代码
FSZJ2: MOV A,#0H
[*] MOVC A,@A+DPTR
[*] MOV SBUF,A
[*] JNB TI,$
[*] CLR TI
[*] INC DPTR
[*] DJNZ R2,FSZJ2
[*] SETB EA
[*] RET
复制代码
PDRI: SETB REN ;占用R4/R5/R1
[*] MOV R1,#300 ;20;300毫秒超时退出!
复制代码
PBZ: MOV R4,#75 ;50;100;67 DY2: MOV R5,#6 ;4;8 DY1: JB RI,KKQ ;检测到RI变1就退出
[*]DJNZ R5,DY1 ;25微秒检测一次
[*]JB RI,KKQ ;检测到RI变1就退出
[*]SETB C ;程序正常时C=1
[*] DJNZ R4,DY2 ;内循环50毫秒
[*]DJNZ R1,PBZ ;超时退出
[*]CLR C ;对串口接收超时退出C=0
[*] CLR RI ;清除有串口数据标志
复制代码
KKQ: RET 3、连接0neNET程序 GN01: JB FLAG,GNF ;当接收到连接断开信号后,FLAG=0,重新连接
[*]MOV R2,#49 ;否则发送1111心跳信号,保持连接
[*]MOV DPTR,#LJA
[*] CALL FS
[*] LCALL DELAY2
[*] LCALL DELAY2
[*] SETB FLAG
复制代码
GNF: LCALL FSZJ ;发送心跳标志4个1
http://upfiles.heclouds.com/forum-app/2016/04/11/2a22e6058bff672b6f8d21745640ad15.jpg ;连接到设备xxxxxxx上的数据,49个字节,需要换成自己的设备连接数据 SJA:DB 30H,0CH,00H,06H,37H,3xH,3xH,32H,3xH,37H,31H,31H,31H,31H;发4个1 SJB:DB 30H,0CH,00H,06H,37H,37H,37H,32H,3xH,37H,32H,32H,32H,32H ;发送4个2 SJC:DB 30H,0CH,00H,06H,37H,3xH,37H,3xH,3xH,37H,31H,32H,33H,34H ;14个
v
这模块太贵 帮顶
页:
[1]