fibx 发表于 2020-7-21 16:48:18

无线SD读卡器[ESP8266]

## 无线SD读卡器
只需将带SD卡的设备插入任何USB端口,通过它创建一个FTP服务器,就可以实现跟SD卡进行无线数据发送和接收。


### 所需材料和工具
1.硬件模块
- x1 (https://www.hackster.io/espressif/products/esp8266-esp-12e?ref=project-de7f07)
- x1 MicroSD卡
- x1 MicroSD卡适配器
- x1 双排10脚(2.54 mm)直角排针
- x1 FDTI模块
- x1 3.3v稳压器
- x1 万能PCB板
2. 软件应用程序和在线服务
- (https://www.hackster.io/arduino/products/arduino-ide?ref=project-de7f07)
3. 必备工具
- 烙铁(通用型)
- 无铅焊锡丝

### 制作过程
https://v.youku.com/v_show/id_XNDc2MTI2MTE1Mg==.html

USB的设计初衷是通用性,主要目标是实现热插拔、超级容易与其他设备对接,但多年来这个想法变得混乱。令人感到诅丧的是USB接口有那么多不同的变种,工作方式与它们的名字完全矛盾。理想情况是每个USB接收器应该与任何USB设备兼容!但现实情况是你无法做到把USB记忆棒或键盘插入充电器中,并期望它能正常工作。

这就是我启动这个简单项目“无线读卡器”来实现这个“通用端口”创意的原因。这算是个非常好的创意!

所要做的就是把它插入任意USB接收器,不管哪一个!这个项目将实现我的想法。

一旦您把它插入USB,它会创建一个热点,然后我们就可以连接到这个热点,在任何兼容设备中打开任意FTP客户端程序。通过此设置,我们可以用无线方式从SD卡复制文件,以及往SD卡保存文件!

#### 第0步:购买材料
这些是可以帮助您轻松完成此项目的产品列表(Affiliate链接)

- ESP-12E: [购买链接](https://amzn.to/3h3b37s)
- SD卡:[购买链接](https://amzn.to/3eyFxMV)
- Micro-SD适配器:[购买链接](https://amzn.to/2OzQbZi)
- 直排针:[购买链接](https://amzn.to/2OAN972)
- 90度排针:[购买链接](https://amzn.to/2OBa8Pn)
- 导线:[购买链接](https://amzn.to/39hlPVf)
- FTDI模块:[购买链接](https://amzn.to/396uFEZ)
- Arduino Nano及USB线:[购买链接](https://amzn.to/32scB71)
- USB公头:[购买链接](https://amzn.to/2Wvy2Ad)
- 万能PCB板:[购买链接](https://amzn.to/30nOWSD)
- 烙铁:[购买链接](https://amzn.to/3fyFNwR)
- 焊锡丝:[购买链接](https://amzn.to/2ZDj5yc)

#### 第1步:认识SD卡
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/203734o5tv3oyoeagetaob.jpg

SD是Secure Digital的首字母缩写,它类似于你的Pendrive,但尺寸更小,价格更便宜。

SD卡与微控制器的连接有2种方式,分别是SDIO和SPI。大多数SD卡都具备许多标准功能,并且具有相同的物理和电气规格。SPI和SDIO之间的实际差异主要体现在软件层面。详细信息可前往[了解SD、SDIO 和MMC接口](http://uditagarwal.in/index.php/2018/03/17/understanding-sd-sdio-and-mmc-interface/)。

简单说就是SDIO更快但更难实现,SPI较慢但更容易实现。由于大多数微控制器默认支持SPI,所以我们就选择SPI吧。

以下是SD卡的SPI引脚定义:
Pin-1 - CS (片选)
Pin-2 - DI (MOSI)
Pin-3 - GND
Pin-4 - VCC
Pin-5 - SCLK
Pin-6 - GND
Pin-7 - DO (MISO)
Pin-8 - NC
Pin-9 - NC

#### 第2步:改装SD卡适配器
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/203734ymgkuokg9fik022k.jpg
["点击查看更多第2步的图片"](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=8864#pic_block)

你可以使用任何支持Arduino和ESP8266的SD卡模块,但对于本项,我们将使用MicroSD卡适配器,并将对它进行改装,改装后可以替代SD卡模块。

首先,清洁SD卡适配器的触点。接着将90度排针的插脚直接焊接到适配器触点上。焊接完成后,检查触点(插脚)之间有没有短路。然后一个一个地卸下黑色分隔块,以便把它放回原处时,它会与万能PCB板平齐。

裁剪万能PCB板使其与SD卡适配器完美匹配,且有一些额外的空间来安装USB接口。

虽然也可以不用SD卡适配器,直接对SD卡做同样的处理,但是风险很大,相当容易损坏SD卡。

#### 第3步:安装USB插头https://mc.dfrobot.com.cn/data/attachment/album/202007/20/203835ve5a8583brzlfj55.jpg
["点击查看更多第3步的图片"](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=8867)

我们将使用USB接口本身给SD卡供电。因此我们使用USB公头。USB通常有4个引脚,中间2个引脚用于数据传输,边上2个引脚用于电源和接地。由于我们只需要电源,所以剪掉数据引脚,只保留GND和VCC。

把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整合
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/203929n9jujf4hx3ms7cj9.jpg
[ "点击查看更多第4步的图片"](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=8871)

现在要读写SD卡上的数据,我们将使用ESP12E WIFI模块,虽然它比ESP32慢。但选择哪一个并不重要,我会在后面的步骤中说明原因。

首先将EN(使能引脚)焊接到ESP12E的VCC上,这是用来启动IC的。如果使能引脚没有连接到高电平信号,IC将不会启动。然后将ESP12E放在万能PCB板背面,将ESP12E的SPI引脚焊接到SD卡上对应的SPI引脚上。连接细节请查看电路图。

#### 第5步:比较HTTP和FTP
在学习编程之前,我对下载和上传的工作原理做了一些研究,那时我偶然碰到FTP这个词。FTP是文件传输协议(File Transfer Protocol)的首字母缩写,它是用来在服务器和客户机之间传输文件的,它与普通的HTTP协议完全不同,后者是用来在客户机和服务器之间发送请求和接收响应的,而且数据量非常小。

FTP在传输文件方面比HTTP快,因为它是专门为传输文件设计的。因此,在这个项目中我选择使用FTP。FTP服务器运行在ESP-12E上,我们可以通过这个FTP服务器跟SD卡进行数据推送与获取。

#### 第6步:挑战FTP库
我没有找到一个非常活跃的或者专门为ESP8266开发的FTP库。但是经过一番挖掘,我遇到了David Paiva,他将一个Arduino版本的FTP服务器移植到ESP8266,可惜它只支持SPIFFS,不支持SD卡。

终于功夫不负有心人,我发现有人付出努力把David Paiva的FTP库从支持SPIFFS转换成支持SD卡了。但是,当我尝试使用这个库时,遇到了两个问题。首先,我发现这个网页是[韩语的](https://trionking.blogspot.com/2017/02/esp8266-wifi-ftp-server-with-sd.html),所以我不得不坐下来一点一点翻译所有的东西,以便在我能实际使用它之前知道内部的工作原理。第二个问题是,我必须修改现有的SD库来引入他所做的更改,这让人感觉很笨拙。

于是我比较了一下这两个库,一个来自David Paiva,另一个来自韩国网站,然后做了一些小的改动,把所有代码整合到一个项目里,这样就不必再安装其它额外的库了。你可以从我的(https://github.com/Neutrino-1/Wireless_SD)帐户中查看项目的完整代码。

### 第7步:对ESP-12E编程
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/204058yip6406q5002ppn2.jpg

["点击查看更多第7步的图片"](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=8875)

由于ESP-12E没有内置的烧录器,因此我们需要使用一个外部的烧录器,比如FDTI模块。所以我用几根导线和排母插座制作了一个适配器,有了这个,我们可以临时焊接到ESP12E并通过FTDI模块进行烧录。

具体接线方法是:
GND连接到FDTI模块的GND
Rx连接到FDTI模块的Tx
Tx连接到FDTI模块的Rx
GPIO15连接到FDTI模块的GND
GPIO0连接到FDTI模块的GND
VCC连接到FDTI模块的VCC

最后,使用Arduino IDE上传Github上下载的代码。

一旦程序上传完毕,你就可以焊掉连接到ESP12E烧录器的导线。

#### 第8步:大功告成!
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/204141ve554pyg5o855ohz.jpg
["点击查看更多第8步的图片"](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=8876)

只需在适配器内插入MicroSD卡[最大32GB],然后将整个设备插入任一个USB兼容设备,这样就可以开启设备了!但是先别着急,还有一些事情需要注意,为了安全起见,要确保USB端口的输出电流大于1安培。因为ESP12E模块在传输文件时会消耗更多的电流。

#### 第9步:使用设备
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/204231btf0kdub5z5z90gz.jpg
["点击查看更多第9步的图片"](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=8880)

一旦通电启动,设备就会创建一个名为SD Reader的热点。使用写代码里的密码连接到此热点。然后根据连接到ESP12E的设备类型,下载相应的FTP客户端软件,如果您使用PC就下载WinSCP或Filzella,如果您使用安卓设备就下载AndFTP。

以安卓设备为例,安装完成后,打开AndFTP并填写账号密码,设置FTP客户端。对我来说,我保持代码中使用默认的用户名和密码“**ESP8266**”。所以,用户信息使用默认值,主机使用**192.168.12.7**。最后,连接到FTP服务器。

连接上后,就可以从SD卡下载任何文件,也可以将文件从手机上传到SD卡。

你可以观看[视频](https://www.youtube.com/watch?v=s3kLNe_z6iI)了解它是如何工作的!

#### 第10步:总结
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/204339aosoeszs6sus5fza.jpg
["点击查看更多第10步的图片"](https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=album&picid=8882)

在断定它是一个非常方便的设备之前,让我们来回顾一下。

虽然做到了我想要的功能,但它终究是缓慢的!对于4个文件(每个大约100Kb)大约需要30秒,如果您尝试使用10MB这样更大的文件,则需要大约3-4分钟才能完成。当然,传输速率还有一定的优化空间,从我之前提到的网页来看,作者能够获得大约450kbs的读取速度。(使用ESP32和SD MMC库传输速度可能约为1MB/s)

我之所以到此为止而没有尝试去优化它有两个原因。第一个原因,我真的很希望,除了FTP服务器之外,我还可以使用USB数据线来传输数据,但ESP8266或ESP32都不支持。第二个原因,我无法通过FTP传输文件获得足够的速度。这也是为什么我不费心用ESP32代替ESP12E的原因。

但我觉得如果我们能使用支持全速USB OTG的ESP32 S2板,这些问题应该可以解决。也许我可以在另一个教程中作此尝试。

#### 电路图
https://mc.dfrobot.com.cn/data/attachment/album/202007/20/203929bf88fu7647kk87f9.jpg

#### 完整代码
本地下载:或者前往作者(https://github.com/Neutrino-1/Wireless_SD)下载最新代码

> 英文链接:](https://www.hackster.io/Neutrino-1/wireless-sd-card-reader-esp8266-de7f07)
> 英文作者:(https://www.hackster.io/Neutrino-1) \[(www.youtube.com/Neutrino1), (https://github.com/Neutrino-1)]
> 中文翻译:(https://mc.dfrobot.com.cn/home.php?mod=space&uid=835443&do=profile)
> 未经许可不得转载

fibx 发表于 2020-7-21 16:55:14

附上英文作者的翻译授权

Mr Guo 发表于 2020-7-21 22:41:25

厉害了{:7_217:}

微笑的rockets 发表于 2020-7-23 10:47:08

这么一弄就有意思了,很多3d打印机就不需要拿个卡拷来拷去了,直接传过去就好了。

20060606 发表于 2020-7-23 12:20:30

这个能不能当网盘使用,替代某盘

DFHJM_IpFmV 发表于 2020-7-24 13:12:48

我cao,好厉害!{:7_220:}

#嘉诚欧巴# 发表于 2020-7-24 16:23:38

微笑的rockets 发表于 2020-7-23 10:47
这么一弄就有意思了,很多3d打印机就不需要拿个卡拷来拷去了,直接传过去就好了。 ...

DIY一个SD-wifi插座, 手撸wifi打印机

#嘉诚欧巴# 发表于 2020-7-24 16:29:25

20060606 发表于 2020-7-23 12:20
这个能不能当网盘使用,替代某盘

你说的可是家用NAS

gray6666 发表于 2020-7-26 15:24:24

{:7_216:}{:7_216:}{:7_216:}{:7_216:}{:7_216:}{:7_216:}

dsweiliang 发表于 2020-7-29 22:50:21

历经七年终于做出来了

发表于 2020-8-5 11:47:32

#嘉诚欧巴# 发表于 2020-7-24 16:23
DIY一个SD-wifi插座, 手撸wifi打印机

想法不错

佛系唐法官 发表于 2020-8-8 15:35:12

好厉害啊{:6_209:}

Df101 发表于 2020-8-13 13:11:49

{:6_215:}666

chenhanzhong 发表于 2020-8-24 14:36:39

这很牛逼哇!!!
页: [1]
查看完整版本: 无线SD读卡器[ESP8266]