ESP8266+安信可微信智能配网

文章目录

  • ESP8266
    • 一.前言
    • 二.环境
    • 三.代码讲解
      • 1.讲解
      • 2.示例
      • 3.blinker添加智能配网
    • 四.开始配网
      • 1.微信配网
      • 2. EspTouch软件
    • 五.总结

ESP8266

一.前言

ESP8266+安信可微信智能配网_第1张图片
ESP8266模块深受发大电子爱好者的追捧,但是ESP8266连接网络是个问题,相信好多朋友都是将wifi名称和密码写死在代码中的,就像我这样

char ssid[] = "IT老翟"; //你的WiFi热点名称
char pswd[] = "123456789"; //你的WiFi密码

但是问题来啦,当我们的设备或一个地方或是wifi名称变了,那还得我们拆开设备来,重新改代码烧程序,作为客户来这样使用,估计换做谁都无法接受。今天给大家说用如何用微信或者软件,一键给我们的wifi模块配网

二.环境

  • 我们使用 Arduin IDE 来编译我们的程序
  • 微信 安信可 公众号
  • EspTouch 安卓软件

三.代码讲解

1.讲解

当我们模块上电,先来检测看望了有没有连接成功,如果连接成功就不需要再继续配网,如果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;      
    }
  }  
}

2.示例

//智能配网
#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() {
}

3.blinker添加智能配网

如果我们使用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() 函数来实现

1.微信配网

我们首先来关注微信公众号 “安信可科技”,注意配网时需要手机连接需要配置的 wifi热点,还需要开启定位
进入公众号需要点击右下角,进入配网
ESP8266+安信可微信智能配网_第2张图片

2. EspTouch软件

先下载软件,同样需要连接wifi热点,大家定位,我这没有连接热点所有SSID: 没有显示

下载地址:EspTouch 下载

ESP8266+安信可微信智能配网_第3张图片

五.总结

这种办法配置网络还是比较方便的,我们配置一次后我们的wifi名称和密码会被写入到flash中,所以下次开启后会自动连接网络,不会让我们继续配网,如何wifi名称和密码和之前的不一样,就需要我们配网

再说一下配网过程中,esp8266指示灯的一个变化
模块上电之后,自动进入配网判断,指示灯每0.5s闪闪一次,5s内网络配置成功,指示灯熄灭,如果超过5s,还没连接成功进入微信配网,每1s灯闪烁一次,一直循环,知道连接成功,指示灯停止闪烁

代码中的打印信息大家调试完可以屏蔽,这样可以提高代码的运行速度

你可能感兴趣的:(ESP8266)