51單片機+esp8266 wifi模塊的STA模式
模塊作爲客戶端發送數據給遠程主機
燒代碼前需要先配置一下WiFi模塊,AT+CWJAP,讓其先加入一個有效網絡
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
void delayms(uint x) //51單片機的常用延時方式
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void uart_init() //串口的初始化
{
TMOD = 0x20;
TH1 = 0XFd;
TL1 = 0XFd;
SCON = 0x50;
PCON = 0X00;
TR1 = 1;
EA = 1;
ES = 1;
}
void wifi_init() //初始化wifi模塊
{
ES = 0; //關閉串口中斷,以免發送指令過程中被其他事情打斷
TI = 1;
printf("AT+RST\r\n"); //往串口發重啓指令,在單片機中使用printf默認是往串口發送數據
delayms(1200); //適當延時,給wifi模塊一點反應時間
printf("AT+CWMODE=1\r\n"); //選擇STA模式
delayms(1200);
printf("AT+CIPMUX=0\r\n"); //單通道模式
delayms(1200);
printf("AT+CIPSTART=\"UDP\",\"192.168.1.118\",6666\r\n"); //設置遠程主機IP和端口號
delayms(1200);
printf("AT+CIPMODE=1\r\n"); //選擇透傳
delayms(1200);
printf("AT+CIPSEND\r\n"); //發送數據命令
delayms(1200);
while(!TI);
TI = 0;
ES = 1; //重新開啓串口中斷
}
void send(char *p) //發送數據函數
{
TI=0;
do
{
SBUF = *p;
p++;
while(!TI);
TI = 0;
}while(*p);
SBUF = ' ';
while(!TI);
TI = 0;
}
void main()
{
uart_init();
wifi_init();
while(1)
{
send("win "); //這裏只簡單發送幾個字符串作爲演示
delayms(1000); //適當延時
}
}