从零开始的ESP8266探索(16)-扫描网络演示

2023-11-14

目的

ESP8266可以通过扫描获取周围环境中的WiFi热点,所以我们也可以先扫描一下再决定连接到某个网络上,这也是一种常见的应用场景。

使用演示

同步扫描

使用下面代码进行同步扫描,同步扫描时会阻塞程序运行:

#include "ESP8266WiFi.h"

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

    WiFi.mode(WIFI_STA); //设置为STA模式
    WiFi.disconnect();   //断开当前可能的连接
    delay(100);

    Serial.println("scan start");
    int n = WiFi.scanNetworks(); //扫描并返回搜索到的网络数量,该方法默认会阻塞
    Serial.println("scan done");
    if (n != 0)
    {
        Serial.print(n);
        Serial.println(" networks found");
        for (int i = 0; i < n; ++i)
        {
            Serial.println();
            Serial.print(i + 1);
            Serial.print(":       ");
            Serial.print(WiFi.SSID(i)); //打印网络名称
            Serial.print("        ");
            Serial.print(WiFi.RSSI(i)); //打印信号强度
            Serial.print("        ");
            Serial.print(WiFi.channel(i)); //打印网络使用通道
            Serial.print("        ");
            Serial.print((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? "未加密" : "加密"); //打印是否加密
            delay(10);
        }
    }
}

void loop()
{
}

在这里插入图片描述

异步扫描

使用下面代码进行异步扫描,异步扫描不会阻塞程序运行:

#include "ESP8266WiFi.h"

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

  WiFi.mode(WIFI_STA); //设置为STA模式
  WiFi.disconnect();   //断开当前可能的连接
  delay(100);

  Serial.println("开始扫描");
  WiFi.scanNetworks(true); //启动异步扫描
}

void loop()
{
  delay(1000);
  int n = WiFi.scanComplete(); //获取扫描状态
  if (n >= 0)
  {
    Serial.println("扫描完成");
    for (int i = 0; i < n; ++i)
    {
      Serial.println();
      Serial.print(i + 1);
      Serial.print(":       ");
      Serial.print(WiFi.SSID(i)); //打印网络名称
      Serial.print("        ");
      Serial.print(WiFi.RSSI(i)); //打印信号强度
      Serial.print("        ");
      Serial.print(WiFi.channel(i)); //打印网络使用通道
      Serial.print("        ");
      Serial.print((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? "未加密" : "加密"); //打印是否加密
      delay(10);
    }
    WiFi.scanDelete(); //清除内存中的扫描结果
  }
  else if (n == -1)
  {
    Serial.println("正在扫描");
  }
  else if (n == -2)
  {
    Serial.println("未进行扫描");
  }
}

在这里插入图片描述

总结

扫描网络功能为ESP8266的使用又增加了一种应用场景,使用起来将会更加方便。
更多内容可以参考如下:
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-examples.html
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/scan-class.html
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ESP8266WiFiScan.h
https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零开始的ESP8266探索(16)-扫描网络演示 的相关文章

  • 使用 Python 模块 SMBus、Raspberry Pi 和 Arduino 时出现输入/输出错误

    我已经连接了一个树莓派 http en wikipedia org wiki Raspberry Pi and 彩虹杜伊诺 http en wikipedia org wiki List of Arduino boards and comp
  • GSM SM5100B C M E E R R O R:4 错误

    我正在使用 Arduino 来控制 SM5100B GSM 设备 除了当我想在收到另一条短信后发送短信时 一切正常 我明白了 错误代码 确定 gt C M G S 2 5 确定 C M E E R O R 4 我处理上述收到的短信的代码 i
  • 使用 Arduino 将serial.read()转换为可用的字符串

    我正在使用两个 Arduino 来相互发送纯文本字符串新软系列 https docs arduino cc learn built in libraries software serial and an RF http en wikiped
  • C++ 递减单字节(易失性)数组的元素不是原子的!为什么? (另外:如何在 Atmel AVR mcus/Arduino 中强制原子性)

    由于试图通过一些我不知道的简单内容来调试我的代码 我损失了几天的时间 实际上是大约 25 小时的工作 事实证明 在 AVR ATmega328 8 位微控制器 Arduino 上 用 C 递减单字节数组的元素不是原子操作 并且需要原子访问防
  • Arduino 中的字符串比较

    我正在开发基于网络的家庭自动化系统 因此我的Arduino向服务器发送请求并在串行监视器中获得以下响应以及 loneOn 这是由于Serial println r 陈述 HTTP 1 1 200 OK Date Mon 13 Oct 201
  • 在 Android 上将 USB 波特率从 9600 更改为 115200

    我有一个 Arduino 它以 115200 波特率串行发送数据 有一个应用程序以 9600 波特率从 Arduino 接收数据 代码是 Arduino USB serial converter setup Set control line
  • printf 的包装

    我在Arduino下编码 我想开发串行打印格式化功能 所以我尝试使用sprintf未知大小的缓冲区 基本上 我们可以避免谈论 Arduino 及其串行输出 并考虑将文本写入缓冲区 然后使用printf 我试过这个 include
  • 蓝牙 HC-05 发送错误 1F 仅适用于 INQ 命令

    我的新蓝牙 HC 05 模块有问题 在 AT 模式下 它可以与我需要的所有命令完美配合 除了 INQ 我已经尝试事先发送一大堆其他命令 AT INIT OK AT ORGL OK AT ROLE 1 OK AT CLASS 0 OK 他们都
  • Arduino I2S 正弦波

    我正在开发一个项目 我想通过组合不同的正弦波来生成 简单 声音 我使用的是 arduino mkrZero 因为它内置了 I2S 接口 并且似乎有足够的处理能力来满足我的需求 I have wired my system exactly l
  • 如何将 char 数组定义为常量?

    这里是 C C 菜鸟 我已经在头文件中定义了它 typedef unsigned char BitChar 9 8 data bytes chars and one width byte char extern BitChar BitFon
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数
  • C-如何使用PROGMEM存储和读取char数组

    我有三个字符数组 我不希望 Arduino 将它们存储在SRAM http en wikipedia org wiki Static random access memory 所以我想使用PROGMEM来存储和读入flash http en
  • 终止导致设备或资源繁忙的进程:“/dev/ttyUSB0”?

    我使用以下 Python 代码连接到我的 Arduino 板 device glob glob dev ttyUSB 0 time sleep 1 arduino serial Serial device 115200 timeout 5
  • 如何为 Arduino 或类似的微控制器编写 JavaScript 编译器? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我意识到这个问题会引起一些人的注意 并且我意识到 JavaScript 传统上是一种解释性语言 请让我解释一下 我是一名专门从事 We
  • 如何使用GSM模块SIM800和Arduino Uno发送短信?

    我正在尝试通过 SIM800 GSM 模块从 Arduino 发送短信 消息到达给定号码 但格式不正确 它显示 消息格式不支持 我在这里添加了我的代码 非常感谢您的快速回复 include
  • 在 Arduino 上将整数/小数转换为十六进制?

    如何将整数或小数变量转换为十六进制字符串 我可以做相反的事情 将十六进制转换为整数 但我无法找出其他方法 这是为了Serial print 数组中的十六进制值 查看 Arduino 字符串教程here http arduino cc en
  • 使用 Ardulink 命令 Arduino Uno

    我试图在我的 JAVA 应用程序中使用 Ardulink 库来命令我的 Arduino Uno 但没有成功 我不知道我错过了什么 这是我的代码 Link link Link getDefaultInstance boolean connec
  • 在声明对象之前在全局函数中使用类的成员函数

    我有一个事件处理函数 在该函数中调用了类的成员函数 事件处理函数在类 cpp 文件中声明 但不是类的一部分 它不是成员函数 当我编译代码时 编译器表示该函数在范围内 因为它正在调用全局事件处理函数中的成员函数 我的问题如下 有没有办法在全局
  • Arduino串口数据解析

    我正在编写一个应用程序 通过蓝牙用我的 Android 手机控制我的机器人 一切都很顺利 数据得到回显和验证 但我在协议方面遇到了一些问题 特别是我希望我的机器人的轮子在我发送时转动一个命令 例如s 10 100 or s 30 10 数值
  • 当我启动程序时,Arduino IDE (Win10) 崩溃

    我的 Arduino IDE Win10 上的版本为 1 8 12 在启动时崩溃 运行arduino debug exe我收到此错误消息 C Program Files x86 Arduino gt arduino debug exe Se

随机推荐

  • Python实现快乐的数字

    题目要求 编写一个算法来确定一个数字是否 快乐 快乐的数字按照如下方式确定 从一个正整数开始 用其每位数的平方之和取代该数 并重复这个过程 直到最后数字要么收敛等于1且一直等于1 要么将无休止地循环下去且最终不会收敛等于1 能够最终收敛等于
  • 浅谈 Spring Cloud Alibaba

    Spring Cloud Alibaba 一 什么是 Spring Cloud Alibaba 二 它能做什么 三 它的组件包括什么 四 如何使用 一 什么是 Spring Cloud Alibaba Spring Cloud Alibab
  • 【猿人学WEB题目专解】专栏通知

    据说 看我文章时 关注 点赞 收藏 的 帅哥美女们 心情都会不自觉的好起来 前言 作者简介 大家好我是 user from future 意思是 来自未来的用户 寓意着未来的自己一定很棒 个人主页 点我直达 在这里肯定能找到你想要的 专栏介
  • 使用Intellij idea创建一下java后台项目并实现第一个接口

    创建java后台项目 1 下载并安装Intellij idea 2 选择Create New Project 3勾选左侧的Spring Initializr 点击next 4 填写项目名称和包名 点击next 5 勾选左侧web 然后勾选中
  • 怎么用群晖webdav实现外网映射网络驱动器

    前几天刚作好群晖nas局域网内的磁盘映射功能 今天老板又想实现在家里也能跟在公司一样的方便访问映射功能 因为使用网页操作实在太麻烦了 这可怎么办官方提供的 Assistant工具只能操作局域网的 又没有独立的IP地址 只好求助技术支持了 还
  • springboot项目中解决SpringBoot上传图片后访问不到的问题

    1 解决SpringBoot上传图片后访问不到的问题 问题描述 前后端不分离项目 前端 thymeleaf 后端 mybatis springboot架构 在前端上传图片之后 上传到指定的本地路径 路径为 idea项目下的 resource
  • springboot security学习-01

    引入相关依赖
  • 心血来潮,自实现标准库的shared_ptr

    include
  • 虚拟机怎么重启服务器,虚拟机服务器重启命令行

    虚拟机服务器重启命令行 内容精选 换一换 确认服务器服务是否开启 登录虚拟机内部 执行如下命令 查看系统的端口监听状态 如图1所示 netstat ntplWindows虚拟机可以在命令行中执行netstat ano查看系统的端口监听状态
  • awk 以及 sed 的一下常用方法

    前段时间看了慕课网上关于awk 和 sed 的一些用法 以及自己实际中用到的做一个简单的总结记录 方便以后使用到的时候查阅 1 首先是正则表达式 边界字符 1 首字符 2 尾字符 例子 筛选出以a字母后面跟着3个以上数字 a字母开头 b字母
  • 【JS】简易ATM取款机

    页面显示请输入你的操作 不输入4就会反复弹出这个对话框 1 存款 2 取款 3 查看余额 4 退出 while嵌套switch 循环的时候 需要反复提示输入框 所以提示框写到循环里面 退出的条件是用户输入了4 如果是4 则结束循环 不在弹窗
  • 文件名称乱码,content-disposition 获取filename乱码的解决办法

    1 前端先确认是否能在响应头里获取到filename 如果获取不到 需后端服务器设置请求头Access Control Expose Headers 设置headers name 文件名称 中国 xlsx public static Htt
  • 微信小程序接入客服功能开发流程

    首先看官方文档这样说的 1 小程序内 开发者在小程序内添加客服消息按钮组件 用户可在小程序内唤起客服会话页面 给小程序发消息 客服消息使用指南 微信开放文档 客服消息按钮组件 button 微信开放文档 在线客服是通过按钮组件来绑定的 所以
  • mac安装MongoDB以后 报错 command not found: mongod

    mac安装MongoDB以后 报错 command not found mongod 阐述 这里具体就不介绍怎么安装MongoDB了 可以自行的去查教程 官网 MongoDB官网 菜鸟教程 建议使用这个 报错问题 当执行 mongod ve
  • 循环里,设置执行间隔

    在循环内控制 多长时间执行一次循环体 js没有提供这种方法 就只能自己写个判断时间的函数 第一种方法 es6之前我们可以用时间戳来判断 function sleep n var start new Date getTime 定义起始时间的毫
  • AQS同步组件-CountDownLatch解析和案例

    CountDownLatch原理 CountDownLatch是通过一个计数器来实现的 计数器的初始化值为线程的数量 每当一个线程完成了自己的任务后 计数器的值就相应得减1 当计数器到达0时 表示所有的线程都已完成任务 然后在闭锁上等待的线
  • Linux——线程同步(互斥锁、信号量、读写锁、自旋锁、条件变量)

    前言 当多个控制线程共享相同的内存时 需要确保每个线程看到一致的数据视图 若每个线程使用的变量都是其他线程不会读取或修改的 那么就不存在一致性概念 同样地 若变量是只读的 多个线程同时读取该变量也不会有一致性问题 但是当某个线程可以修改变量
  • Myeclipse平台struts+hibernate+spring项目开发示例

    如果您按照上篇文章配置成功 可以进行开发简单的J2EE项目 开发前准备 1 新建项目包 如下图 Dao 数据层 service 逻辑层 web web展现层 2 建立好三层架构 部署好包名 建立一个jsp文件 取名为 login jsp 代
  • Go设置国内源

    Go设置国内源 如果你需要Beego这个框架 正常来说你需要安装Git之后go get不会报错 但由于网络问题 go get会非常慢 以至于没法使用 这个时候我们需要需要国内源来进行加速 首先需要我们开启Go的MODULL支持 SETX G
  • 从零开始的ESP8266探索(16)-扫描网络演示

    文章目录 目的 使用演示 同步扫描 异步扫描 总结 目的 ESP8266可以通过扫描获取周围环境中的WiFi热点 所以我们也可以先扫描一下再决定连接到某个网络上 这也是一种常见的应用场景 使用演示 同步扫描 使用下面代码进行同步扫描 同步扫