写在前面
之前博主学习了很多网络编程的东西是因为工作上要开始做“智能家居”、物联网方面的东西了。
下面主角要登场了。就是单片机。
关于ESP8266你必须知道的
博主使用的是安信可的产品,12S
常用AT指令:
(1) 设置模块为ST模式:发送:AT+CWMODE=1;返回:OK
(2) 查看当前WiFi列表:AT+CWLAP返回: OK
(3) 加入当前无线网络:发送命令:AT+CWJAP=”MERSAIN”,”XXXXXXXX”
第一个填你想要连接的WiFi名称,第二个填WiFi的密码
(4)查看当前模块IP地址:发送: AT+CWLIF返回:当前IP地址
(5)开启多连接模式 :发送命令:AT+CIPMUX=1返回:OK
(6)建服务器 发送命令:AT+CIPSERVER=1,8080(设置指令)
指令:AT+CIPSERVER=[,]
说明::0-关闭server模式,1-开启server模式 :端口号,缺省值为333 响应:OK
重点注意:
单片机发过去的时候要主要每条指令要换行 例如send(“AT+RST\r\n”); //往串口发重启指令
硬件连接
TXD RXD 互相对接,GND共地,VCC:wifi模块要接3.3V
51代码
#include <STC12C5A60S2.h>
#include <stdio.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
uchar ReceiveData[5]; //回传的数组
uchar countnumber;
void uart_init() //串口的初始化
{
//9600bps@11.0592MHz
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xDC; //设定定时初值
TH1 = 0xDC; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
EA = 1;
ES = 1;
}
void delayms(uint xms) //延时
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void Sent_ZF(uchar dat) //发送一个字节
{
ES = 0;
TI=0;
SBUF = dat;
while(!TI);
TI = 0;
ES = 1;
}
void send(uchar *string) //发送字符串
{
while(*string)
{
Sent_ZF(*string++);
}
}
void Uart1() interrupt 4 //串口1 接收数据4wei(收到8266回传的OK,其实是\r\nOK)
{ //当然是因为目前8266里面刷的AT固件是出厂默认固件
uchar a;
if (RI==1)
{
//RI=0; //复位中断请求标志,接收数据后置1
a=SBUF; //接收数据
RI=0; //复位中断请求标志,接收数据后置1
*(ReceiveData + countnumber)=a;
countnumber++;
if (countnumber>4)
{
countnumber=0;
}
}
}
uchar data_compare(uchar *p) //比较字符串
{
if(strstr(ReceiveData,p)!=NULL)
return 1;
else
return 0;
}
void wifi_init() //初始化wifi模块
{
while(1)
{
send("AT+RST\r\n"); //往串口发重启指令
if(data_compare("OK"))break;
delayms(600); //适当延时,给wifi模块一点反应时间
}
memset(ReceiveData,0,5);
while(1)
{
send("AT+CWMODE=1\r\n"); //选择STA模式
if(data_compare("OK"))break;
delayms(600); //适当延时,给wifi模块一点反应时间
}
memset(ReceiveData,0,5);
while(1)
{
send("AT+CIPMUX=0\r\n"); //单通道模式
if(data_compare("OK"))break;
delayms(600); //适当延时,给wifi模块一点反应时间
}
memset(ReceiveData,0,5);
while(1)
{
send("AT+CIPSTART=\"TCP\",\"192.168.1.100\",8080\r\n"); //往串口发重启指令
if(data_compare("OK"))break;
delayms(600); //适当延时,给wifi模块一点反应时间
}
memset(ReceiveData,0,5);
while(1)
{
send("AT+CIPMODE=1\r\n"); //选择透传
if(data_compare("OK"))break;
delayms(600); //适当延时,给wifi模块一点反应时间
}
memset(ReceiveData,0,5);
while(1)
{
send("AT+CIPSEND\r\n"); //发送数据命令
if(data_compare("OK"))break;
delayms(600); //适当延时,给wifi模块一点反应时间
}
memset(ReceiveData,0,5);
}
void main()
{
P27=0; //蜂鸣器
uart_init();
delayms(2000);
wifi_init(); //就可连上服务端了
while(1)
{
;
}
}
ESP8266固件
配套刷的是出厂默认固件,可去安信可官网下载
结束
以后会对其进行完善的