在文章《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