这个东西也是我给别人做的项目,今天刚刚完成。本着今日事今日毕的原则,赶快总结下来,要不然按我的性格就会越拖越久了哈。 这个项目我使用的单片机是ATMEGAL16这款单片机,其实这个项目的思路非常简单,就是把串口wifi模块加载到单片机串口上,进行一系列的配置,然后就可以利用卖方提供给我们的软件给单片机的串口发数据,就相当于利用串口调试助手给单片机的串口发送数据,然后写一条单片机串口的程序,类似接到‘a’,就把PA端口置高,点亮LED灯,如果收到'‘b’,就把PA端口置低,熄灭LED灯。思路很清晰,不管想起来还是说起来都没有什么难度,不过我确实着实费了一番力气呢。 先来看看原理图吧 也许大家看的有点困惑吧,来看看实物的照片吧
如果大家想照着我的这个东西做,还想买我使用的这个wifi模块呢我把连接粘在下面 http://item.taobao.com/item.htm?id=12872744348 其实这个项目真的没有什么好讲的,首先应该自己耐心仔细的看卖方提供的wifi模块的资料,比如这个模块工作条件,需要几V的电压啊等,然后根据教程对模块进行测试,做这个东西碰到很多细节的问题,也许是我的文字表达能力不够吧,但真的是很难写明白,我觉得这些应该叫做经验吧,只可意会不可言传的东西。 我觉得这个项目的关键点有两个:1、要把wifi模块的IP地址和你自己笔记本的IP地址设置在同一个网段 2、不管我们利用软件对模块进行配置还是进行单片机开发都用到了串口,那我们必须重视的一个问题就是波特率问题。 下面是我写的单片机的程序: #include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> //中断函数头文件
#define BAUD 9600 //波特率定义
#ifndef F_CPU
#define F_CPU 12000000
#endif
//全局变量声明
char Transmit;
//函数声明
void Port_Init(void); //端口初始化配置
void Usart_Init(void); //USART寄存器设置
void Usart_PutChar(char c); //字节发送函数
int main(void)
{
DDRA = 0xff;
Port_Init();
Usart_Init();
sei(); //使能全局中断
// Transmit='6';
// Usart_PutChar(Transmit);
// _delay_ms(100);
while(1);
{
}
}
//端口状态初始化设置函数
void Port_Init()
{
PORTD = 0X00; //USART的发送接收端口分别为PD0和PD1
DDRD |= (1 << PD1); //PD0为接收端口,置为输入口;PD1为发送端口,置为输出口
} //USART寄存器配置函数
void Usart_Init()
{
UCSRA = 0X00;
UCSRB |= (1 << TXEN)|(1<<RXEN)|(1 << RXCIE); //发送使能
UCSRC |= (1<<URSEL) | (1 << UCSZ1) | (1 << UCSZ0); //异步,数据格式8,N,1
//UCSRC寄存器与UBRRH寄存器共用相同的I/O地址,写 UCSRC 时,URSEL 应设置为 1。
UBRRL = (F_CPU/BAUD/16-1)%256; //波特率设置
UBRRH = (F_CPU/BAUD/16-1)/256; } //字节发送函数
void Usart_PutChar(char c)
{ UDR = c;
while( !(UCSRA & (1 << UDRE)) ); //只有数据寄存器为空时才能发送数据
}
//接收中断函数
ISR(USART_RXC_vect )
{
char Rev;
Rev = UDR; //从USART I/O数据寄存器-UDR中读出数据
//Usart_PutChar(Rev); //将接收到的数据发送
if(Rev=='a')
{
DDRB = 0xff;
PORTB = 0xff;
}
if(Rev=='b')
{
DDRB = 0x00;
PORTB = 0x00; } }
有兴趣的朋友可以看一看,我也会把wifi模块的资料传到我的空间中的,需要的朋友可以去找,如果大家有什么疑问或好的建议的话,请给我评论或留言,我们交流一下。今天有点累,这个项目也确实很难写明白,如有什么不妥的地方大家见谅吧。
|