锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

教你用智能手机遥控电灯

时间:2022-08-10 23:00:00 led灯具专用连接器244继电器

64位WINDOWS 7下的WINDOWS XP因为win7下jtag没有驱动,这个驱动困扰了我很长一段时间,但也因为安装双系统失败和重新安装系统,数据消失了。最后,使用它VmwareWorkstation解决)。

采用AVR128单片机,C语言编写程序,avrstudio4setup.exe4.19 WinAVR-20100110-install.exe vr-toolchain编辑、编译、模拟。

所需器材:

1.USB接口JTAG仿真器 AVR128单片机(用jtag连接电脑后,通过后文中的C程序代码avrstudio这个软件烧写成单片机CPU中,至于avrstudio网上有很多使用说明,这里就不解释了):

befea7c2f1e883e30870ecf6f5f3eb8f.png

2.SRD-5VDC-SL-C 1路 5V继电器驱动模块 :

3.TCP232-T 串口转向以太网双向以太网TCP,IP转串口、RJ45转TTL。

4.一部智能手机

5.电灯...

1、系统设计:

1.AVR128 PORTD,操作继电器模块(后面有开发板和继电器的原理图和连接方式)

2.AVR128 Usart0与TCP232-T通信,接收指令转换PORTD电平

3.继电器模块实现火线断开控制,进入控制电气设备,控制电灯

4.TCP232-T实现串行通信和模块TCP通信通明传输。工作模式是Client,TCP协议主动连接远程服务器。AVR128的指令,

通过智能手机WEB控制远程电灯的网页或应用软件

2.指令协议(由遥控器发送到服务器,然后由服务器广播TCP232-T模块,然后由单片机控制继电器部分,最终达到控制电灯的目的)

1.开灯指令:1212140400DBBF PORTD输出低电平,继电器模块获得低电位,常开状态转换为闭合状态

2.关灯指令:12121404FF9BFF PORTD输出低电平,继电器模块获得低电位,常开状态转换为闭合状态

3.查询灯状态说明:12121404AAxxxx获取PORTD并返回状态。

本例标识为12121404。TCP232-T模块成功连接到服务端后,发送设备标识。本例为12121404,控制指令从12121404开始。

十六进制

发送1212140400DBBF

以12121404为标志,00为开灯指令,DBBF为CRC检查码(用于检查控制端发送的16进制码是否与服务器端收到的16进制码相同,详见后面的C程序代码)

将控制器返回[123.4.244.144:20108] 45

其中123.4.244.144为控制器IP20108年是控制器TCP端口,45表示指令格式正确,执行正确

将控制器返回[123.4.244.144:20108] 4BDBBF

4BDBBF指令标志是正确的,但是CRC不正确,正确CRC为DBBF

将控制器返回[123.4.244.144:20108] 4B

非指令或其他错误。

3.智能家居物联网控制器功能设计

电源为220转5V/200mA其他部件由单片机提供VDD5V和VCC3.3V,5.单片机工作V状态(注意跳线)。

其中TCP232-T需要50mA稳定工作,SRD-5VDC-SL-C也需要50mA正确行动。因此,使用独立电源。

共地设计。

花絮:在实验过程中使用计算机USB(2.0)供电,单独编程实验继电器可以正常工作,单独使用TCP232-T也能正常连接网络。联合调试的时候,继电器不动作。分析原因,起初以为单片机提供电流有限,负载能力差,后来考虑到单片机本身需要100mA左右电流由独立电源供电,以提供更大的电流。实验成功。

AVR单片机开发板

有两个供电方,USB并有5个独立电源V和3.3跳线。本例单片机工作5V状态。

使用5V电源,三个接线柱,分别是正电源,控制线(低电位有效),电源地。分别连接到正电源,AVR的PORTD口,电源地。

继电器模块输出(连接控制设备,本例为灯电源线中的火线),中间为公共场所,一端为常开状态,另一端为常闭状态。本例采用常开状态,接收用户指令,实现常开、闭、动作。

电源使用5V供电,串行通信TTL电平(<3.3V为0,3.5-5V为1。串口为-9V - 9V电平,〈0V为0,〉1V为1。两种接口不能接错),TTL电平可直接连接到单片机端口。

如果是TTL电平,直接POARTE0和POARTE1.如果是串口模块,单片机开发板串口。串口只使用2、3、53条线。

4、原理图

AVR开发板

PORTD连接电气模块简单,写端口0x00或者0xFF,控制端口电平,控制继电器动作。

PORTE接8个LED,一般用于指示开发过程中的工作状态,本例最终版本无用。

POARTE0和POARTE1接TTL电平的TCP232-T模块的TXD和RXD

POARTE0和POARTE另外,设计连接MAX为串口设备通信,转换芯片和接口。

USART1接485转换口

主电源开关、复位键和四个键盘

输入端,分别连接正电源,PORTD任何一个,以及电源地

使用常开接口的输出端只能控制一条线路。其他空置悬挂。

电源,电源正接VDD,电源地接GND。

?RJ45接口,标准网口,使用1、2、3、64

?串口端,TTL电平,RXD接POARTE0,POARTE1接TXD

?电源,电源正接VDD,电源地接GND。

?CFG如果空置被拉下,比如连接GND,该模块在串口设置模式下工作,不响应网络连接。

?复位,接PORTF,复位通信模块。

5、使用说明

服务器:

本软件使用VB编写

Modbus协议规定的传输媒体有串行总线和以太网,其中串行总线规定ASCII模式和RTU传输模式有两种。本软件以GB/T以19582-2008为蓝本,实现Modbus协议的TCP模式、ASCII模式和RTU模式相互转换;UDP协议纳入TCP模型,实现广播通信;模拟响应,调试系统无物理设备。扩展了TCP开发微型模型Webserver,实现了三种模式和HTTP通用浏览器(如协议之间的转换)Window的IE或者Andriod浏览器)成为控制器。

RJ45,网口

J1.控制线,23公共,1常开,4常闭。可控制250V以下电压,2A电流。

电源,5V

开关,总电源开关

本例使用RJ网络配置45口,专用软件。Client该模式通过有线内部网络连接公网SERVER。根据网络环境设置静态IP,不支持DHCP。

可设置本机IP,网关,端口20108,远程SERVER地址和端口8234。心跳设计,断网自动连接。

智能手机TCP应用软件模式:

安卓应用软件用于局域网和广域网

网上找到一个叫easytcp软件比较好,可以配合SERVER使用

智能手机WEB模式(不稳定):

用于广域网,本例为通用浏览器,支持HTML即可。HTTP协议,9000个端口。

6、程序设计

给出核心代码

//*************************************************************************

///

//*************************************************************************

#define Lamp_IOPORTD///继电器模块的数据口

#define Lamp_DDRDDRD///方向寄存器

Lamp_IO=0xFF;///数据口为输出

Lamp_DDR=0xFF;

if((data_buf[RX_length-1]==0xFF) ||(data_buf[RX_length-1]==0x00))

{

usart_send(0x45);//发送接收到的数据

Lamp_Display(data_buf[RX_length-);//写PORTD,继电器低电平有效,0xFF为关灯,0x00为开灯

}

//*************************************************************************

//USART通讯设计

//************************************************************************

//由于采用通明传输,因此本例只涉及USART通讯编程,使用USART0,也就是PORTE0和PORTE1。

//初始化

#define baud9600//设置波特率的大小

#define baud_setting(uint)((ulong)F_CPU/(16*(ulong)baud)-1)//波特率计算公式

#define baud_h(uchar)(baud_setting>>8)//提取高位

#define baud_l(uchar)(baud_setting)//低位

void usart_init()

{

UCSR0A=0x00;//单倍速模式

UCSR0B=0xF8;//接收中断和发送中断允许

UCSR0C=(1<

UBRR0H=baud_h;//写波特率的值

UBRR0L=baud_l;

}

//发送数据

void usart_send(uchar data)

{

while( !( UCSR0A & (1<

UDR0 = data; //接收到的数据再发回电脑

delay_ms(2);

}

//数据接收结束中断向量

SIGNAL(SIG_USART0_RECV)//中断服务程序

{

uchar RxTemp;

RxTemp=UDR0;//将接收到的数据取出

usart_rx_data[RxReadIndex]=RxTemp;

if(++RxReadIndex> Rx_Buf_Size)//如果写接收缓冲区索引大于接收缓冲区的长度

RxReadIndex=0;//则索引重新清0

rx_flag=1;

}

//*************************************************************************

//CRC检验和判断

//*************************************************************************

uint get_crc(uint n)

{

uchar i,j;

CRC_word=0xffff;//赋值:0xffff

for(i=0;i

{

CRC_word^=(uint)data_buf[i];//计算CRC_word

for(j=0;j<8;j++)

{

if(CRC_word&0x0001)

{

CRC_word=CRC_word>>1;

CRC_word^=0xa001;

}

else

{

CRC_word>>=1;

}

}

}

return CRC_word;

}

判断

RX_length=RxReadIndex-2;//*256+data_buf[3];//取数据长度数据

RX_CRC_word=data_buf[RX_length+1]*256+data_buf[RX_length];//取CRC校验码

CRC_word=get_crc(RX_length);//计算接收数据校验码

if(CRC_word==RX_CRC_word)//校验数据比较

{}

两位CRC码提取

(CRC_word%256);

(CRC_word/256);

//*************************************************************************

//主程序

//*************************************************************************

int main(void)

{

system_init();//系统初始化

usart_init();//usart串口初始化配置

SREG|=0x80;//开启全局中断

while(1)

{

_delay_ms(50);//为串口中断方式延迟,这个很重要,本例通讯数据少,因此设置50

if((RxReadIndex>0) && (rx_flag==1))

{

cli();//全局中断无效,同SREG=0x00;

RX_data=&usart_rx_data[0];//指针接收数组首地址

for(read_count=0;read_count

{

data_buf[read_count]=*RX_data++;

usart_send(data_buf[read_count]);

}

receive_code_fun();

_delay_us(5);

RxReadIndex=0;//接收中断次数清零

rx_flag=0;

sei();//开全局中断,同SREG|=0x80;

}

}

}

server采用VB设计

使用控件,创建微WEB服务器,接受并解析HTTP协议,执行指令后返回HTML数据流。

指令只转发给受控制端。

主页源代码如下:

===========================

MODBUS调试---上海大学陈歌

MODBUS协议转换助手

ID

地址

数据

读开关量

02

读寄存器

04

这里显示的是,返回数据

普通数据发送

16进制

字符串

==================================

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章