当前位置: 首页 > web >正文

ESP32-CAM开发板学习(一)

一、Arduino IDE搭建ESP32开发环境

1、安装 Arduino IDE 软件,在官网下载压缩包解压直接使用

  • 官网链接: Arduino IDE

2、修改软件语言,单击左上角 File → Preferences…,把Language改成中文(简体),保存

3、安装esp32开发板库,点击菜单栏“文件”→“首选项”,点击“其他开发板管理器地址”右边的图标,把地址填写进去

https://dl.espressif.com/dl/package_esp32_index.json
https://git.oschina.net/dfrobot/FireBeetle-ESP32/raw/master/package_esp32_index.json

在这里插入图片描述
4、在线安装esp32库,下载非常慢,如失败请重新尝试
在这里插入图片描述

5、开发板连接电脑,Arduino IDE按如下连接开发板
在这里插入图片描述


二、常用方法笔记

在这里插入图片描述

三、代码示例

1、WiFi连接示例

#include <WiFi.h>// 替换为自己的网络名称和密码
const char* ssid = "WiFi名称";
const char* password = "WiFi密码";void setup() {// 启动串口通信Serial.begin(115200);  // 设置串口波特率为115200// 连接到WiFi网络Serial.print("连接 " + String(ssid));WiFi.begin(ssid, password);// 等待WiFi连接while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.print(".");}// 打印设备的IP地址Serial.println();Serial.print("WiFi已连接, IP地址: ");Serial.println(WiFi.localIP());// Serial.println("WiFi已连接, IP地址: " + WiFi.localIP().toString());
}void loop() {// 每隔5秒打印一次IP地址Serial.println(WiFi.localIP());delay(5000);
}

2、控制LED示例

int ledPin = 4;void setup() {// 启动串口通信Serial.begin(115200);// 初始化引脚为输出模式pinMode(ledPin, OUTPUT);// 读取引脚的电平: 1 (HIGH)或 0(LOW)int ledState = digitalRead(ledPin);Serial.println(ledState);
}void loop() {if (Serial.available() > 0) {char receivedChar = Serial.read();Serial.print("收到字符: ");  // 调试输出Serial.println(receivedChar);  // 打印接收到的字符if (receivedChar == '1') {digitalWrite(ledPin, HIGH);} else if (receivedChar == '0') {digitalWrite(ledPin, LOW);}}
}

3、获取摄像头画面示例

#include "esp_camera.h"
#include <WiFi.h>// 设置 Wi-Fi 参数
const char* ssid = "WiFi名称";     // 你的Wi-Fi名称
const char* password = "WiFi密码";  // 你的Wi-Fi密码// 摄像头引脚配置
camera_config_t config = {.pin_pwdn  = 32,  // 摄像头电源控制引脚.pin_reset = -1,  // 复位引脚(未使用).pin_xclk = 0,  // 外部时钟引脚.pin_sscb_sda = 26,  // 摄像头SCCB SDA引脚(串行控制总线数据引脚).pin_sscb_scl = 27,  // 摄像头SCCB SCL引脚(串行控制总线时钟引脚).pin_d7 = 35,  // 数据引脚D7.pin_d6 = 34,  // 数据引脚D6.pin_d5 = 39,  // 数据引脚D5.pin_d4 = 36,  // 数据引脚D4.pin_d3 = 21,  // 数据引脚D3.pin_d2 = 19,  // 数据引脚D2.pin_d1 = 18,  // 数据引脚D1.pin_d0 = 5,   // 数据引脚D0.pin_vsync = 25,  // 垂直同步信号引脚.pin_href = 23,  // 水平同步信号引脚.pin_pclk = 22,  // 像素时钟引脚.xclk_freq_hz = 20000000,  // 外部时钟频率(20MHz).ledc_timer = LEDC_TIMER_0,  // LEDC定时器.ledc_channel = LEDC_CHANNEL_0,  // LEDC通道.pixel_format = PIXFORMAT_JPEG,  // 输出像素格式为JPEG// QVGA(320x240)VGA(640x480)HD(1280x720)SXGA(1280x1024)UXGA(1600x1200).frame_size = FRAMESIZE_SXGA,  // 视频帧大小// 数字越小质量越高,最小2.jpeg_quality = 10,  // JPEG质量.fb_count = 2  // 使用2个帧缓冲区
};// 启动 Web 服务器
WiFiServer server(80);  // 监听端口80// 启动摄像头视频流服务
void startCameraServer() {server.begin();  // 启动服务器Serial.println();Serial.println("Camera Ready! Use 'http://" + WiFi.localIP().toString() + "/stream' to view the stream.");
}// 处理视频流请求
void handleJPGStream(void) {WiFiClient client = server.available();  // 检查是否有客户端连接if (client) {  // 如果有客户端连接Serial.println("New client");  // 打印客户端连接信息String response = "HTTP/1.1 200 OK\r\n";  // HTTP响应头response += "Content-Type: multipart/x-mixed-replace; boundary=frame\r\n\r\n";  // 设置视频流内容类型client.print(response);  // 发送响应头// 持续发送帧数据while (1) {camera_fb_t *fb = NULL;fb = esp_camera_fb_get();  // 获取一帧图像if (!fb) {Serial.println("Camera capture failed");  // 捕获失败continue;}client.write("--frame\r\n");  // 分隔符client.write("Content-Type: image/jpeg\r\n\r\n");  // 图像内容类型client.write(fb->buf, fb->len);  // 发送图像数据client.write("\r\n");  // 发送分隔符esp_camera_fb_return(fb);  // 释放帧缓冲区delay(30);  // 等待30毫秒}}
}void setup() {Serial.begin(115200);  // 初始化串口通信,波特率为115200// 连接到Wi-Fi网络WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {  // 如果未连接成功,持续等待delay(500);Serial.print(".");}Serial.println();Serial.println("Wi-Fi连接成功, IP地址: " + WiFi.localIP().toString());// 初始化摄像头esp_err_t err = esp_camera_init(&config);  // 配置摄像头if (err != ESP_OK) {  // 如果初始化失败Serial.printf("摄像头初始化失败,出现错误 0x%x", err);  // 输出错误信息} else {Serial.println("摄像头初始化成功!");  // 初始化成功}startCameraServer();  // 启动Web服务器
}void loop() {handleJPGStream();  // 启动视频流处理
}

4、获取AHT10温湿度数据示例

如下安装传感器库
在这里插入图片描述

// i2c引脚: SDA(数据线)= GPIO14 & SCL(时钟线)‌= GPIO15// 扫描I2C地址,用来判断是否能找到I2C传感器(AHT10默认I2C地址是 0x38)
#include <Wire.h>void setup() {Serial.begin(115200);Wire.begin(14, 15); // 设置 SDA 和 SCL 对应的 GPIOSerial.println("开始扫描 I2C 地址...");for (uint8_t address = 1; address < 127; address++) {Wire.beginTransmission(address);if (Wire.endTransmission() == 0) {Serial.print("找到 I2C 设备,地址: 0x");Serial.println(address, HEX);}}
}void loop() {// 不需要在 loop 中做其他事
}
#include <Wire.h>                    // 引入Wire库,用于I2C通信
#include <Adafruit_AHTX0.h>           // 引入Adafruit_AHTX0库,用于控制AHT10传感器Adafruit_AHTX0 aht;                  // 创建AHT10传感器对象void setup() {Serial.begin(115200);              // 初始化串口通信,波特率115200Wire.begin(14, 15);                // 初始化I2C总线,设置SDA为14,SCL为15if (!aht.begin()) {                // 初始化AHT10传感器,如果初始化失败Serial.println("无法初始化 AHT10 传感器!");  // 输出错误信息while (1);                        // 停止程序,进入死循环}Serial.println("AHT10 初始化成功!");  // 如果传感器初始化成功,打印成功信息
}void loop() {// 获取传感器的数据,存储在humidity和temp中sensors_event_t humidity, temp;      aht.getEvent(&humidity, &temp);     // 从AHT10传感器获取温度和湿度数据// 打印温度值Serial.print("温度: ");             Serial.print(temp.temperature);     // 打印温度数据Serial.println(" ℃");              // 输出单位℃// 打印湿度值Serial.print("湿度: ");             Serial.print(humidity.relative_humidity);  // 打印湿度数据Serial.println(" %");                      // 输出单位%delay(2000);                       // 每两秒更新一次数据
}
http://www.xdnf.cn/news/4784.html

相关文章:

  • Windows环境,Python实现对本机处于监听状态的端口,打印出端口,进程ID,程序名称
  • 静态BFD配置
  • USB集线器芯片革新之战:CH334U如何以工业级性能重新定义HUB控制器
  • Python教程112:找到每月的第三个星期五(calendar)
  • 图表制作-带背景色的柱状图
  • C# NX二次开发:判断两个体是否干涉和获取系统日志的UFUN函数
  • 手撕基于AMQP协议的简易消息队列-3(项目所用到的工具类的编写)
  • DRF+Vue项目线上部署:腾讯云+Centos7.6
  • Android学习总结之kotlin协程面试篇
  • [学习]RTKLib详解:ephemeris.c与rinex.c
  • 77.组合问题
  • 基于Partial Cross Entropy的弱监督语义分割实战指南
  • ElasticSearch基本概念
  • Abaqus学习笔记
  • 解锁 LLM 推理速度:深入 FlashAttention 与 PagedAttention 的原理与实践
  • 如何对 Oracle 日志文件进行校验
  • AUBO STUDIO简介
  • Milvus(17):向量索引、FLAT、IVF_FLAT
  • 在现代Web应用中集成 PDF.js (pdfjs-dist 5.2 ESM): 通过 jsdelivr 实现动态加载与批注功能的思考
  • TDengine 在新能源行业应用
  • Java 线程全面概述
  • 在Excel图表添加辅助线
  • 在 YAFFS2 文件系统中,`yaffs_pread` 函数详解
  • 2.3 点云数据存储格式——LiDAR专用型点云存储格式
  • 003.chromium编译进阶-禁用css动画和禁用canvas渲染
  • 【最新版】likeshop连锁点餐系统-PHP版+uniapp前端全开源
  • 【LangChain基础系列】深入全面掌握文本分类
  • pyorch中tensor的理解与操作(一)
  • java后端知识点复习
  • 图表制作-基础面积图