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()`: 关闭连接并释放内存
相关推荐
画江湖Test32 分钟前
分享一个您在汽车软件安全性测试中发现严重漏洞的案例,以及如何处理
嵌入式硬件·安全·面试·汽车·软件测试面试
黄交大彭于晏34 分钟前
stm32 hal库 keil5工程编译烧录配置
stm32·单片机·嵌入式硬件
陌夏微秋1 小时前
元器件选型与参数13 电源的分类-线性电源参数 RT9013 AMS1117 PCB布局布线
arm开发·单片机·嵌入式硬件·智能手机·51单片机·硬件工程
DFT_bug_king2 小时前
sram测试注意讨论
嵌入式硬件·fpga开发
码猩2 小时前
C#高速串口通讯方案winform实例
开发语言·单片机·c#
北京迅为2 小时前
【北京迅为】iTOP-4412全能版使用手册-第三十二章 网络通信-TCP套字节
linux·嵌入式硬件·4412开发板
ADI_OP3 小时前
用System Workbench for STM32做MCU控制ADI DSP的开发,如何导入工程
stm32·单片机·嵌入式硬件·dsp开发·adi dsp中文资料·adi音频dsp·adi dsp开发教程
程序员buddha3 小时前
普中51单片机——LED流水灯模块
单片机·嵌入式硬件·51单片机
不能只会打代码4 小时前
51单片机从入门到精通:理论与实践指南综合应用——实战篇(九)
单片机·嵌入式硬件·51单片机
程序员-Queen6 小时前
DeviceIoControl超时后如何处理
stm32·单片机·嵌入式硬件