调用方式
一般设置时都需要多条AT指令,也采用状态机的方式进行设置。
以设置WIFI模块为AP模式为例,程序如下:
//-------------------设置为AP模式------------
//设置的SSID 密码 和本机IP
//成功返回0 返回1表示错误 返回2正在设置
uint8_t SetAPMode(UART_HandleTypeDef *huart)
{
static uint8_t status=0;//
static ATCMD_StatusTypeDef res;
switch(status)
{
case 0:
res = AT_CMD_ESP12(huart,(uint8_t*)“AT+CWMODE_DEF=2\r\n”,1000,“OK”,3);//设置为AP模式
if(res==ATCMD_REVOK)
status=1;
else if(res==ATCMD_TIMEOUT)
{
status=0;
return 1;
}
break;
case 1:
res = AT_CMD_ESP12(huart,(uint8_t*)“AT+CWSAP_DEF=\”ESP8266\“,\”1234567890\“,5,3\r\n”,1000,“OK”,3);//设置AP
if(res==ATCMD_REVOK)
status=2;
else if(res==ATCMD_TIMEOUT)
{
status=0;
return 1;
}
break;
case 2:
res = AT_CMD_ESP12(huart,(uint8_t*)“AT+CIPAP_DEF=\”192.168.5.1\“,\”192.168.5.1\“,\”255.255.255.0\“\r\n”,1000,“OK”,3);//设置IP
if(res==ATCMD_REVOK)
status=3;
else if(res==ATCMD_TIMEOUT)
{
status=0;
return 1;
}
break;
case 3://设置UDP
res = AT_CMD_ESP12(huart,(uint8_t*)“AT+CIPSTART=\”UDP\“,\”192.168.5.255\“,8899,8266,0\r\n”,1000,“OK”,3);
if(res==ATCMD_REVOK)
status=4;
else if(res==ATCMD_TIMEOUT)
{
status=0;
return 1;
}
break;
case 4://设置完成
status=0;
return 0;
default:
break;
}
return 2;
}
上述设置程序中,AT指令接收错误后的操作是返回执行第一条指令,当然也可以进行一些其它操作,比如多次接收错误后模块重新复位等。上述设置程序也可以是WIFI模块主程序的一个状态,WIFI主程序如下。
该函数在程序主循环中周期循环调用即可。可以完成AT指令的发送,等待的操作,也不影响其它程序的执行。
3.总结
本篇文章其实主要介绍了状态机的概念,层层调用。理解起来并不困难,实际编程中非常实用。可以广泛应用于其它程序的编写。