ESP8266联网测试

时间:2024-03-18 11:25:16

在文章《Arduino+ESP8266连接WiFi》中,测试了通过ESP8266的AT命令来连接WiFi的功能,实际的使用过程中这种连接方式需要查找复杂的命令行,所以我们尝试自动的WiFi连接。即通过将固定的AT命令行加载到Arduino控制器中,然后由控制器自主独立的控制ESP8266的WiFi连接。


连线图

ESP8266联网测试


源代码

#include <stdlib.h>

#include <SoftwareSerial.h>

#define WIFI_TX 9

#define WIFI_RX 8

#define SERIAL_TX_BUFFER_SIZE 2048

#define SERIAL_RX_BUFFER_SIZE 2018

String _comdata_wifi = "";

String wifiName = "D********d";  //wifi名

String wifiPassword ="d********n"; //wifi密码

char tempChar;

boolean DebugStart = true; //测试运行标识

boolean WifiStart =true; //wifi运行标识

 

SoftwareSerial wifi(WIFI_RX,WIFI_TX); // 定义软串口RX, TX

 

//初始化-----------------------------------------

void setup()

{

   wifi.begin(115200);

   Serial.begin(9600);

   sendDebug("AT");       //指令测试

   delay(5000);                      

}

 

//主循环-----------------------------------------

void loop()

{

 getWifiSerialData(); 

//获取ESP8266反馈给Arduino的消息,如果消息不为空,则将消息打印到串口

 

  //Debug 测试

 if(_comdata_wifi!="" & DebugStart){

   Serial.println(_comdata_wifi);

   delay(1000);

   if(_comdata_wifi.indexOf("OK")) // 在setup中发送测试指令AT,如果收到OK则说明ESP8266能够正常通信,于是连接WiFi

    {

       Serial.println("收到OK,测试指令成功。开始连接WIFI");

       delay(1000);   //在串口输出的时候,加一点等候时间

       connectWiFi(wifiName,wifiPassword);

       DebugStart = false;// 测试指令只运行一次即可

   }else{

       Serial.println("未收到OK,测试指令不成功成功。无法连接WIFI");

    }

    _comdata_wifi=String("");

  }

 

 

  //连接WIFI测试

  if(_comdata_wifi!="" & WifiStart){

   Serial.println(_comdata_wifi);

   delay(1000);

   if(_comdata_wifi.indexOf("WIFI GOT IP")){

        Serial.println("接收到WIFI GOT IP,WIFI 连接成功");

        delay(1000);

        WifiStart = false;

   }else{

        Serial.println("WIFI 连接不成功");

        delay(1000);

    }

   _comdata_wifi=String("");

   }

}

 

void sendDebug(String cmd)

{

   Serial.println("sendDebug测试指令输入:wifi.println(AT)");

   wifi.println(cmd);   

}

 

boolean connectWiFi(String Name,StringPassword)

{

   String cmd="AT+CWJAP=\"";

   cmd+=Name;

   cmd+="\",\"";

   cmd+=Password;

   cmd+="\"";

   wifi.println(cmd);

   delay(2000);                //在输送指令的时候,加一点等候时间。

}

 

void getWifiSerialData(){

   while(wifi.available()>0){

     tempChar = wifi.read();

     delay(10);

     _comdata_wifi += char(tempChar);

     delay(10); 

    }

}


输出结果

 

ESP8266联网测试

2018/7/1

 

ESP8266联网测试