ESP32-Shutter-Line 是一款基于 ESP32-WROOM 制作的快门线,主要适配佳能机型。
1.自定义设置
2.最多三种预设
3.无线遥控&设置
[是否定时几秒]+[拍摄几张]+[间隔时间]+[是否要自动对焦]+[快门速度]
硬件SMD,软件开源,综合来看很容易复刻。
充电芯片采用TP4056,可以通过配置PROG引脚控制充电电流,我这里使用了500mA充电电流,电池为500mAh聚合物锂电池,理论上可以供电超过3小时,充电时间约为1小时。(运行电流约为150mA)
ESP32-D0WD-V3 双核,模组为ESP32-WROOM。
Visual Studio Code + Platform IO
在 RS-80N3 型号快门线中,引出了黄、白、红三线,根据实验(网上查询也可以)可得知:
白红短接自动对焦+拍摄,两端 3.3V
白黄短接自动对焦,两端 3.3V
黄红短接无效果,两端 0V
由此可得白线连接了相机内部的GND网络,黄、红大概率连接内部芯片IO引脚,芯片通过检测IO对地电平判断是否有对应拍摄指令。
通过三极管可令 ESP32 对引脚进行控制,这里使用 S8050 三极管。
S8050加上锂电池充放电管理、屏幕驱动以及按键,可以简单设计出以下原理图:
使用双层工艺。
ID | Name | Designator | Footprint | Price |
---|---|---|---|---|
1 | K4-12×12_TH | BACK,SELECT,SET | KEY-TH_4P-L12.0-W12.0-P5.00-LS12.5 | 0.6171 |
2 | 10μF/10V | C1,C3 | 0805_C_JX | |
3 | 100nF/50V | C2,C4 | 0603_C_JX | |
4 | 0.1u | C5 | 1206 | |
5 | 1uF | C6,C7,C8,C9 | C0603 | 0.0353 |
6 | S8050LT1-J3Y | FOCUS,Q2,SHUTTER | SOT-23_L2.9-W1.3-P1.90-LS2.4-BR | 0.1153 |
7 | 排针7P-2.54MM直插 | H1 | 排针2.54MM7P | 0.6804 |
8 | 触点 | BAT,5V,3.3V | 触点 | |
9 | Red/LED | LED1,LED3 | 0603_D_JX | |
10 | Green/LED | LED2 | 0603_D_JX | |
11 | RU8205C6 | Q1 | SOT-23-6 | 0.2888 |
12 | 0.25R/1% | R1 | 1206_R_JX | |
13 | 100 | R2 | 805 | |
14 | 1k | R6 | 805 | |
15 | 2k/1% | R3 | 0603_R_JX | |
16 | 10k/1% | R4 | 0603_R_JX | |
17 | 1.2k/1% | R5 | 0805-R | |
18 | 1k | R7 | R0603 | |
19 | TA-3525-A1 | SW1 | SW-SMD_3P-L9.1-W3.5-P2.50-EH6.8 | 0.9702 |
20 | DW01+ | U1 | SOT-23-6-L | |
21 | 3P金手指 | BAT,U7 | 3P金手指 | |
22 | TP4056_JX | U3 | SOP8_150MIL_JX | |
23 | ST7789V-12PIN 1.3寸LCD MINI | U4 | ST7789V-12PIN | |
24 | ME6212C33M5G | U5 | SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BL | 0.2218 |
25 | ESP32-WROOM-32 | U6 | WIFIM-SMD_ESP32-WROOM-32-N4 | 20.16 |
26 | TYPE-C 6P | USB1 | TYPE-C-SMD_TYPE-C-6P | 0.3558 |
注:本人缺少 HTML 网页编写经验,便使用了 ChatGPT 3.5 协助完成项目。
核心实现原理:通过 ESP32 的server.arg()
API 以及网页端的查询参数
进行网页→ESP32的通信。
<a href = "/Example?Parameter=1">SET</a>
客户端效果大概是这样:SET
点击 SET 之后会跳转到/Example
下,在 ESP32 端使用server.on("/Example", HandleRoot);
设置对应的回调函数HandleRoot()
:
void HandleRoot() {
int Value = atoi(server.arg("Parameter").c_str());
}
此时会获取Parameter
的值,也就是一开始链接中定义的1
。如此便实现客户端与 ESP32 的通信。
注:这里
Value
为int
类型,因此要经过String
→int
的转换,根据实际情况改变用法。
<label for="input">XXX</label>
<input type="number" id="input" name="input">
<button type="button" onclick="openURL()">发送数据</button>
function openURL() {
var T = document.getElementById("input1").value;
var N = document.getElementById("input2").value;
var I = document.getElementById("input3").value;
var A = document.getElementById("input4").value;
var S = document.getElementById("input5").value;
// 构建URL,将五个参数作为查询参数
var url = '/?T=' + T + '&N=' + N + '&I=' + I + '&A=' + A + '&S=' + S;
// 使用window.location.href在原有窗口中打开URL
window.location.href = url;
}
在查询参数中添加额外参数group
告诉 ESP32 是哪一组预设即可。
ESP8266 – ESP8266WebServer库 – arg – 太极创客 (taichi-maker.com)
玩转 ESP32 + Arduino(二十八) TFT_eSPI库驱动ST7789(SPI接口) - 简书 (jianshu.com)
玩转 ESP32 + Arduino (二十一) SPIFFS文件系统_finedayforu的博客-CSDN博客
该项目从2021年09月05日开始构思,目前为止基本要完成了。它几乎代表了我的最高技术力,希望该项目能为开源事业添砖加瓦。
在开发过程中,我也吸取到不少经验和教训,这里尽量分享出来,希望能帮助到各位。
怎么调试都不成功的话,重新下载库文件再配置一遍会好
LCD的RES最好不要省事练板子RST(EN),单独设置引脚更稳定
使用SPIFFS请
include
FS.h
以及SD.h
,第一次使用SPIFFS请格式化(-10025)for函数int i请赋值
乘除进制单位转换
HTML到cpp的大小写