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()`: 关闭连接并释放内存
相关推荐
代码游侠7 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
CODECOLLECT11 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen11 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠14 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_14 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技16 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计16 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
小龙报18 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业18 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能18 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微