ESP8266联网测试-Arduino中文社区 - Powered by Discuz! Archiver

destild 发表于 2018-10-7 15:37

ESP8266联网测试

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


源代码#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);
    }
}



完2018/7/1


页: [1]
查看完整版本: ESP8266联网测试