基于ESP8266+网络调试助手点灯实验

news2024/11/17 5:47:05

文章目录

  • ESP8266串口wifi模块
  • 简介
  • 实验准备
  • 硬件接线
  • 程序下载
  • 注意事项
  • 总结

ESP8266串口wifi模块

在这里插入图片描述

简介

ESP8266 是一种低成本、高性能的 Wi-Fi 模块,内置了 TCP/IP 协议栈,它可以作为单独的无线网络控制器,或者与其他微控制器进行串口通信。它具有以下特点:
1、采用CH340芯片,是一款高性价比开发板;
2、设计,使USB接口更加牢固;
3、文档资料齐全,任何人可免费获取,仅供传阅;
4、每一块出货板子都是经过严格测试(测试一块板子需2-5分钟),严格把控质量。

支持无线802.11 b/g/n标准;
支持STA/AP/STA+AP三种工作模式;
内置TCP/IP协议栈,支持多路TCPClient连接(5MAX);
传输速率:110-460800bps:支持UART/GPIO数据通信接口;支持远程固件升级(OTA);工作温度:-40℃~+125℃;驱动形式:双路大功率H桥驱动

在本次实验中实现ESP8266手机点灯,即通过手机 APP 控制 ESP8266 来实现点亮LED和熄灭LED。

实验准备

ESP8266模块1个
LED1个
Microusb数据线(用于板子下载程序和供电)1条
杜邦线若干
网络调试助手APP1个

硬件接线

首先确定led要连接在esp8266的哪个引脚,查看esp8266引脚定义:
在这里插入图片描述
本次实验点亮LED使用esp8266模块的D2引脚,通过引脚定义可以知道它为GPIO4. 所以在arduino中定义led引脚为4, 其中led正极固定接vin给高电平,led负极通过D2引脚给高低电平变化,控制led的亮灭。硬件连接图如下:

在这里插入图片描述
在这里插入图片描述

程序下载

#include <ESP8266WiFi.h>

#define led 4 //led接在esp8266的GPIO4上
const char *ssid     = "YXDZ_8266";    //要连接的wifi名称
const char *password = "12345678";    //连接的wifi密码
const char *host = "172.21.150.2";    //要连接的手机端IP,手机和8266要在同一网络下

WiFiClient client;           //创建WiFiClient对象client,用于处理TCP连接
const int tcpPort = 8080;  //创建服务器时指定的端口号


void setup()
{
    Serial.begin(9600);               //初始化串口通信,波特率为9600
    pinMode(led,OUTPUT);             //将LED引脚设置为输出模式
    delay(10);
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);          //通过串口显示连接的wifi名称

    WiFi.begin(ssid, password);   //建立WiFi连接

     //等待连接建立
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
    }

 //连接成功信息及打印8266ip地址
    Serial.println("");
    Serial.println("Connection established!");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

void loop()
{
    while (!client.connected())             //若未连接到主机,则客户端进行连接
    {
        if (!client.connect(host, tcpPort))//如果客户端未连接,使用client.connect()函数尝试连接主机并在500毫秒后再次尝试
        {
            Serial.println("connection....");
            delay(500);
        }
    }
    while (client.available())   //如果客户端连接成功,使用while (client.available())循环处理从主机接收到的数据
    {
        char val = client.read();   //将接收到的字符存储在变量val中
        if(val=='1'){              //如果val等于'1',则通过将LED引脚设置为LOW来关闭LED

           digitalWrite(led, LOW);
        }
        if(val=='0')             //如果val等于'0',则通过将LED引脚设置为HIGH来打开LED
        {
            digitalWrite(led, HIGH);
        }
    }
}

上面的代码实现了以下功能:

WiFi连接:通过WiFi.begin(ssid, password)语句连接到指定的WiFi网络。在setup()函数中,代码会一直等待,直到成功连接到WiFi网络为止。连接成功后,通过WiFi.localIP()获取并打印ESP8266的IP地址。

与手机端通信:使用client.connect(host, tcpPort)建立与手机端的TCP连接。在loop()函数中,代码会检测是否已连接到手机端。如果未连接,则通过延迟等待一段时间,并重试连接。一旦成功连接,代码会继续执行。

接收和处理数据:通过client.available()检测是否有数据可用。如果有数据可用,通过client.read()读取数据。在这个例子中,代码会判断接收到的数据是否为1或0,并根据接收到的值点亮或熄灭连接到ESP8266的LED。

综上所述,上述代码实现了通过ESP8266连接到指定的WiFi网络,并与手机端建立TCP连接进行数据交互。通过接收来自手机端的指令,控制LED的亮灭。这个代码可以作为一个简单的远程控制示例,可用于控制远程设备的开关状态。

程序完成后我们将程序上传至esp8266模块:

在这里插入图片描述
程序下载后esp8266会连接wifi,通过串口可以查看wifi连接相关信息:
在这里插入图片描述

手机连接与esp8266连接的同一wifi,

在这里插入图片描述

手机上打开网络调试助手,新建服务器:
在这里插入图片描述
点击新建的服务器进入,会自动监听,显示已连接,表示手机端与esp8266已经连接成功,此时就可以通过手机与esp8266通信了,
在这里插入图片描述

选中最下面的纸飞机可以进行快捷发送,这样就能比较方便的控制led的亮灭了。
在这里插入图片描述

在这里插入图片描述
实验效果:
在这里插入图片描述

注意事项

在使用以上代码实现功能时,请注意以下几点:

  1. 替换ssid和password变量的值为您要连接的WiFi网络的凭据。确保凭据正确,以便ESP8266能够成功连接到WiFi网络。

  2. 替换host变量的值为您要连接的主机的IP地址。确保IP地址正确,以便ESP8266能够成功建立TCP连接。

  3. 确保连接的主机在指定的端口上监听TCP连接。在代码中,端口号为8080,如果您的主机使用了不同的端口,请相应地修改tcpPort常量的值。

  4. 根据您的硬件连接,确保将LED正确连接到ESP8266模块的指定引脚。在代码中,LED连接到引脚4,如果您将LED连接到其他引脚,请相应地修改led常量的值。

  5. 如果您的主机发送的数据是按照不同的格式或协议进行的,请根据您的需求修改loop()函数中处理接收数据的代码。目前的代码只是简单地根据接收到的字符来控制LED的状态。

  6. 如果手机上没有对应的网络调试助手,也可以通过电脑PC端的网络调试助手进行连接,这里推荐一个方便好用的软件NetAssist,支持快捷指令发送,和手机上的实验效果一样。

在使用代码之前,确保您已经安装了适用于ESP8266开发板的Arduino开发环境,并正确配置了开发环境。这包括选择正确的开发板和端口,并安装了ESP8266库。

总结

本文主要介绍了ESP8266连接WiFi并与手机端通信的功能。使用ESP8266WiFi库来连接WiFi网络,并使用WiFiClient库与手机端进行通信。代码中定义了一个LED连接到ESP8266的GPIO4上,然后在setup()函数中初始化串口、LED引脚和WiFi连接。在loop()函数中,首先检测是否已连接到服务端,并在连接成功后开始接收来自手机端的数据。如果收到的数据是1,则点亮LED,如果是0,则熄灭LED。

通过本文,我们学习了如何使用ESP8266模块连接到WiFi网络,并通过与主机建立TCP连接来控制LED。这是一个简单的示例,说明了ESP8266在物联网应用中的潜力。您可以根据自己的需求和创意,进一步扩展该示例,实现更复杂的功能。希望这篇文章对您有所帮助,以上如有错误,欢迎各位留言指正!谢谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/803619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux之 Vim 搜索方式

方式一&#xff1a;快速搜索&#xff08;字符串完全匹配&#xff0c;区分大小写&#xff09; 格式&#xff1a; / 关键词 or &#xff1f; 关键词 /内容 #按回车键搜索 从上到下查找 ?内容 #按回车键搜索 从下到上查找 优点&#xff1a;快速定位到该关键字 回车之后&…

Spark(37):Streaming DataFrame 和 Streaming DataSet 创建

目录 0. 相关文章链接 1. 概述 2. socket source 3. file source 3.1. 读取普通文件夹内的文件 3.2. 读取自动分区的文件夹内的文件 4. kafka source 4.1. 导入依赖 4.2. 以 Streaming 模式创建 Kafka 工作流 4.3. 通过 Batch 模式创建 Kafka 工作流 5. Rate Source…

回归预测 | MATLAB实现PSO-GPR粒子群优化高斯过程回归多输入单输出回归预测

回归预测 | MATLAB实现PSO-GPR粒子群优化高斯过程回归多输入单输出回归预测 目录 回归预测 | MATLAB实现PSO-GPR粒子群优化高斯过程回归多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于PSO-GPR基于粒子群算法优化高斯过程回归的数据回归预…

Jmeter经过处理的变量设置全局变量

之前遇到一个问题&#xff1a;项目的某些接口是需要登录的而且登录不能多用户登录。模拟登录的时候传入请求头的其中一个参数比较复杂&#xff0c;需要登录后的某些参数拼接和加密后设置成全局变量&#xff0c;在请求头中调用这个变量&#xff0c;正常的设置全局变量的方法百度…

Java NIO 详解

Java 从1.4开始引入NIO&#xff08;New IO&#xff09;&#xff0c;是一种基于块&#xff08;Block&#xff09;的IO机制&#xff0c;也称为非阻塞IO。相比于传统的Java IO&#xff08;IO流&#xff09;方式&#xff0c;Java NIO提供了更快速、高效、灵活的IO操作。 Java NIO的…

一文让你彻底搞懂Mybatis之缓存机制

编译软件&#xff1a;IntelliJ IDEA 2019.2.4 x64 操作系统&#xff1a;win10 x64 位 家庭版 Maven版本&#xff1a;apache-maven-3.6.3 Mybatis版本&#xff1a;3.5.6 文章目录 一. 缓存是什么&#xff1f;二. 为什么要使用缓存&#xff1f;三. Mybatis中的缓存分哪几种&#…

自己实现MyBatis 底层机制--抽丝剥茧(上)

&#x1f600;前言 本篇博文是学习过程中的笔记和对于MyBatis底层机制的分析思路&#xff0c;希望能够给您带来帮助&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到…

Base64之间的相互转化

使用org.apache.ommons.codec.binary.Base64实现字符串和Base64之间的相互转化 字符串转化为Base64之间的相互转化一 //转化为Base64字符串 String strOld "Welcome to the new world"; base64EncodeStr Base64.encodeBase64String(strOld.getBytes()); System.o…

黑马点评项目学习笔记(15w字详解,堪称史上最详细,欢迎收藏)

黑马点评项目学习笔记 文章目录 黑马点评项目学习笔记前言项目搭建导入数据库初始化项目启动项目启动前端项目启动后端项目 基于Session实现短信验证码登录短信验证码登录配置登录拦截器数据脱敏 Session集群共享问题基于Redis实现短信验证码登录短信验证登录配置登录拦截器 店…

漏洞分析|Metabase 代码执行漏洞(CVE-2023-38646):H2 JDBC 深入利用

0x01 概述 最近 Metabase 出了一个远程代码执行漏洞&#xff08;CVE-2023-38646&#xff09;&#xff0c;我们通过研究分析发现该漏洞是通过 JDBC 来利用的。在 Metabase 中兼容了多种数据库&#xff0c;本次漏洞中主要通过 H2 JDBC 连接信息触发漏洞。目前公开针对 H2 数据库…

国产内存强势崛起,光威神条有神价,无套路闭眼可入

今年的DIY电脑市场终于摆脱了前两年的阴霾&#xff0c;从CPU到内存都有着充足的货源&#xff0c;而且价格靠谱&#xff0c;特别是国产存储品牌超级厚道&#xff0c;内存、硬盘等配件的价格基本都是大跳水&#xff0c;相比于去年&#xff0c;同样的价格能够买到容量和性能翻倍的…

ERROR 1064 - You have an error in your SQL syntax;

ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧&#xff0c;以前开始写SQL&#xff0c;特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…

SAP财务系统中的“复式记账法”

1. 前言 “复式记账法”是财务的基础知识&#xff0c;对于财务出身的小伙伴是so easy&#xff0c;但对于技术出身的同学&#xff0c;通常会被“借贷”关系弄的晕头转向。 本文会简明扼要的总结“复式记账法”的基本原理&#xff0c;并以采购和销售流程为例来介绍如何进行复式…

Java - 注解开发

注解开发定义bean Component的衍生注解 Service&#xff1a; 服务层的注解 Repository&#xff1a; 数据层的注解 Controller&#xff1a; 控制层的注解 纯注解开发 bean管理 bean作用范围 在类上面添加Scope(“singleton”) // prototype: 非单例 bean生命周期 PostCon…

PyTorch BatchNorm2d详解

通常和卷积层&#xff0c;激活函数一起使用

基于51单片机和proteus的加热洗手器系统设计

此系统是基于51单片机和proteus的仿真设计&#xff0c;功能如下&#xff1a; 1. 检测到人手后开启出水及加热。 2. LED指示加热出水及系统运行状态。 功能框图如下&#xff1a; Proteus仿真界面如下&#xff1a; 下面就各个模块逐一介绍&#xff0c; 模拟人手检测模块 通过…

redis 第三章

目录 1.主从复制 2.哨兵 3.集群 4.总结 1.主从复制 结果&#xff1a; 2.哨兵 3.集群 4.总结 通过集群&#xff0c;redis 解决了写操作无法负载均衡&#xff0c;以及存储能力受到单机限制的问题&#xff0c;实现了较为完善的高可用方案。

【设计模式】详解单例设计模式(包含并发、JVM)

文章目录 1、背景2、单例模式3、代码实现1、第一种实现&#xff08;饿汉式&#xff09;为什么属性都是static的&#xff1f;2、第二种实现&#xff08;懒汉式&#xff0c;线程不安全&#xff09;3、第三种实现&#xff08;懒汉式&#xff0c;线程安全&#xff09;4、第四种实现…

Android kotlin系列讲解之最佳的UI体验 - Material Design 实战

目录 一、什么是Material Design二、Toolbar三、滑动菜单1、DrawerLayout2、NavigationView 四、悬浮按钮和可交互提示1、FloatingActionButton2、Snackbar3、CoordinatorLayout 五、卡片式布局1、MaterialCardView2、AppBarLayout 六、可折叠式标题栏1、CollapsingToolbarLayo…

Python MySQL

pymysql 除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库。 在Python中&#xff0c;使用第三方库&#xff1a;pymysql 来完成对MySQL数据库的操作。 安装&#xff1a; pip install pymysql 或在pycharm中搜索pymysql插件安装 创建到MySQ…