for (a=0; a<30000; a++);
printf ("AT+RST
"); //重新启动模块
for (a=0; a<50000; a++);
printf ("AT+CIPMUX=1
"); //启动多连接
for (a=0; a<20000; a++);
printf ("AT+CIPSERVER=1
");//建立server,默认端口为333
for (a=0; a<20000; a++);
printf ("AT+CIPSTO=50
"); //服务器超时时间设置
for (a=0; a<20000; a++);
RI=0;
ES=1; //初始化完成,串行口中断打开 //到了这里,就有一个疑问:ESP8266在接收到AT命令之后都会返回一个OK,为什么这里我没有相应的语句保证ESP8266成功接收到上面的几条命令呢?//答案是:因为单片机与esp8266通过的直接连接极少的情况才会丢失信息,比较可靠,而且我想速度达到最快。 //执行上述命令,模块进入服务模式,下面单片机就可以接收远程发来的数据
} //远程选择电梯楼层程序//这里楼层的号码用了符号来代替,应为在给esp8266发送命令的过程中,通常需要输入一些数值,而esp8266有时又会返回一些数值,//在串口接收的过程中,这些接收到的数字会影响我们的程序对楼层的判断,所以要采取特殊的表示楼层的方法。 void remote_control(unsigned char ldat)
{
unsigned int a;
switch(ldat)
{
case '!': //感叹号表示1楼,当然你也可以用其他表示方式,你也可以先接收到1,然后再进行其他的判断
printf ("AT+CIPSEND=0,33
"); //发送语句的命令
for (a=0; a<10000; a++);
printf ("%c
please enter your destination:",'1'); //需要发送的语句
lift_key_1=on;
break;
case '@':
printf ("AT+CIPSEND=0,33
");
for (a=0; a<10000; a++);
printf ("%c
please enter your destination:",'2');
lift_key_2=on;
break;
case '#':
printf ("AT+CIPSEND=0,33
");
for (a=0; a<10000; a++);
printf ("%c
please enter your destination:",'3');
lift_key_3=on;
break;
case '$':
printf ("AT+CIPSEND=0,33
");
for (a=0; a<10000; a++);
printf ("%c
please enter your destination:",'4');
lift_key_4=on;
break;
case '%':
printf ("AT+CIPSEND=0,33
");
for (a=0; a<10000; a++);
printf ("%c
please enter your destination:",'5');
lift_key_5=on;
break;
}
ES=0;
}
//下面附上更为可靠的esp8266初始化函数(使用了do...while...循环,确保esp8266回复了ok)//这里使用的是定时器2,所以程序与上面的有点不同 void init_esp()
{
uint a;
uchar ldat;
int d =1;