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()`: 关闭连接并释放内存
相关推荐
wenchm7 小时前
细说STM32H743XIH6单片机通过FMC访问片外NAND Flash的方法及实例
stm32·单片机·嵌入式硬件
@good_good_study8 小时前
STM32 定时器PWM配置函数及实验
stm32·单片机
三佛科技-134163842129 小时前
KP32511SGA固定12V输出小家电电源芯片 典型应用电路
单片机·嵌入式硬件
xingzhemengyou19 小时前
STM32启动流程
stm32·单片机·嵌入式硬件
youcans_10 小时前
【动手学STM32G4】(4)STM32G431之ADC与DAC
stm32·单片机·嵌入式硬件·数据采集·串口通信
boneStudent13 小时前
Day32:SPI 配置与使用
stm32·单片机·嵌入式硬件
逆小舟13 小时前
【RTOS】处理中断
单片机·嵌入式硬件
ACP广源盛1392462567314 小时前
GSV1015@ACP#1015/2015产品规格详解及产品应用分享
单片机·嵌入式硬件·音视频
三品吉他手会点灯14 小时前
STM32F103学习笔记-19-SysTick-系统定时器(第1节)-功能框图讲解和优先级配置
笔记·stm32·单片机·嵌入式硬件·学习
风哥在风中15 小时前
与防静电腕带完全不同性质:电烙铁必须硬接地,而且良好接地
单片机·嵌入式硬件·智能硬件·esd防护·iot硬件