作者:CJFONe | 来源:互联网 | 2023-09-25 14:04
文章目录ESP8266一.前言二.环境三.代码讲解1.讲解2.示例3.blinker添加智能配网四.开始配网1.微信配网2.EspTouch软件五.总结ESP8266一.前言ES
ESP8266
一.前言
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/67cc2e96eddffff8.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYzMTczOA==,size_16,color_FFFFFF,t_70)
ESP8266模块深受发大电子爱好者的追捧,但是ESP8266连接网络是个问题,相信好多朋友都是将wifi名称和密码写死在代码中的,就像我这样
char ssid[] = "IT老翟";
char pswd[] = "123456789";
但是问题来啦,当我们的设备或一个地方或是wifi名称变了,那还得我们拆开设备来,重新改代码烧程序,作为客户来这样使用,估计换做谁都无法接受。今天给大家说用如何用微信或者软件,一键给我们的wifi模块配网
二.环境
- 我们使用 Arduin IDE 来编译我们的程序
- 微信 安信可 公众号
- EspTouch 安卓软件
三.代码讲解
1.讲解
当我们模块上电,先来检测看望了有没有连接成功,如果连接成功就不需要再继续配网,如果5s后没有连接成功,之间进入微信配网
void ESP_Connect()
{Serial.println("\r\n正在连接WIFI...");while(WiFi.status()!=WL_CONNECTED){if(WIFI_Status){Serial.print(".");digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); count++;if(count>=5){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);Serial.println("\r\nWait for Smartconfig...");WiFi.beginSmartConfig();while(1){Serial.println(".");digitalWrite(LED_BUILTIN,HIGH);delay(1000);digitalWrite(LED_BUILTIN,LOW);delay(1000);if(WiFi.smartConfigDone()){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; }}
}
2.示例
#include int count = 0;
bool WIFI_Status = true;
void smartConfig()
{WiFi.mode(WIFI_STA);Serial.println("\r\nWait for Smartconfig...");WiFi.beginSmartConfig();while(1){Serial.println(".");digitalWrite(LED_BUILTIN,HIGH);delay(1000);digitalWrite(LED_BUILTIN,LOW);delay(1000);if(WiFi.smartConfigDone()){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){if(WIFI_Status){Serial.print(".");digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); count++;if(count>=5){WIFI_Status = false;Serial.println("WiFi连接失败,请用手机进行配网"); } }else{smartConfig(); }}Serial.println("连接成功"); Serial.print("IP:");Serial.println(WiFi.localIP());
}void setup() {pinMode(LED_BUILTIN, OUTPUT);digitalWrite(LED_BUILTIN, HIGH);blinkerConnect();
}void loop() {
}
3.blinker添加智能配网
如果我们使用blinker点灯科技,也需要连接网络,blinker给的库函数为 Blinker.begin(auth,ssid,pswd)
,那我们如何配置可以看下面代码
这里以点灯程序为例
#define BLINKER_PRINT Serial
#define BLINKER_WIFI
#define BLINKER_MIOT_LIGHT#include
#include
BlinkerButton Button1("key");
BlinkerNumber Number1("num-abc");int counter = 0;int count = 0;
bool WIFI_Status = true; #define led D3
char auth[] = "xxxxxxxxx";
void smartConfig()
{WiFi.mode(WIFI_STA);Serial.println("\r\nWait for Smartconfig...");WiFi.beginSmartConfig();while(1){Serial.println(".");digitalWrite(LED_BUILTIN,HIGH);delay(1000);digitalWrite(LED_BUILTIN,LOW);delay(1000);if(WiFi.smartConfigDone()){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){if(WIFI_Status){Serial.print(".");digitalWrite(LED_BUILTIN, HIGH); delay(500); digitalWrite(LED_BUILTIN, LOW); delay(500); count++;if(count>=5){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);#endifpinMode(led, OUTPUT);digitalWrite(led, LOW);pinMode(LED_BUILTIN, OUTPUT);digitalWrite(LED_BUILTIN, HIGH);blinkerConnect();Blinker.begin(auth,WiFi.SSID().c_str(),WiFi.psk().c_str()); Blinker.attachData(dataRead);Button1.attach(button1_callback);
}void loop() {Blinker.run();
}
四.开始配网
我们将程序烧入我们的开发板,接下来就来配网,这里介绍两种方式一种是微信一种是app ,两种方式都是一样的,都是利用Arduino 封装好的 smartConfigDone()
函数来实现
1.微信配网
我们首先来关注微信公众号 “安信可科技”,注意配网时需要手机连接需要配置的 wifi热点,还需要开启定位
进入公众号需要点击右下角,进入配网
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/eec57030b649a106.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYzMTczOA==,size_16,color_FFFFFF,t_70)
2. EspTouch软件
先下载软件,同样需要连接wifi热点,大家定位,我这没有连接热点所有SSID: 没有显示
下载地址:EspTouch 下载
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/dc7ef30f57b727c7.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTYzMTczOA==,size_16,color_FFFFFF,t_70)
五.总结
这种办法配置网络还是比较方便的,我们配置一次后我们的wifi名称和密码会被写入到flash中,所以下次开启后会自动连接网络,不会让我们继续配网,如何wifi名称和密码和之前的不一样,就需要我们配网
再说一下配网过程中,esp8266指示灯的一个变化
模块上电之后,自动进入配网判断,指示灯每0.5s闪闪一次,5s内网络配置成功,指示灯熄灭,如果超过5s,还没连接成功进入微信配网,每1s灯闪烁一次,一直循环,知道连接成功,指示灯停止闪烁
代码中的打印信息大家调试完可以屏蔽,这样可以提高代码的运行速度