esp8266学习笔记-1-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2308|回复: 2

esp8266学习笔记-1

[复制链接]
发表于 2020-3-4 21:12 | 显示全部楼层 |阅读模式
本帖最后由 allen100 于 2020-3-5 11:45 编辑

Nodemcu买了很久了,不能再继续吃灰,于是打算完完整整的把基础的东西学一遍,顺便在此记录学习经历和经验,参考前辈,同时为社区做点贡献。
那么,废话不多说了,直接看代码;
示例1:8266连上局域网
[mw_shl_code=arduino,true]#include <ESP8266WiFi.h>     //载入ESP8266WiFi库文件

void setup()
{
  Serial.begin(115200);
  Serial.println();

  WiFi.begin("ALLEN 6904", "953598974");  //让esp8266作为station连上手机开的热点,或者路由器,这是我的手机热点,改成自己的即可

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)  //判断当前连接状态,若没有连接上,则一直在这儿等待
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected, IP address: ");  //输出当前IP地址(局域网地址,网关就是手机),localIP是获取IP的函数(方法)
  Serial.println(WiFi.localIP());
}

void loop() {}[/mw_shl_code]
示例效果如图:
1.png

如果你在串口监视器迟迟不见IP地址输出,而是无休止的.............输出,一定一定看看WiFi.begin("ALLEN 6904", "953598974"); 这里的WIFI有没有改成自己的。
这个函数的两个参数,第一个改成自己WIFI 的SSID ,第二个改成密码(password)。

示例2:8266自动选择设定WIFI列表里信号最强的WIFI
在上一个例程中,我们可以看到这个esp8266客户端获得了我们期望的效果,连上了WiFi。那么,如果我们家里有好几个WiFi,或者需要在家里、工作地多地连接WiFi,那么我们是否可以实现把多个WiFi的SSID和password预存在程序里,当搜到哪个WiFi就连接哪个,而不用每次都更改程序代码重新上传呢?答案是肯定的。ESP8266WiFiMulti库完美的解决了这个问题。
看代码:
[mw_shl_code=arduino,true]#include <ESP8266WiFi.h> //载入相应的库文件
#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti wifiMulti;//建立wifiMulti对象

void setup()
{
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  wifiMulti.addAP("ALLEN 6904", "953598974");//这里是这个ESP8266WiFiMulti库特别的地方,使用addAP这个方法,可以给wifiMulti对象添加一个WiFi的信息,包括SSID和password
  wifiMulti.addAP("1001", "953598");//通过这个方法,添加多个WiFi接入点信息
  wifiMulti.addAP("tertiary-network-name", "pass-to-tertiary-network");//这里我就只添加两个WiFi接入点了,具体数量根据自己需要选择
}

void loop()
{
  wifiMulti.run();//尝试连接预设在程序里的WiFi
}[/mw_shl_code]
代码中可以添加多个WiFi接入点,8266将会一个一个尝试连接。那么我们处于多个WiFi环境下时,怎么知道当前连接的是哪个WiFi呢?看如下示例
看代码:
[mw_shl_code=arduino,true]#include <ESP8266WiFi.h>   //载入相应的库文件
#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti wifiMulti;    //建立wifiMulti对象
boolean connectioWasAlive = true;

void setup()
{
  Serial.begin(115200);
  Serial.println();e

  wifiMulti.addAP("ALLEN 6904", "953598974");//这里是这个ESP8266WiFiMulti库特别的地方,使用addAP这个方法,可以给wifiMulti对象添加一个WiFi的信息,包括SSID和password
  wifiMulti.addAP("1001", "953598");//通过这个方法,添加多个WiFi接入点信息
  wifiMulti.addAP("tertiary-network-name", "pass-to-tertiary-network");//这里我就只添加两个WiFi接入点了,具体数量根据自己需要选择
}

void monitorWiFi()                       //这个函数负责在连上WiFi后输出一次当前WiFi的SSID,当没有连上WiFi时输出一次Looking for WiFi,然后不断输出.
{
  if (wifiMulti.run() != WL_CONNECTED)
  {
    if (connectioWasAlive == true)
    {
      connectioWasAlive = false;
      Serial.print("Looking for WiFi ");
    }
    Serial.print(".");
    delay(500);
  }
  else if (connectioWasAlive == false)
  {
    connectioWasAlive = true;
    Serial.printf(" connected to %s\n", WiFi.SSID().c_str());
  }
}

void loop()//循环函数执行monitorWiFi()
{
  monitorWiFi();
}[/mw_shl_code]

效果如下:
2.png

可以看到在程序里,通过WiFi.SSID().c_str()函数,获取了当前接入的WiFi的SSID 。
发表于 2020-3-5 17:25 | 显示全部楼层
这个方法好用,我之前还用自己写的if方法来实现自动在几个不同的wifi信号之间切换。
 楼主| 发表于 2020-3-5 17:38 | 显示全部楼层
lemontreenm 发表于 2020-3-5 17:25
这个方法好用,我之前还用自己写的if方法来实现自动在几个不同的wifi信号之间切换。 ...

互相学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:31 , Processed in 0.075447 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表