一、单片机电路图 电路由STC11F04E单片机、max232TTL转串口集成电路,编解码集成电路PT2272、T2262和相应的无线收发模块组成。MAX232的作用是把单片机的串口数据TTL电平转换成232电平送到串口转wifi模块。单片机的作用是收发数据,并通过无线接收模块检测报警数据,通过无线发送模块控制家用电器。
二、 HLK-RM04串口转WIFI模块 有关HLK-RM04的资料请到http://www.hlktech.com/网站下载。我用的是如下图所示的带底板的模块。
如果是自己设计电路板也可购买如下图所示模块。
使用的时候可下载HLK-RM04_CONFIG_V1.2.exe软件,来配置该模块。连接好串口线,打开该软件,进行配置如下图:
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
- SETB REN ;允许接收
- 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接收缓冲区首址
复制代码
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
;连接到设备xxxxxxx上的数据,49个字节,需要换成自己的设备连接数据 SJAB 30H,0CH,00H,06H,37H,3xH,3xH,32H,3xH,37H,31H,31H,31H,31H ;发4个1 SJBB 30H,0CH,00H,06H,37H,37H,37H,32H,3xH,37H,32H,32H,32H,32H ;发送4个2 SJCB 30H,0CH,00H,06H,37H,3xH,37H,3xH,3xH,37H,31H,32H,33H,34H ;14个
|