什么?不连电脑,用Wi-Fi就能读取SD卡上的内容?

设想一个场景:
你只要将带SD卡的设备插入任何一个USB端口 , 它会自行创建一个FTP服务器 , 同一个局域网下 , 手机、电脑等能联网的设备都可以实现跟SD卡进行无线数据发送和接收 。
再也不需要反复插拔 , 拿个卡拷来拷去了 , 是不是很方便?
所需材料和工具硬件模块x1ESP8266ESP-12Ex1MicroSD卡x1MicroSD卡适配器x1双排10脚(2.54mm)直角排针x1FDTI模块x13.3v稳压器x1万能PCB板软件应用程序和在线服务ArduinoIDE必备工具烙铁(通用型)无铅焊锡丝制作背景USB的设计初衷是通用性 , 主要目标是实现热插拔、超级容易与其他设备对接 , 但多年来这个想法变得混乱 。
令人感到沮丧的是USB接口有那么多不同的变种 , 工作方式与它们的名字[USB-通用串行总线]完全矛盾 。 理想情况是每个USB接收器应该与任何USB设备兼容!但现实情况是你不能把U盘或键盘插在充电器里 , 然后指望它能工作 。
我们所要做的就是把它插入任意USB接收器 , 不管哪一个!
一旦您把它插入USB , 它会创建一个热点 , 然后我们就可以连接到这个热点 , 在任何兼容设备中打开任意FTP客户端程序 。 通过此设置 , 我们可以用无线方式从SD卡复制文件 , 以及往SD卡保存文件!
购买材料首先我们需要准备下面这些材料:
ESP-12ESD卡Micro-SD适配器直排针90度排针导线FTDI模块ArduinoNano及USB线USB公头万能PCB板烙铁焊锡丝第1步:认识SD卡 SD卡与微控制器的连接有两种方式 , 分别是SDIO和SPI 。
大多数SD卡都具备许多标准功能 , 并且具有相同的物理和电气规格 。
SPI和SDIO之间的实际差异主要体现在软件层面 。 详细信息可前往了解SD、SDIO和MMC接口 。
简单说就是SDIO更快但更难实现 , SPI较慢但更容易实现 。 由于大多数微控制器默认支持SPI , 所以我们就选择SPI吧 。
以下是SD卡的SPI引脚定义:
Pin-1-CS(片选)Pin-2-DI(MOSI)Pin-3-GNDPin-4-VCCPin-5-SCLKPin-6-GNDPin-7-DO(MISO)Pin-8-NCPin-9-NC第2步:改装SD卡适配器 首先 , 清洁SD卡适配器的触点 。 接着将90度排针的插脚直接焊接到适配器触点上 。 焊接完成后 , 检查触点(插脚)之间有没有短路 。 然后一个一个地卸下黑色分隔块 , 以便把它放回原处时 , 它会与万能PCB板平齐 。
裁剪万能PCB板使其与SD卡适配器完美匹配 , 且有一些额外的空间来安装USB接口 。
虽然也可以不用SD卡适配器 , 直接对SD卡做同样的处理 , 但是风险很大 , 相当容易损坏SD卡 。
第3步:安装USB插头 把USB公头插在SD卡适配器前端我们之前预留的空间那里 , 然后焊接到位 。 但这还没有真正解决供电问题!因为SD卡需要3.3伏的电压 , 但是USB电源是标准的5V , 如果你直接插上5V电源 , 你很可能会烧坏SD卡(但MicroSD卡适配器不会损坏) 。
为了解决这个问题 , 我们将使用一个3.3V稳压器 , 并将USB电源的输入连接到3.3V稳压器 , 即将USB的GND引脚连接到稳压器的引脚1 , 并将USB的+5V引脚连接到稳压器的引脚3 。 最后 , 将稳压器的引脚2译注:原文为引脚3 , 根据电路图及稳压芯片ASM1117的说明应该是引脚2(输出引脚)和接地焊接到SD卡上 。
这就解决了SD卡的电压适配 。 您可以查看电路图 , 了解更详细的接线
第4步:把所有元件跟ESP-12E整合 首先将EN(使能引脚)焊接到ESP12E的VCC上 , 这是用来启动IC的 。 如果使能引脚没有连接到高电平信号 , IC将不会启动 。 然后将ESP12E放在万能PCB板背面 , 将ESP12E的SPI引脚焊接到SD卡上对应的SPI引脚上 。 连接细节请查看电路图 。
第5步:比较HTTP和FTP在学习编程之前 , 我对下载和上传的工作原理做了一些研究 , 那时我偶然碰到FTP这个词 。 FTP是文件传输协议(FileTransferProtocol)的首字母缩写 , 它是用来在服务器和客户机之间传输文件的 , 它与普通的HTTP协议完全不同 , 后者是用来在客户机和服务器之间发送请求和接收响应的 , 而且数据量非常小 。
FTP在传输文件方面比HTTP快 , 因为它是专门为传输文件设计的 。 因此 , 在这个项目中我选择使用FTP 。 FTP服务器运行在ESP-12E上 , 我们可以通过这个FTP服务器跟SD卡进行数据推送与获取 。
第6步:挑战FTP库我没有找到一个非常活跃的或者专门为ESP8266开发的FTP库 。 但是经过一番挖掘 , 我遇到了DavidPaiva , 他将一个Arduino版本的FTP服务器移植到ESP8266 , 可惜它只支持SPIFFS , 不支持SD卡 。
终于功夫不负有心人 , 我发现有人付出努力把DavidPaiva的FTP库从支持SPIFFS转换成支持SD卡了 。 但是 , 当我尝试使用这个库时 , 遇到了两个问题 。 首先 , 我发现这个网页是韩语的 , 所以我不得不坐下来一点一点翻译所有的东西 , 以便在我能实际使用它之前知道内部的工作原理 。 第二个问题是 , 我必须修改现有的SD库来引入他所做的更改 , 这让人感觉很笨拙 。
于是我比较了一下这两个库 , 一个来自DavidPaiva , 另一个来自韩国网站 , 然后做了一些小的改动 , 把所有代码整合到一个项目里 , 这样就不必再安装其它额外的库了 。 你可以从我的Github帐户中查看项目的完整代码 。
第7步:对ESP-12E编程 具体接线方法是:
GND[ESP12E]连接到FDTI模块的GNDRx[ESP12E]连接到FDTI模块的TxTx[ESP12E]连接到FDTI模块的RxGPIO15[ESP12E]连接到FDTI模块的GNDGPIO0[ESP12E]连接到FDTI模块的GNDVCC[ESP12E]连接到FDTI模块的VCC最后 , 使用ArduinoIDE上传Github上下载的代码 。
一旦程序上传完毕 , 你就可以焊掉连接到ESP12E烧录器的导线 。
第8步:大功告成! 第9步:使用设备 以安卓设备为例 , 安装完成后 , 打开AndFTP并填写账号密码 , 设置FTP客户端 。 对我来说 , 我保持代码中使用默认的用户名和密码“ESP8266” 。 所以 , 用户信息使用默认值 , 主机使用192.168.12.7 。 最后 , 连接到FTP服务器 。
连接上后 , 就可以从SD卡下载任何文件 , 也可以将文件从手机上传到SD卡 。
你可以观看视频了解它是如何工作的!
总结 虽然做到了我想要的功能 , 但它终究是缓慢的!对于4个文件(每个大约100Kb)大约需要30秒 , 如果您尝试使用10MB这样更大的文件 , 则需要大约3-4分钟才能完成 。 当然 , 传输速率还有一定的优化空间 , 从我之前提到的网页来看 , 作者能够获得大约450kbs的读取速度 。 (使用ESP32和SDMMC库传输速度可能约为1MB/s)
我之所以到此为止而没有尝试去优化它有两个原因 。 第一个原因 , 我真的很希望 , 除了FTP服务器之外 , 我还可以使用USB数据线来传输数据 , 但ESP8266或ESP32都不支持 。 第二个原因 , 我无法通过FTP传输文件获得足够的速度 。 这也是为什么我不费心用ESP32代替ESP12E的原因 。
但我觉得如果我们能使用支持全速USBOTG的ESP32S2板 , 这些问题应该可以解决 。 也许我可以在另一个教程中作此尝试 。
电路图 或者前往作者GitHub代码仓库下载最新代码
项目链接:
项目作者:Neutrino
【什么?不连电脑,用Wi-Fi就能读取SD卡上的内容?】中文翻译:fibx


    推荐阅读