参考网站 :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()`:获取响应正文作为流对象。
- `http.end()`: 关闭连接并释放内存