arduino IDE
1)在文件>首先项> 额外开发板过滤器中输入https://dl.espressif.com/dl/package_esp32_index.jsone 并点击“确认” 按键
2)在工具>开发板>开发板管理器中搜索ESP32并点击安装“ESP32 by Espressif Systems“
3)等-----太长的时间了
烧写器FTDI与ESP32-CAM通过串口相连,并为ESP32-CAM供电,ESP32运行时很多信息是通过串口发送的,FTDI与电脑的接口是USB的,需要安装USB转串口驱动 CP210x USB to UART Bridge VCP Drivers
1)在IDE中工具>开发板选 AI Thinker ESP32-CAM
2)在文件>示例>ESP32>Camera选择CamerWebServer
3)在文件CameraWebServer.ino中修改:
// Select camera model
//#define CAMERA_MODEL_WROVER_KIT //注销掉
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER //去掉前面的注释标志
#include "camera_pins.h"
const char* ssid = "********"; //连接到的无线网络名
const char* password = "******"; //网络密码
4)连接开发板+烧写器,注意,开发板烧写时要使用跳线,运行时断开
5)打开串口工具,并设置波特率为115200
工具>串口监视器
6)下载烧写
项目>烧写(或直接点击烧写图标)
7)烧写成功,断开开发板跳线,按开发板复位键
8)观察串口监视器,获取开发板IP地址(如:192.168.0.3)
9)保证PC机与开发板在 同一个子网中,在PC浏览器地址栏中输入开发板地址,如192.168.0.3
10)点击”start stearm“
//----------------------------------------------------------------------------------
在我之间的分析中,我认为开发板应该有一个服务器,开发板摄像头将图片拍摄下来以后,不停地发往客服端,我一直很好奇客户端到底是如何实现地,客户端按照一定时间间隔发送消息让服务器发送视频图像吗?这次就可以好好看看了
在浏览器端,按下F12可以看到其客服端代码,可以看到如下大致框架
..........................//视频与图像就在下面显示
.......................//注册了一个回调函数
document.addEventListener('DOMContentLoaded', function (event){
var baseHost = document.location.origin //服务器地址
var streamUrl = baseHost + ':81' //服务器视频断开
....
//更新数据
function updateConfig (el) {
..........
const query = `${baseHost}/control?var=${el.id}&val=${value}`
fetch(query)
.then(response => {
console.log(`request to ${query} finished, status: ${response.status}`)
})
}
...
}
我将其改写为如下内容:
视频能够正常显示,说明其关键是img标签,通过wireshark也发现除了开始时浏览器和服务器进行交互外,后面都是服务器一直发送数据给浏览器。
我后面将继续分析ESP32-CAM服务器端的代码,看看它是如何实现的。它的核心代码只有四个:
CameraWebServer.ino、app_httpd.cpp、camer_index.h和cmaera_pins.h
其中CameraWebServer.ino最重要,是起点,其中主要包含两个函数
1.setup()---只执行一次的函数
2.loop()---循环执行的函数
在setup中其启动了camera和httpd,将ESP32当作webServer,遵循http协议,api采用的是restful格式,很有趣的一种架构