【史上最全面esp32教程】网络篇和tcp/ip的使用

简介: 【史上最全面esp32教程】网络篇和tcp/ip的使用

前言

ESP32是一款集成Wi-Fi和蓝牙的开发板,它可以轻松地和其他设备进行网络和TCP/IP通信


提示:以下是本篇文章正文内容,下面案例可供参考

esp32网络学习路线

ESP32网络学习:


了解网络协议:

在了解ESP32的网络功能之前,需要了解一些基本的网络协议,例如TCP,IP,DNS和HTTP等。这可以帮助您更深入地了解如何使用ESP32与其他设备进行通信。


配置Wi-Fi:

可以通过在代码中编写Wi-Fi网络的SSID和密码来配置ESP32连接到Wi-Fi网络。您需要通过WiFi.begin()函数初始化Wi-Fi连接。该函数返回一个值,表示设备是否成功连接到网络。


获取IP地址:

一旦ESP32连接到Wi-Fi,您可以使用WiFi.localIP()函数获取ESP32的IP地址。此IP地址将用于与其他设备进行通信。


使用ping测试连接:

您可以使用ping命令测试您的ESP32是否可以与其他设备进行连接。只需要键入ping后跟ESP32的IP地址即可。


进行HTTP请求:

您可以使用HTTP请求库(例如ArduinoHttpClient)在ESP32和应用程序之间进行通信。使用HTTP的一个优点是它是面向Web的,因此它非常适用于与Web API进行通信。


使用WebSocket:

WebSocket可以让ESP32与其他设备进行双向通信,这对于实时应用程序非常有用。您需要使用一个WebSocket客户端库(例如ArduinoWebSocket)。

ESP32连接网络

配置Wi-Fi

使用ESP32连接到Wi-Fi网络有多种方式。可以通过在代码中编写Wi-Fi网络的SSID和密码、通过SoftAP模式创建一个热点以及使用WiFiManager库等方式。以下是通过代码配置ESP32连接到Wi-Fi网络的步骤:

  1. 包含Wi-Fi库。
#include <WiFi.h>
  1. 指定要连接的Wi-Fi网络的SSID和密码。
const char* ssid = "SSID";
const char* 密码 = "...";
  1. 在setup()函数中初始化Wi-Fi连接。
WiFi.begin(ssid, password);//开始WiFi连接
  // 等待Wi-Fi连接
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

在第二步中,我们可以定义变量去存储wifi名称和密码,也可以在WiFi.begin的参数里直接添加我们需要的名称和密码。

WiFi.begin(ssid, password);//开始wifi连接

WiFi.status()获取wifi状态

获取IP地址:

String ip = WiFi.localIP();
Serial.print("IP address: ");
Serial.println(ip);

我们可以使用WiFi.localIP();函数获取ip,返回值为String

我们可以通过串口打印出来。

ESP32 TCP/IP通信

包含头文件:

#include <WiFiClient.h>
#include <WiFiServer.h>

创建服务端并指定端口:

使用WiFiServer类开启tcp服务端

WiFiServer server(80); //使用TCP端口80创建一个WiFi服务器
server.begin(); //开启服务器

接收响应,进行判断是否为合法的客户端:

WiFiClient client = server.available(); //检查是否有新的客户机连接
if (client) {
    //如果为真,则代表有客户端了
}

使用server.available();返回一个WiFiClient,他是其他的客户端 的类。

接收客户端的信息:

char c = client.read();

我们也可以使用下面的读取字符串:

String rea = client.readStringUntil('\n');

client.readStringUntil(‘\n’);直到读到’\n’时才停止读取

给客户端发信息:

我们可以直接使用print或println函数进行发送信息:

client.println(变量);
client.print("Message");

停止与客户端的通信:

client.stop();

示例程序

发送LedOn时d0亮,LedOff则相反。

发送RelaysOn时继电器吸气磁铁,RelaysOff则相反。

发送BeepOn时,响一次。

发送quit时退出


代码分析:


先连接wifi

定义WiFiServer

打开客户端

loop函数中看是否有客户端连接

如果有客户端发信息,则使用readStringUntil,直到\n时才停止

判断字符串,执行对应操作

如果不知道ip,可以使用localIP()获取,并打印到串口.

#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiServer.h>
#define Led 2
#define Relays 5
#define beep 7
WiFiServer server(8080);
void setup() {
  // 设置串口通信
  Serial.begin(115200);
  pinMode(Led,OUTPUT);
  pinMode(Relays,OUTPUT);
  pinMode(beep,OUTPUT);
  // 连接到Wi-Fi
  WiFi.begin("wifi", "12345678");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("连接到Wi-Fi...");
  }
  Serial.println("连接到Wi-Fi成功!");
  server.begin();
}
void loop() {
  WiFiClient client = server.available();
  if(client)
  {
    String rea = client.readStringUntil('\n');
    if(rea == "LedOn")
    {
        digitalWrite(Led,HIGH);
    }
    else if(rea == "LedOff")
    {
      digitalWrite(Led,LOW);
    }
    else if(rea == "RelaysOn")
    {
      digitalWrite(Relays,HIGH);
    }
    else if(rea == "RelaysOff")
    {
      digitalWrite(Relays,LOW);
    }
    else if(rea == "Beep")
    {
      for(char i = 0;i<10;i++)
        digitalWrite(beep,!digitalRead(beep));//读取现在的状态,并切换状态,响
    }
    else if(rea == "quit")
    {
      client.stop();
    }
  }
}
目录
打赏
0
0
0
0
61
分享
相关文章
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
487 2
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
37 12
为何长效代理静态IP是网络管理的关键要素
在信息化时代,静态长效IP代理对网络管理至关重要。它能提升网络服务质量,确保远程办公、视频会议等应用的稳定性和连续性;减少延迟和网络拥堵,加快数据传输;提高网络安全,便于设置访问权限,防止未授权访问。91HTTP高质量代理IP服务商助力高效信息获取。
52 23
|
2月前
|
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
92 20
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
78 11
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
uniapp-网络数据请求全教程
这篇文档介绍了如何在uni-app项目中使用第三方包发起网络请求
127 3
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。 如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢? 我们就从路由这个话题聊起吧。
106 4
不为人知的网络编程(十九):能Ping通,TCP就一定能连接和通信吗?
【网络原理】——带你认识IP~(长文~实在不知道取啥标题了)
IP协议详解,IP协议管理地址(NAT机制),IP地址分类、组成、特殊IP地址,MAC地址,数据帧格式,DNS域名解析系统
HTTP代理IP纯净度 提升用户网络体验的核心竞争力
随着互联网发展,使用HTTP动态代理IP的需求日益增加。高纯净度的代理IP在隐私与安全、网络体验和业务运营方面至关重要。它能保护用户信息、提高数据安全性、确保访问速度和连接稳定,并提升业务效率与信誉度。
76 2

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等