0


【物联网初探】- 06 - ESP32 利用 wifi 进行 TCP 通信(Arduino IDE)

文章目录

1. 硬件、接线、环境配置

  • 【物联网初探】- 01 - ESP32 开发环境搭建 (Arduino IDE)
  • 【物联网初探】- 02 - ESP32 利用 SPI 联通 TFT 彩屏 (Arduino IDE)
  • 【物联网初探】- 03 - ESP32 结合 TFT_eSPI 库标定 TFT 触摸屏 (Arduino IDE)
  • 【物联网初探】- 04 - ESP32 结合 LVGL 库开发环境搭建 (Arduino IDE)
  • 【物联网初探】- 05 - ESP32 上 LVGL 库的多个例程测试 (Arduino IDE)

2. ESP32 下的 wifi 基本功能 (arduino)

  • 头文件包含 #include <WiFi.h> ,arduino 官网文档 WiFi library。
  • 很好的参考博客使用Arduino开发ESP32(03):WiFi基本功能使用

2.1 Wifi 模式切换

  • ESP32可设置wifi工作的三种模式,分别为 AP 自身热点模式、STA 连接外部wifi模式、AP+STA 混合模式。
  • 可通过 WiFi.mode(WIFI_MODE_XX); 来设置,其中 WIFI_MODE_XX 参数如下:typedef enum { WIFI_MODE_NULL = 0, /**< null mode */ WIFI_MODE_STA, /**< WiFi station mode */ WIFI_MODE_AP, /**< WiFi soft-AP mode */ WIFI_MODE_APSTA, /**< WiFi station + soft-AP mode */ WIFI_MODE_MAX} wifi_mode_t;

2.2 AP模式 - 开启 wifi 热点

  • 极简代码,只需调用该函数,即可开启一个名为ESP32的热点,此时模块自身IP默认为192.168.4.1WiFi.softAP("ESP32");
  • 常用代码,定义好wifi的名字、密码、自身IP、网关、子网掩码、并传入AP启动函数:#include<WiFi.h>constchar*ssid ="ESP32_wifi";constchar*password ="12345678";IPAddress local_IP(192,168,4,2);IPAddress gateway(192,168,4,9);IPAddress subnet(255,255,255,0);voidsetup(){ Serial.begin(9600);// 启动串口通讯 WiFi.mode(WIFI_AP);//设置为接入点模式 WiFi.softAPConfig(local_IP, gateway, subnet);//配置接入点的IP,网关IP,子网掩码 Serial.printf("设置接入点中 ... "); WiFi.softAP(AP_ssid, password,3,1);//启动校验式网络(需要输入账号密码的网络),通道为3,wifi隐藏,最大连接数=4 flag = WiFi.softAP(AP_ssid, password);//监控状态变量result if(flag){ Serial.println("开启成功");}else{ Serial.println("开启失败");}}voidloop(){}

2.3 STA模式 - 连接已有 wifi

  • 极简代码,只需指定 wifi 的名字和密码即可连接。WiFi.begin(ssid, password);
  • 常用代码,#include<WiFi.h>constchar*ssid ="********";//网络名称constchar*password ="********";//网络密码voidsetup(){ Serial.begin(9600); Serial.println(); WiFi.begin(ssid, password);//连接网络while(WiFi.status()!= WL_CONNECTED)//等待网络连接成功{delay(500); Serial.print(".");} Serial.println("WiFi connected, IP address: "); Serial.println(WiFi.localIP());//打印模块IP}voidloop(){}

3. ESP32 下 TCP server/client 通信

3.1 TCP / UDP 的极简释义

  • TCPTransmission Control Protocol,传输控制协议)是面向连接的协议,在收发数据前,必须和对方建立可靠的连接。
  • UDPUser Data Protocol,用户数据报协议)是一个非连接的协议,传输数据之前源端和终端不建立连。
  • 简单解释,TCP必须客户端和服务端连接上才能收发数据,UDP则是数据都扔在网上,谁用谁收,谁有谁发。

3.2 ESP32 TCP 通信小例子

3.2.1 准备工具
  • 网络调试助手,linux 下我使用了 NetAssistant - github ,任意能够创建 TCP 客户端的小工具都可以,利用 python 也可以,下面我以 NetAssistant 为例。
3.2.2 通信流程
  • 当服务端和客户端在同一网络下,ESP32作为客户端,其他主机作为服务端,基本的代码思路如下:- 第一步: 以家庭 wifi 为例,先确定服务端主机的 IP 和端口号,这里我在 ubuntu 主机上利用 NetAssistant 建立一个 TCP 服务器,IP 为本机 IP,端口号随意设置为 56050,点击连接网络,就建立好了服务端。在这里插入图片描述- 第二步: ESP32使用STA模式连接家庭wifi,并建立客户端,与服务端建立连接,并在建立的TCP连接上互相通信。#include<WiFi.h>constchar*ssid ="xxx";//wifi名constchar*password ="xxx";//wifi密码const IPAddress serverIP(192,168,31,133);//欲访问的服务端IP地址uint16_t serverPort =56050;//服务端口号WiFiClient client;//声明一个ESP32客户端对象,用于与服务器进行连接voidsetup(){ Serial.begin(115200); Serial.println(); WiFi.mode(WIFI_STA); WiFi.setSleep(false);//关闭STA模式下wifi休眠,提高响应速度 WiFi.begin(ssid, password);while(WiFi.status()!= WL_CONNECTED){delay(500); Serial.print(".");} Serial.println("Connected"); Serial.print("IP Address:"); Serial.println(WiFi.localIP());}voidloop(){ Serial.println("尝试访问服务器");if(client.connect(serverIP, serverPort))//尝试访问目标地址{ Serial.println("访问成功"); client.print("Hello world!");//向服务器发送数据while(client.connected()|| client.available())//如果已连接或有收到的未读取的数据{if(client.available())//如果有数据可读取{ String line = client.readStringUntil('\n');//读取数据到换行符 Serial.print("读取到数据:"); Serial.println(line); client.write(line.c_str());//将收到的数据回发}} Serial.println("关闭当前连接"); client.stop();//关闭客户端}else{ Serial.println("访问失败"); client.stop();//关闭客户端}delay(5000);}- 第三步: 连接测试,保持 NetAssistant 上的服务端运行,ESP32 连接在电脑上,打开 Arduino 的串口监视器,设置好波特率,烧录程序至ESP32,成功后即会显示如下信息(wifi连接正常),此时 NetAssistant 上的窗口也会收到ESP32发送的“Hello world!”字符串,到这里测试基本结束。
3.2.3 简单测试
  • 可以在 NetAssistant 上发送任意字符至ESP32客户端,在 Arduino 的串口监视器中即可接收到,例如我在NetAssistant 上发送了 “esp32 TCP test !!!”,如下图所示。反向传输的话需要自己写个 arduino 上的串口数据接收函数,本例程中没有写。 在这里插入图片描述
标签: 物联网 esp32 arduino

本文转载自: https://blog.csdn.net/sinat_25923849/article/details/123682679
版权归原作者 银时大魔王 所有, 如有侵权,请联系我们删除。

“【物联网初探】- 06 - ESP32 利用 wifi 进行 TCP 通信(Arduino IDE)”的评论:

还没有评论