ESP32-CAM
1.可插入SD卡;
开启STA模式 连接Wife
#include <WiFi.h> // 引入库
void connectWiFi() {
WiFi.mode(WIFI_STA); //开启网络
WiFi.begin(ssid, password);
Serial.print(" 正在连接");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.print(" WIFI连接成功");
}
wifi连接断开后重连
// WIFE 重连 双核并行
xTaskCreatePinnedToCore(taskReconnectWiFi, "loopReconnectWiFi", 4096, NULL, 1, NULL, 1);
// WIFI 重新尝试连接
void taskReconnectWiFi(void *pvParameters) {
while (1) {
// 任务1的代码
vTaskDelay(5000 / portTICK_PERIOD_MS); // 延时5秒执行
if (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, password);
Serial.println("try re-conn....");
is_have_wife = 0;
} else {
if (is_have_wife == 0) {
Serial.println("WIFI重连成功");
sendDeviceIP(); // 上报设备,ip
is_have_wife = 1;
}
}
}
}
Webserve 实现 本地服务
void setup() {
// webserve 双核并行
xTaskCreatePinnedToCore(taskWebserver, "loopTaskWebserver", 10000, NULL, 1, NULL, 0);
// webserve 接口
server.on("/deviceInfo", getDeviceInfo); // 设备信息
server.onNotFound([]() {
server.send(500, "text/html;charset=utf-8", "没有找到");
});
server.begin(); // server 开启
Serial.println("HTTP server 开启");
}
// loop webserve
void taskWebserver(void *pvParameters) {
while (1) {
server.handleClient(); // 处理Web客户端的请
}
}
SD_MMC 文件存储,读取,下载
初始化SD卡
void setup() {
// 初始 SD 卡
if (!SD_MMC.begin()) {
Serial.println("没有找到 存储卡");
return;
}
// 判断 sd卡 内 data_set 目录是否存在
if (!SD_MMC.exists("/data_set")) {
Serial.println("没有文件夹进行创建");
if (!SD_MMC.mkdir("/data_set")) {
Serial.println("创建失败");
}
}
}
下载
// 下载文件
void sendFile() {
// 跨域
server.sendHeader("Access-Control-Allow-Origin", "*"); // 允许任何域
server.sendHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); // 允许的方法
server.sendHeader("Access-Control-Allow-Headers", "Content-Type"); // 允许的头部
// 传入参数
String fileName;
if (server.arg("name") != "") {
fileName = server.arg("name");
} else {
server.send(500, "text/plain", "参数有误");
return;
}
File file = SD_MMC.open("/data_set/" + fileName); // 替换为你的文件路径
uint8_t buffer[1024];
if (file) {
server.sendHeader("Content-Disposition", "attachment; filename=" + fileName);
server.setContentLength(file.size());
server.send(200, "text/plain", ""); // 设置正确的MIME类型
WiFiClient client = server.client();
if (client.connected()) {
while (file.available()) {
if (!client.connected()) break;
size_t len = file.read(buffer, sizeof(buffer));
// size_t len = client.write(file.read(buffer, sizeof(buffer))); // BUFFER_SIZE 根据实际需求设置缓冲区大小
client.write(buffer, len);
if (len == 0) {
break;
}
}
}
file.close();
} else {
server.send(404, "text/plain", "File not found");
}
server.client().stop(); // 停止当前客户端的连接
}
推荐学习文档
1 arduino学习 https://www.w3cschool.cn/arduino/arduino_program_structure.html