陈拓 2022/02/02-2022/02/03
https://github.com/nopnop2002/esp-idf-ftpServer
1) 使用 FAT 文件系统,基于esp-idf的FTP服务器。
2) 以下面这个信息:https://www.esp32.com/viewtopic.php?f=13&t=5013#p21738
为线索,从这里开始移植:
https://github.com/loboris/MicroPython_ESP32_psRAM_LoBo/blob/master/MicroPython_BUILD/components/micropython/esp32/libs/ftp.c
3) 由于它使用 FAT 文件系统而不是 SPIFFS,因此可以进行目录操作。
闪存大小要求为4M。无法使用Flash Size 2M的型号,例如ESP32-C3-2M。
我们用ESP32-CAM:
原理图:
注意:ESP32_CAM板载闪光灯在gpio引脚4,与TF卡座DATA1共用一个引脚。
导致在4线模式时读写SD卡会引起闪光灯闪烁。
在树莓派上搭建ESP32 ESP-IDF开发环境:
https://blog.csdn.net/chentuo2000/article/details/122788482?spm=1001.2014.3001.5501
我们使用的ESP-IDF版本时v4.3.1,如果要支持ESP32-C3,需使用esp-idf v4.4 或更高版本。
下面是ESP32的安装,对于ESP32-S2和ESP32-C3请看项目的README.md文件。
git clone git://github.com/nopnop2002/esp-idf-ftpServer.git
cd esp-idf-ftpServer/
get_idf
注意:每次打开终端进入sdk都要执行一次此命令
idf.py set-target esp32
注意:在项目创建第一次使用,以后就不用运行这个命令了。
idf.py menuconfig
1) 文件系统
ESP32 支持以下文件系统,您可以使用menuconfig选择任何一个。
除此之外,ESP32支持SPIFFS文件系统,但我们不使用它,因为它无法处理目录。
我们选择SDMMC外围设备SDCARD上的FAT文件系统:
FAT File System on MMC SDCARD
SDMMC只能与ESP32一起使用,ESP32-S2和ESP32-C3不支持。
您可以选择1线模式和SD卡速度。
2) WiFi设置
3) 使用mDNS进行连接
4) 使用静态IP
5) 时间同步NTP服务器和时区设置
6) FTP 服务器设置
7) 长文件名支持
ESP-IDF 框架下的 FATFS默认使用的文件名格式是8.3短文件名,即文件名为8个字节,.后的后缀为3个字节。一旦文件名称超出长度限制,就会出错。
给FATFS添加长文件名支持,更改_USE_LFN以支持大于8.3格式的文件名:
保存,退出。
idf.py build
idf.py -p /dev/ttyUSB0 -b 115200 flash
更快的烧写速度:
idf.py -p /dev/ttyUSB0 -b 460800 flash
注意:再次烧写ESP32-CAM时要重新上电。这时USB转串口设备/dev/ttyUSBx可能会变,使用前先查看一下。
idf.py monitor -p /dev/ttyUSB0
注意:USB转串口设备/dev/ttyUSBx可能会变,使用前先查看一下。
我使用CuteFTP,多年使用的老程序,顺手了,经测试可以用。其他的FTP客户端可否使用,请自行测试
https://en.softonic.com/download/cuteftp/windows/post-download
程序运行后不用设置,直接使用。
CuteFTP使用很简单,这里就不讲述了。
SD(TF)卡使用前必须在PC上用FAT32格式化。
ESP32引脚 |
SD卡引脚 |
注释 |
GPIO14 |
CLK |
10k上拉 |
GPIO15 |
CMD |
10k上拉 |
GPIO2 |
D0 |
10k上拉 |
GPIO4 |
D1 |
不用于1线SD模式;在4线SD模式下10k上拉 |
GPIO12 |
D2 |
不用于1线SD模式;在4线SD模式下10k上拉 |
GPIO13 |
D3 |
不用于1线SD模式,但SD卡的D3引脚必须有10k上拉 |
N/C |
CD |
可选,示例中未使用 |
N/C |
WP |
可选,示例中未使用 |
3.3V |
VCC |
不要使用 5V 电源 |
GND |
GND |
该项目不使用
该项目不使用来自SD卡插槽的卡检测(CD)和写保护(WP)信号。
ESP32-S不包含SD Host外设,仅支持SD over SPI。
GPIO2用作自举(升压)引脚,必须为低电平才能进入UART下载模式。大多数开发板上的自动复位电路会在进入下载模式时将GPIO2和GPIO0拉低,否则要使用跳线连接GPIO0和GPIO2。
一些开发板在GPIO2上有下拉或LED。LED一般是可以的,但是下拉会干扰D0信号,必须去掉。检查您的开发板的原理图是否有任何连接到GPIO2的东西。
GPIO12用作自举(升压)引脚来选择内部稳压器的输出电压为闪存芯片(VDD_SDIO)供电的。该引脚具有内部下拉功能,因此如果未连接,它将在复位时读取低电平(选择默认3.3V操作)。为SD卡操作向该引脚添加上拉电阻时,请考虑以下事项:
不幸的是,Windows标准ftp.exe不允许被动模式(PASV)连接。如果您必须进行被动模式连接在Windows上,您需要使用其他软件,例如 FFFTP / WinSCP / FileZilla 以被动模式连接。前面说过了,我使用CuteFTP。