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()`: 关闭连接并释放内存
相关推荐
美好的事情总会发生1 小时前
高速PCB设计中圆弧布线是否必要
嵌入式硬件·硬件工程·智能硬件
君鼎4 小时前
stm32——UART和USART
stm32·单片机
htt7894 小时前
[mcu]系统频率
单片机·嵌入式硬件
赵谨言4 小时前
基于单片机的FFT的频谱分析仪设计
经验分享·单片机·毕业设计
计蒙不吃鱼5 小时前
星闪开发之Server-Client 指令交互控制OLED灯案例
嵌入式硬件·物联网·iot·oled·星闪·星闪开发
似是燕归来6 小时前
STM32 HAL库函数学习 CRC篇
stm32·嵌入式硬件·学习
LS_learner7 小时前
树莓派上遇到插入耳机后显示“无输入设备”问题
嵌入式硬件
电鱼智能的电小鱼7 小时前
无人机巡检智能边缘计算终端技术方案‌‌——基于EFISH-SCB-RK3588工控机/SAIL-RK3588核心板的国产化替代方案‌
网络·人工智能·嵌入式硬件·算法·机器人·无人机·边缘计算
m0_748250747 小时前
STM32上部署AI的两个实用软件——Nanoedge AI Studio和STM32Cube AI
人工智能·stm32·嵌入式硬件
SY师弟9 小时前
51单片机基础部分——数码管显示
单片机·嵌入式硬件·51单片机