esp32连接WiFi以及gpio的使用

参考网站 :Hello STEM 创客平台 - Hello STEM 创客平台

目前esp32有多种编程软件例如arduino,mixly以及thonny。

使用串口连接开发板

mixly编程比较简单,不用写代码

选择esp32

随便放一点组件

上传代码即可烧录。

arduino 编程比较直观,主程序分为setup以及loop部分。setup即是启动时初始化串口以及初始化外设使用的函数,loop相当于while(1)启动后一直运行的部分。

cpp 复制代码
void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

编程语言和c++比较相似,可以使用<>包含头文件。

使用开发板管理器下载开发板配置文件

初始化串口和gpio:

cpp 复制代码
 Serial.begin(9600);


  // 通过板载 LED 反馈 WiFi 连接状态
  pinMode(LED, OUTPUT);

实现pwm效果

cpp 复制代码
#define RESOLUTION    10       // 分辨率
#define LED_pin       2

void setup()
{
  pinMode(LED_pin, OUTPUT); // set pin as output
}

// void loop()
// {
//   for (int i = 0;i < 256;i++)
//   {
//     analogWrite (LED_pin ,i);//analogwrite的意思是电压输出
//     delay (10);//实现渐亮
//   }
//   for (int i = 255;i >= 0;i--)
//   {
//     analogWrite (LED_pin ,i);
//     delay (10);//实现渐暗
//   }
// }


void loop()
{
  // pwm实现呼吸灯
  for (int i = 0; i < RESOLUTION; i++) // 10档亮度
  {
    for (int j = 0; j < 20; j++)
    {
      digitalWrite(LED_pin, HIGH);
      delay(i);
      digitalWrite(LED_pin, LOW);
      delay(10 - i);
    } // 渐亮
  }
  for (int i = 0; i < RESOLUTION; i++) // 10档亮度
  {
    for (int j = 20; j >= 0; j--)
    {
      digitalWrite(LED_pin, HIGH);
      delay(10 - i);
      digitalWrite(LED_pin, LOW);
      delay(i);
    } // 渐暗
  }
}

通过函数连接WiFi

cpp 复制代码
void connect_to_wifi()
{
   // 连接 WiFi
  WiFi.begin(ssid, password);

  Serial.print("正在连接 Wi-Fi");

  // 检测是否连接成功
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("连接成功");
  Serial.print("IP 地址:");
  Serial.println(WiFi.localIP());
}

通过板载led以及串口反馈连接状态

cpp 复制代码
void loop()
{
  if (WiFi.status() == WL_CONNECTED)
  {
    digitalWrite(LED, HIGH);
    delay(1000);
    digitalWrite(LED, LOW);
    delay(1000);
  }
  else 
  {
    Serial.println("Wi-Fi 连接失败,正在尝试重新连接...");
    connect_to_wifi();
  }
}

即可保持WiFi的连接

获取网络时间

pool.ntp.org是用于获取网络时间的网站。

cpp 复制代码
const char *ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 8 * 3600;
const int daylightOffset_sec = 0;

连接WiFi后使用

cpp 复制代码
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);//获取网络时间

编写printTime函数

cpp 复制代码
void printTime()
{
    struct tm timeinfo;
    if (!getLocalTime(&timeinfo))
    {
        Serial.println("Failed to obtain time");
        return;
    }
    Serial.println(&timeinfo, "%F %T %A"); // 格式化输出
}

完整代码:

cpp 复制代码
#include <WiFi.h>

#define LED 2

// 定义 WiFi 名与密码
const char *ssid = "Mi 11 Ultra";
const char *password = "TYXmi11ultra";

const char *ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 8 * 3600;
const int daylightOffset_sec = 0;

void connect_to_wifi()
{
   // 连接 WiFi
  WiFi.begin(ssid, password);

  Serial.print("正在连接 Wi-Fi");

  // 检测是否连接成功
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("连接成功");
  Serial.print("IP 地址:");
  Serial.println(WiFi.localIP());
}

void printTime()
{
    struct tm timeinfo;
    if (!getLocalTime(&timeinfo))
    {
        Serial.println("Failed to obtain time");
        return;
    }
    Serial.println(&timeinfo, "%F %T %A"); // 格式化输出
}


void setup()
{
  Serial.begin(9600);
  // 通过板载 LED 反馈 WiFi 连接状态
  pinMode(LED, OUTPUT);
  connect_to_wifi();
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);//获取网络时间
  printTime();
}

void loop()
{
  if (WiFi.status() == WL_CONNECTED)
  {
    digitalWrite(LED, HIGH);
    delay(1000);
    printTime();//打印当前时间
    digitalWrite(LED, LOW);
    delay(1000);
    printTime();
  }
  else 
  {
    Serial.println("Wi-Fi 连接失败,正在尝试重新连接...");
    connect_to_wifi();
  }
}

http协议函数:

1.`HTTPClient http;`: 创建HTTPClient对象。

2.`http.begin(url)`:指定要发送请求的URL。

3.`http.addHeader(name,value)`:添加HTTP 头部。

4.`http.setAuthorization(username,password)`:设置HTTP基本身份验证的用户名和密码。

5.`http.setTimeout(timeout):设置请求超时时间(以毫秒为单位)。

6.`http.GET()`:发送GET请求,并返回HTTP 状态码。

7.`http.POST(payload)`:发送POST 请求,并将payload作为请求正文。

8.`http.responseStatusCode()`:获取响应的状态码。

9.`http.responseBody()`:获取响应的正文。

10.`http.getString()`:获取响应正文作为字符串。

11.`http.getStream()`:获取响应正文作为流对象。

  1. `http.end()`: 关闭连接并释放内存
相关推荐
恒锐丰科技林技术员2 小时前
EG2181D 半桥栅极驱动芯片详解:高压 MOS/IGBT 驱动实用器件
经验分享·嵌入式硬件·硬件工程
国科安芯3 小时前
面向卫星测控应答机的抗辐射MCU信号采集与定时控制研究
单片机·嵌入式硬件·mcu·架构·卫星·商业航天·抗辐射
CC城子3 小时前
EtherNet/IP I/O 丢包排查(linux系统)
linux·单片机·tcp/ip·ethernetip
新晨单片机设计3 小时前
S010A-基于STM32单片机水温控制系统(数码管显示)【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件
事界见闻4 小时前
高性能电机控制MCU选型对比:精度、功耗与实时性如何兼得?
单片机·嵌入式硬件
Brilliantwxx4 小时前
【STM32】 初认识USART串口
linux·stm32·单片机·嵌入式硬件·架构
分享资料5 小时前
用小电容消除高频信号的原因
嵌入式硬件·硬件工程
沐欣工作室_lvyiyi5 小时前
基于STM32的人脸识别门禁系统的设计与实现(论文+源码)
stm32·单片机·嵌入式硬件
zcmodeltech9 小时前
智慧矿山沙盘模型多场景控制系统设计——基于STM32与Modbus RTU的智能开采、无人矿卡、数字孪生全场景联动方案
数据库·stm32·单片机·嵌入式硬件·物联网
youcans_9 小时前
【嵌入式软件AI编程】03. STM32 VS Code 开发环境与工具链
stm32·单片机·ai编程·嵌入式软件·claude code