ESP32 入门学习——WIFI连接

ESP32简介:

特点:时钟频率高,自带WIFI和蓝牙,最牛的是兼容Arduino IDE开发(图形编程会毁掉一个人但Arduino IDE不会),可以省去很多编写函数的步骤,从而专注于功能的实现。

1:实现WIFI(STA)连接

WIFI有两种模式,1.STA模式,让ESP32连接附近WIFI,可以上网访问数据。

#include <WiFi.h>
#include <Arduino.h>
//基础的WIFI函数学习 2024.3.10
//常量 WIFI名以及密码
const char* ssd="lyq";
const char* pasd="1234567890";
byte LED=2;

void setup() {
  // put your setup code here, to run once:
  pinMode(LED,OUTPUT);
  digitalWrite(LED,LOW);
  Serial.begin(115200);
  Serial.print("开始连接WIFI:");
  Serial.print("SSD:");
  Serial.print(ssd);
  
  Serial.println();
  WiFi.begin(ssd,pasd);

  while(WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.print("connected success!\n");

  Serial.print("IP:\n");
  Serial.print(WiFi.localIP());
  
  digitalWrite(LED,HIGH);
}

可以看到导入WIFI库之后,配置WIFI的代码十分简单,一个WIFI.begin就连接上了WIFI,其他都是反馈功能的代码,在连入WIFI后会获得一个分配的地址,通过LocalIP打印出来,其他设备需要访问ESP32的时候就可以连接这个IP。
在这里插入图片描述

2:实现WIFI(AP)连接

2.AP模式,ESP32会自建一个WIFI热点,其他设备可以加入这个热点进行数据交换,类似局域网,不可联网。

//由于为AP模式 SSD就是自己的名称和密码 用于其他设备连接 
const char* SSD="ESP32AP"; 
const char* PSD="123456..";

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);

  WiFi.softAP(SSD,PSD);

  Serial.println("热点创建成功!");
  Serial.print("SSD:");
  Serial.println(SSD);

  Serial.println("PASSWD:");
  Serial.println(PSD);

  Serial.println("Access point:");
  Serial.print(WiFi.softAPIP());
  //打印热点IP
}

这里的主要函数就是softAP用于创建热点,烧入后显示可用热点

在这里插入图片描述

3:扫描周围可用WIFI

  Serial.begin(115200);
  num=WiFi.scanNetworks();
  Serial.print("周围可用WIFI个数为:");
  Serial.print(num);
  Serial.println();

  Serial.print("WIFI信息如下:");
  for(int a=0;a<=num;a++)
  {
  Serial.print(WiFi.SSID(a));
  Serial.println();
  }

scan函数可以扫描出周围WIFI,并通过未知方式生产一个列表,SSID函数储存了列表信息,可以循环打出,由于周围信号差就扫描出两个WIFI。
在这里插入图片描述

4:利用串口函数连接指定WIFI

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  num=WiFi.scanNetworks();
  Serial.print("周围可用WIFI个数为:");
  Serial.print(num);
  Serial.println();

  Serial.print("WIFI信息如下:");
  for(int a=0;a<=num;a++)
  {
  Serial.print(WiFi.SSID(a));
  Serial.println();
  }
  Serial.println("请输入WIFI和密码:");
}

void loop() 
{
  // put your main code here, to run repeatedly:
  while(Serial.available()>0){
    String SD=Serial.readStringUntil(','); 
    ssd=SD.c_str();
    //这个函数是真的nb 
    //读取后缓存区的数据直接消失,可以避免去拆分字符串
    delay(100);

    String PSD=Serial.readStringUntil('\0');
    pasd=PSD.c_str();
    delay(1000);
    Serial.println("WIFI:");
    Serial.println(SD);
    Serial.println("PSD:");
    Serial.println(PSD);
    WiFi.begin(ssd,pasd);

  while(WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.print("connected success!\n");

  Serial.print("IP:\n");
  Serial.print(WiFi.localIP());
  }
}

通过串口输入需要连接的WIFI信息,读取后自动分割,但是不能直接作为参数使用begin连接,begin的参数类型为char *,但是接受的为String 这时就利用c_str()函数 将读取的String格式数据转为 const char *类型,再进行begin连接
在这里插入图片描述
至此连接WIFI的工作已完成

要使用ESP32传输图像,您需要使用ESP32WiFi模块和一些图像传输协议。以下是一个基本的图像传输示例,您可以根据自己的需要进行修改和扩展: ``` #include <WiFi.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; WiFiServer server(80); void setup() { Serial.begin(9600); delay(10); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while (!client.available()) { delay(1); } // Read the first line of the request String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); // Send a standard HTTP response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: image/jpeg"); client.println("Connection: close"); client.println(); // Load the image file and send it to the client File imageFile = SPIFFS.open("/image.jpg", "r"); if (imageFile) { while (imageFile.available()) { client.write(imageFile.read()); } imageFile.close(); } // Wait until the client has disconnected while (client.connected()) { delay(1); } Serial.println("Client disconnected"); } ``` 在这个示例中,ESP32作为服务器启动,并等待客户端连接。当客户端连接时,它会发送一个HTTP请求,请求服务器发送一张图像。服务器将打开图像文件并将其传输到客户端。请注意,此示例仅发送一张名为“image.jpg”的图像文件。如果您有多个图像文件,请根据需要进行修改。 您还需要将您的图像文件上传到ESP32的文件系统中,以便服务器可以读取它们。ESP32可以使用SPIFFS(SPI Flash File System)进行文件系统操作。您可以使用ESP32的SPIFFS API将图像文件上传到ESP32的文件系统中。 注意:在将图像传输到客户端之前,您可能需要对图像进行压缩和编码。常用的图像压缩和编码格式包括JPEG和PNG。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值