ESP32 ESP-IDF ftpServer

陈拓 2022/02/02-2022/02/03

1. 概述

https://github.com/nopnop2002/esp-idf-ftpServer

  • 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 ESP-IDF ftpServer_第1张图片 

原理图:

ESP32 ESP-IDF ftpServer_第2张图片 

注意:ESP32_CAM板载闪光灯在gpio引脚4,与TF卡座DATA1共用一个引脚。

导致在4线模式时读写SD卡会引起闪光灯闪烁。

2. 开发环境

在树莓派上搭建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 或更高版本。

3. 安装项目

下面是ESP32的安装,对于ESP32-S2和ESP32-C3请看项目的README.md文件。

  • 克隆

git clone git://github.com/nopnop2002/esp-idf-ftpServer.git

ESP32 ESP-IDF ftpServer_第3张图片 

cd esp-idf-ftpServer/

ESP32 ESP-IDF ftpServer_第4张图片 

  • 刷新esp-idf环境

get_idf

注意:每次打开终端进入sdk都要执行一次此命令

  • 设定目标芯片

idf.py set-target esp32

注意:在项目创建第一次使用,以后就不用运行这个命令了。

ESP32 ESP-IDF ftpServer_第5张图片 

ESP32 ESP-IDF ftpServer_第6张图片 

  • 配置项目

idf.py menuconfig

ESP32 ESP-IDF ftpServer_第7张图片 

1) 文件系统

ESP32 支持以下文件系统,您可以使用menuconfig选择任何一个。

  • FLASH上的FAT文件系统
  • SPI外设SDCARD上的FAT文件系统
  • SDMMC外围设备SDCARD上的FAT文件系统

除此之外,ESP32支持SPIFFS文件系统,但我们不使用它,因为它无法处理目录。

我们选择SDMMC外围设备SDCARD上的FAT文件系统:

FAT File System on MMC SDCARD

ESP32 ESP-IDF ftpServer_第8张图片 

SDMMC只能与ESP32一起使用,ESP32-S2和ESP32-C3不支持。

您可以选择1线模式和SD卡速度。

ESP32 ESP-IDF ftpServer_第9张图片 

2) WiFi设置

ESP32 ESP-IDF ftpServer_第10张图片 

3) 使用mDNS进行连接

ESP32 ESP-IDF ftpServer_第11张图片 

4) 使用静态IP

ESP32 ESP-IDF ftpServer_第12张图片

5) 时间同步NTP服务器和时区设置

ESP32 ESP-IDF ftpServer_第13张图片 

6) FTP 服务器设置

 

7) 长文件名支持

ESP-IDF 框架下的 FATFS默认使用的文件名格式是8.3短文件名,即文件名为8个字节,.后的后缀为3个字节。一旦文件名称超出长度限制,就会出错。

给FATFS添加长文件名支持,更改_USE_LFN以支持大于8.3格式的文件名:

ESP32 ESP-IDF ftpServer_第14张图片 

保存,退出。

  • 编译

idf.py build

  • 烧写

idf.py -p /dev/ttyUSB0 -b 115200 flash

 

更快的烧写速度:

idf.py -p /dev/ttyUSB0 -b 460800 flash

注意:再次烧写ESP32-CAM时要重新上电。这时USB转串口设备/dev/ttyUSBx可能会变,使用前先查看一下。

 

4. 测试

  • 串口监视器

idf.py monitor -p /dev/ttyUSB0

注意:USB转串口设备/dev/ttyUSBx可能会变,使用前先查看一下。

 

  • Ctrl+] 退出监视器程序

ESP32 ESP-IDF ftpServer_第15张图片 

  • 在Windows窗口测试连通性

ESP32 ESP-IDF ftpServer_第16张图片 

  • 使用FTP客户端工具下载

我使用CuteFTP,多年使用的老程序,顺手了,经测试可以用。其他的FTP客户端可否使用,请自行测试

https://en.softonic.com/download/cuteftp/windows/post-download

程序运行后不用设置,直接使用。

ESP32 ESP-IDF ftpServer_第17张图片 

 

CuteFTP使用很简单,这里就不讲述了。

5. 说明

  • 在 SDMMC 外围设备 SDCARD 上使用 FAT 文件系统

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 的注意事项(仅限 ESP32)

GPIO2用作自举(升压)引脚,必须为低电平才能进入UART下载模式。大多数开发板上的自动复位电路会在进入下载模式时将GPIO2和GPIO0拉低,否则要使用跳线连接GPIO0和GPIO2。

一些开发板在GPIO2上有下拉或LED。LED一般是可以的,但是下拉会干扰D0信号,必须去掉。检查您的开发板的原理图是否有任何连接到GPIO2的东西。

  • 关于 GPIO12 的注意事项(仅限 ESP32)

GPIO12用作自举(升压)引脚来选择内部稳压器的输出电压为闪存芯片(VDD_SDIO)供电的。该引脚具有内部下拉功能,因此如果未连接,它将在复位时读取低电平(选择默认3.3V操作)。为SD卡操作向该引脚添加上拉电阻时,请考虑以下事项:

    1. 对于不使用内部稳压器(VDD_SDIO)为闪存供电的板子,可以将GPIO12拉高。
    2. 对于使用 1.8V 闪存芯片的板子,GPIO12需要在复位时拉高。这与SD卡操作完全兼容。
    3. 在使用内部稳压器和3.3V闪存芯片的板子上,GPIO12在复位时必须为低电平。这与SD卡操作不兼容。
      1. 在大多数情况下,外部上拉可以省略,内部上拉可以通过gpio_pullup_en(GPIO_NUM_12);调用启用。大多数SD卡在启用 GPIO12线上的内部上拉时工作正常。请注意,如果ESP32在SD卡发送数据时发生上电复位,GPIO12的高电平可以锁存到自举寄存器中,ESP32将进入引导循环,直到用正确的GPIO12电平进行外部复位。
      2. 另一种选择是烧毁闪存电压选择efuse(熔丝)。这将为内部稳压器永久选择3.3V输出电压,并且GPIO12不会用作自举(升压)引脚。然后将一个上拉电阻连接到 GPIO12 是安全的。建议将此选项用于生产用途。
  • 限制
    1. 服务器不支持多连接。
    2. 服务器不支持主动连接,仅支持被动连接。

不幸的是,Windows标准ftp.exe不允许被动模式(PASV)连接。如果您必须进行被动模式连接在Windows上,您需要使用其他软件,例如 FFFTP / WinSCP / FileZilla 以被动模式连接。前面说过了,我使用CuteFTP。

    1. 服务器只能处理下面这些命令
    • SYST
    • CDUP
    • CWD
    • PWD
    • XPWD(Same as PWD)
    • SIZE
    • MDTM(Always GMT)
    • TYPE
    • USER
    • PASS
    • PASV
    • LIST
    • RETR
    • STOR
    • DELE
    • RMD
    • MKD
    • RNFR(Rename From)
    • RNTO(Rename To)
    • NOOP
    • QUIT
    • APPE
    • NLST

你可能感兴趣的:(ESP32,ESP32,FTP,Server,ESP-IDF)