回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块4 中等

头像 驴友花雕 2023.07.29 20 1

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 Witty Cloud 机智云开发板 ESP Witty   
 项目四:扫描可用的 WiFi 网络

 实验开源代码
 

 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
  项目四:扫描可用的 WiFi 网络
*/

#include <ESP8266WiFi.h>

const int greenPin = 12;

void setup() {
  Serial.begin(115200);
  pinMode(greenPin, OUTPUT);
  digitalWrite(greenPin, HIGH);
  delay (6000);
  digitalWrite(greenPin, LOW);
  Serial.println(F("\nESP8266 WiFi 扫描"));

  // 设置 WiFi 为站模式
  WiFi.mode(WIFI_STA);

  // 如果之前已连接,则断开与 AP 的连接
  WiFi.disconnect();
  delay(100);
}

void loop() {
  String ssid;
  int32_t rssi;
  uint8_t encryptionType;
  uint8_t* bssid;
  int32_t channel;
  bool hidden;
  int scanResult;

  Serial.println(F("正在开始WiFi扫描..."));

  scanResult = WiFi.scanNetworks(/*async=*/false, /*hidden=*/true);

  if (scanResult == 0) {
    Serial.println(F("未找到网络"));
  } else if (scanResult > 0) {
    Serial.printf(PSTR("%d 个网络找到:\n"), scanResult);

    // Print unsorted scan results
    for (int8_t i = 0; i < scanResult; i++) {
      WiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden);

      Serial.printf(PSTR("  %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %s\n"),
                    i,
                    channel,
                    bssid[0], bssid[1], bssid[2],
                    bssid[3], bssid[4], bssid[5],
                    rssi,
                    (encryptionType == ENC_TYPE_NONE) ? ' ' : '*',
                    hidden ? 'H' : 'V',
                    ssid.c_str());
      delay(0);
    }
  } else {
    Serial.printf(PSTR("WiFi 扫描错误 %d"), scanResult);
  }

  // 在再次扫描之前稍等片刻
  delay(5000);
  Serial.println(F(""));
}

项目四:扫描可用的 WiFi 网络

  项目串口返回情况

 

37.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
  项目五:扫描可用的 WiFi 网络之二,按钮输入用于启动扫描和板载 LED亮起以指示扫描何时进行
  在每个回路上,还要检查连接到 LDR 的模拟输入并调整RGB 绿色 LED 的亮度以匹配测量的亮度。

  实验开源代码

 

 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
  项目五:扫描可用的 WiFi 网络之二,按钮输入用于启动扫描和板载 LED亮起以指示扫描何时进行
  在每个回路上,还要检查连接到 LDR 的模拟输入并调整RGB 绿色 LED 的亮度以匹配测量的亮度。
*/

#include "ESP8266WiFi.h"

const int BUTTON_PIN = 4;    // 定义按钮所连接的引脚
const int ON_BOARD_LED = 2;  // 定义板载 LED 连接到的引脚
const int RGB_G_PIN = 12;    // RGB 绿色 LED
const int LDR_PIN = A0;      // 定义 LDR光敏电阻 连接的模拟引脚

//===============================================================================
//  初始化
//===============================================================================

void setup() {
  pinMode(ON_BOARD_LED, OUTPUT);       // 将 LED_BUILTIN 引脚初始化为输出
  pinMode(BUTTON_PIN, INPUT_PULLUP);   // 使用内置上拉初始化按钮引脚
  digitalWrite(ON_BOARD_LED, HIGH);    // 确保 LED 关闭
  Serial.begin(115200);                // 设置通信速率为 115200

  // 将 WiFi 设置为站模式,如果之前已连接,则与 AP 断开连接
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);
  Serial.println("WiFi扫描 初始化完成");
}

//===============================================================================
// 主要程序
//===============================================================================

void loop() {
  int btn_Status = HIGH;
  int lightIntensity;
  lightIntensity = analogRead(LDR_PIN);  // 读取光照强度
  analogWrite( RGB_G_PIN, map(lightIntensity, 40, 1023, 0, 1023));
  btn_Status = digitalRead (BUTTON_PIN);  // 检查按钮状态
  if (btn_Status == LOW) {                // 按钮按下,所以做点什么
    Serial.print("光强度读数: ");
    Serial.println(lightIntensity);
    Serial.println("扫描开始......");
    Serial.println("");
    digitalWrite(ON_BOARD_LED, LOW);       // 打开 LED
    // 无线上网。扫描网络将返回找到的网络数量
    int n = WiFi.scanNetworks();
    Serial.println("扫描完成!");
    Serial.println("");
    if (n == 0)
      Serial.println("没有找到网络");
    else
    {
      Serial.print("找到网络=");
      Serial.print(n);
      Serial.println("个");

      for (int i = 0; i < n; ++i)
      {
        // 为找到的每个网络打印 SSID 和 RSSI
        Serial.print(i + 1);
        Serial.print(": ");
        Serial.print(WiFi.SSID(i));
        Serial.print(" (");
        Serial.print(WiFi.RSSI(i));
        Serial.print(")");
        Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " : 不安全" : " : 加密");
        delay(10);
      }
    }
    Serial.println("");
    digitalWrite(ON_BOARD_LED, HIGH);    // 关闭 LED
  }
}

  项目五:扫描可用的 WiFi 网络之二,按钮输入用于启动扫描和板载 LED亮起以指示扫描何时进行
  在每个回路上,还要检查连接到 LDR 的模拟输入并调整RGB 绿色 LED 的亮度以匹配测量的亮度。

  项目串口返回情况

 

38.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
 项目六:尝试连接WiFi 网络(绿灯亮)

 实验开源代码
 

 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
  项目六:尝试连接WiFi 网络(绿灯亮)
*/

#include <ESP8266WiFi.h>
const char* ssid = "zhz2";
const char* password = "12345678";

void setup() {
  Serial.begin(115200);
  delay(10);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(15, OUTPUT);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
  digitalWrite(15, LOW);

  // 我们将首先连接到 Wi-Fi 网络:

  Serial.println();
  Serial.println();
  Serial.print("连接到 ");
  Serial.println(ssid);
  Serial.println("尝试连接WiFi 网络......");
  WiFi.begin(ssid, password);

  /*
    我们等到状态指示ESP8266已连接到Wi-Fi网络,
    此后,将显示Wi-Fi连接消息以及路由器分配给它的IP地址。
    您的路由器需要具备DHCP功能并且已激活DHCP功能:
  */

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    Serial.println("");
  }
  Serial.println("Wi-Fi 已连接");
  Serial.println("IP地址: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  if (WiFi.status() == WL_CONNECTED)
    digitalWrite(12, HIGH);//连接后绿灯亮
}

  项目六:尝试连接WiFi 网络(绿灯亮)

  项目串口返回情况

 

40.jpg

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验一百七十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
 项目七:尝试连接多个WiFi 网络
 - 在启动时快速连接到以前的 WiFi 网络
 - 注册多个网络(至少 1 个)
 - 以最强信号 (RSSI) 连接到 WiFi
 - 当连接失败或丢失时回退以连接到下一个 WiFi
 - 回退以连接到 WiFi 扫描未报告的隐藏 SSID

 

 实验开源代码
 

 

代码
/*
  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百三十五: ESP8266 Witty Cloud ESP-12F WiFi模块 机智云开发板 ESP Witty
  项目七:尝试连接多个WiFi 网络
  - 在启动时快速连接到以前的 WiFi 网络
  - 注册多个网络(至少 1 个)
  - 以最强信号 (RSSI) 连接到 WiFi
  - 当连接失败或丢失时回退以连接到下一个 WiFi
  - 回退以连接到 WiFi 扫描未报告的隐藏 SSID
*/

#include <ESP8266WiFiMulti.h>

ESP8266WiFiMulti wifiMulti;

// 每个 AP 的 WiFi 连接超时。连接时间较长时增加。
const uint32_t connectTimeoutMs = 5000;

void setup() {
  // 不要在闪存中保存 WiFi 配置 - 可选
  WiFi.persistent(false);
  pinMode(12, OUTPUT);
  pinMode(15, OUTPUT);
  digitalWrite(12, LOW);
  digitalWrite(15, LOW);
  Serial.begin(115200);
  Serial.println("\nESP8266 Multi WiFi example");

  // 设置 WiFi 为站模式
  WiFi.mode(WIFI_STA);

  // 注册多个WiFi网络
  wifiMulti.addAP("zhz", "12345678");
  wifiMulti.addAP("zhz2", "12345678");
  wifiMulti.addAP("zhz_5G", "12345678");
  // 更多是可能的
}

void loop() {
  // 保持WiFi连接
  if (wifiMulti.run(connectTimeoutMs) == WL_CONNECTED) {
    Serial.print("WiFi 已连接: ");
    Serial.print(WiFi.SSID());
    Serial.print(" ");
    Serial.println(WiFi.localIP());
    digitalWrite(12, HIGH);//连接后绿灯亮
  } else {
    Serial.println("WiFi未连接!");
    digitalWrite(15, HIGH);//未连接红灯亮
  }
  delay(1000);
}

  项目七:尝试连接多个WiFi 网络
  - 在启动时快速连接到以前的 WiFi 网络
  - 注册多个网络(至少 1 个)
  - 以最强信号 (RSSI) 连接到 WiFi
  - 当连接失败或丢失时回退以连接到下一个 WiFi
  - 回退以连接到 WiFi 扫描未报告的隐藏 SSID

  项目串口返回情况

 

41.jpg

评论

user-avatar
  • hacker_

    hacker_2023.07.31

    666

    0
    icon 他的勋章
      展开更多