概述
陈拓 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_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
cd esp-idf-ftpServer/
- 刷新esp-idf环境
get_idf
注意:每次打开终端进入sdk都要执行一次此命令
- 设定目标芯片
idf.py set-target esp32
注意:在项目创建第一次使用,以后就不用运行这个命令了。
- 配置项目
idf.py menuconfig
1) 文件系统
ESP32 支持以下文件系统,您可以使用menuconfig选择任何一个。
- FLASH上的FAT文件系统
- SPI外设SDCARD上的FAT文件系统
- SDMMC外围设备SDCARD上的FAT文件系统
除此之外,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可能会变,使用前先查看一下。
4. 测试
- 串口监视器
idf.py monitor -p /dev/ttyUSB0
注意:USB转串口设备/dev/ttyUSBx可能会变,使用前先查看一下。
- Ctrl+] 退出监视器程序
- 在Windows窗口测试连通性
- 使用FTP客户端工具下载
我使用CuteFTP,多年使用的老程序,顺手了,经测试可以用。其他的FTP客户端可否使用,请自行测试
https://en.softonic.com/download/cuteftp/windows/post-download
程序运行后不用设置,直接使用。
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卡操作向该引脚添加上拉电阻时,请考虑以下事项:
-
- 对于不使用内部稳压器(VDD_SDIO)为闪存供电的板子,可以将GPIO12拉高。
- 对于使用 1.8V 闪存芯片的板子,GPIO12需要在复位时拉高。这与SD卡操作完全兼容。
- 在使用内部稳压器和3.3V闪存芯片的板子上,GPIO12在复位时必须为低电平。这与SD卡操作不兼容。
- 在大多数情况下,外部上拉可以省略,内部上拉可以通过gpio_pullup_en(GPIO_NUM_12);调用启用。大多数SD卡在启用 GPIO12线上的内部上拉时工作正常。请注意,如果ESP32在SD卡发送数据时发生上电复位,GPIO12的高电平可以锁存到自举寄存器中,ESP32将进入引导循环,直到用正确的GPIO12电平进行外部复位。
- 另一种选择是烧毁闪存电压选择efuse(熔丝)。这将为内部稳压器永久选择3.3V输出电压,并且GPIO12不会用作自举(升压)引脚。然后将一个上拉电阻连接到 GPIO12 是安全的。建议将此选项用于生产用途。
- 限制
- 服务器不支持多连接。
- 服务器不支持主动连接,仅支持被动连接。
不幸的是,Windows标准ftp.exe不允许被动模式(PASV)连接。如果您必须进行被动模式连接在Windows上,您需要使用其他软件,例如 FFFTP / WinSCP / FileZilla 以被动模式连接。前面说过了,我使用CuteFTP。
-
- 服务器只能处理下面这些命令
-
- 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 ESP-IDF ftpServer的全部内容,希望文章能够帮你解决ESP32 ESP-IDF ftpServer所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复