ESP8266模块深受发大电子爱好者的追捧,但是ESP8266连接网络是个问题,相信好多朋友都是将wifi名称和密码写死在代码中的,就像我这样
char ssid[] = "IT老翟"; //你的WiFi热点名称
char pswd[] = "123456789"; //你的WiFi密码
但是问题来啦,当我们的设备或一个地方或是wifi名称变了,那还得我们拆开设备来,重新改代码烧程序,作为客户来这样使用,估计换做谁都无法接受。今天给大家说用如何用微信或者软件,一键给我们的wifi模块配网
当我们模块上电,先来检测看望了有没有连接成功,如果连接成功就不需要再继续配网,如果5s后没有连接成功,之间进入微信配网
/*连接网络*/
void ESP_Connect()
{
Serial.println("\r\n正在连接WIFI...");
while(WiFi.status()!=WL_CONNECTED)//判断是否连接WIFI成功
{
if(WIFI_Status)
{
Serial.print(".");
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
count++;
if(count>=5)//5s
{
WIFI_Status = false;
Serial.println("WiFi连接失败,请用手机进行配网");
}
}
else
{
smartConfig(); //微信智能配网
}
}
Serial.println("连接成功");
Serial.print("IP:");
Serial.println(WiFi.localIP());
}
下面是微信配网的程序,配置成功的
wif名称为: WiFi.SSID().c_str()
密码为: WiFi.psk().c_str()
/* 微信智能配网 */
void smartConfig()
{
WiFi.mode(WIFI_STA);//设置STA模式
Serial.println("\r\nWait for Smartconfig...");//打印log信息
WiFi.beginSmartConfig();//开始SmartConfig,等待手机端发出用户名和密码
while(1)
{
Serial.println(".");
digitalWrite(LED_BUILTIN,HIGH);//指示灯闪烁
delay(1000);
digitalWrite(LED_BUILTIN,LOW);//指示灯闪烁
delay(1000);
if(WiFi.smartConfigDone())//配网成功,接收到SSID和密码
{
Serial.println("SmartConfig Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
break;
}
}
}
//智能配网
#include //WIFI库,配网必需
int count = 0; //时间计数
bool WIFI_Status = true; //WIFI状态标志位
/* 微信智能配网 */
void smartConfig()
{
WiFi.mode(WIFI_STA);//设置STA模式
Serial.println("\r\nWait for Smartconfig...");//打印log信息
WiFi.beginSmartConfig();//开始SmartConfig,等待手机端发出用户名和密码
while(1)
{
Serial.println(".");
digitalWrite(LED_BUILTIN,HIGH);//指示灯闪烁
delay(1000);
digitalWrite(LED_BUILTIN,LOW);//指示灯闪烁
delay(1000);
if(WiFi.smartConfigDone())//配网成功,接收到SSID和密码
{
Serial.println("SmartConfig Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
break;
}
}
}
/*连接网络*/
void blinkerConnect()
{
Serial.println("\r\n正在连接WIFI...");
while(WiFi.status()!=WL_CONNECTED)//判断是否连接WIFI成功
{
if(WIFI_Status)
{
Serial.print(".");
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
count++;
if(count>=5)//5s
{
WIFI_Status = false;
Serial.println("WiFi连接失败,请用手机进行配网");
}
}
else
{
smartConfig(); //微信智能配网
}
}
Serial.println("连接成功");
Serial.print("IP:");
Serial.println(WiFi.localIP());
}
void setup() {
// 初始化有LED LED_BUILTIN 为开发板的指示灯管脚
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
//网络连接
blinkerConnect();
}
void loop() {
}
如果我们使用blinker点灯科技,也需要连接网络,blinker给的库函数为 Blinker.begin(auth,ssid,pswd)
,那我们如何配置可以看下面代码
这里以点灯程序为例
//智能配网
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT
#include
#include //WIFI库,配网必需
// 新建组件对象
BlinkerButton Button1("key");
BlinkerNumber Number1("num-abc");
int counter = 0;
int count = 0; //时间计数
bool WIFI_Status = true; //WIFI状态标志位
#define led D3 //要操作的IO
char auth[] = "xxxxxxxxx"; //设备秘钥自己改
/* 微信智能配网 */
void smartConfig()
{
WiFi.mode(WIFI_STA);//设置STA模式
Serial.println("\r\nWait for Smartconfig...");//打印log信息
WiFi.beginSmartConfig();//开始SmartConfig,等待手机端发出用户名和密码
while(1)
{
Serial.println(".");
digitalWrite(LED_BUILTIN,HIGH);//指示灯闪烁
delay(1000);
digitalWrite(LED_BUILTIN,LOW);//指示灯闪烁
delay(1000);
if(WiFi.smartConfigDone())//配网成功,接收到SSID和密码
{
Serial.println("SmartConfig Success");
Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
break;
}
}
}
/*连接网络*/
void blinkerConnect()
{
Serial.println("\r\n正在连接WIFI...");
while(WiFi.status()!=WL_CONNECTED)//判断是否连接WIFI成功
{
if(WIFI_Status)
{
Serial.print(".");
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
count++;
if(count>=5)//5s
{
WIFI_Status = false;
Serial.println("WiFi连接失败,请用手机进行配网");
}
}
else
{
smartConfig(); //微信智能配网
}
}
Serial.println("连接成功");
Serial.print("IP:");
Serial.println(WiFi.localIP());
}
// 按下按键即会执行该函数
void button1_callback(const String & state) {
BLINKER_LOG("get button state: ", state);
if(state == "on")
{
Button1.print("on");
digitalWrite(led, HIGH);
}
else if(state == "off")
{
Button1.print("off");
digitalWrite(led, LOW);
}
}
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
counter++;
Number1.print(counter);
}
void setup() {
// 初始化串口
Serial.begin(115200);
#if defined(BLINKER_PRINT)
BLINKER_DEBUG.stream(BLINKER_PRINT);
#endif
//初始化控制的led灯
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
// 初始化有LED的IO
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
//网络连接
blinkerConnect();
// 初始化blinker
Blinker.begin(auth,WiFi.SSID().c_str(),WiFi.psk().c_str()); //根据配网得到的WIFI信息和设备秘钥,连接到Blinker云
Blinker.attachData(dataRead);
Button1.attach(button1_callback);//注册按键回调函数
}
void loop() {
Blinker.run();
}
我们将程序烧入我们的开发板,接下来就来配网,这里介绍两种方式一种是微信一种是app ,两种方式都是一样的,都是利用Arduino 封装好的 smartConfigDone()
函数来实现
我们首先来关注微信公众号 “安信可科技”,注意配网时需要手机连接需要配置的 wifi热点,还需要开启定位
进入公众号需要点击右下角,进入配网
先下载软件,同样需要连接wifi热点,大家定位,我这没有连接热点所有SSID: 没有显示
下载地址:EspTouch 下载
这种办法配置网络还是比较方便的,我们配置一次后我们的wifi名称和密码会被写入到flash中,所以下次开启后会自动连接网络,不会让我们继续配网,如何wifi名称和密码和之前的不一样,就需要我们配网
再说一下配网过程中,esp8266指示灯的一个变化
模块上电之后,自动进入配网判断,指示灯每0.5s闪闪一次,5s内网络配置成功,指示灯熄灭,如果超过5s,还没连接成功进入微信配网,每1s灯闪烁一次,一直循环,知道连接成功,指示灯停止闪烁
代码中的打印信息大家调试完可以屏蔽,这样可以提高代码的运行速度