Hackaday.io上的树莓派项目-RPi WiFi
收藏
分享
脑图
Hackaday.io上的树莓派项目-RPi WiFi
关于项目
项目描述:使用 HAT 连接器和 ESP8266 的树莓派上的 WiFi。该项目的目标是将WiFi添加到树莓派零,同时保持USB端口免费的设备或OTG连接到其他主机。以下说明说明如何将 $2 ESP-12F 模块连接到任何需要少量焊接的 下一个 Pi,以及如何在 Raspbian 下将其工作。侧边栏有 KiCad 项目,提供灵感,是 ESP8266 SDIO 项目的起点。
项目图片
当树莓派零号被宣布时,黑客世界中相当一部分人认为它与其他 Pis 具有相同的致命缺陷:只有一个 USB 主机端口用于高速 I/O。
网络连接是人们围绕 Pi 或其他嵌入式 Linux 板进行项目的主要原因。2B 和 B+ 均具有板载 USB 集线器,提供 4 个 USB 端口和以太网接口,便于连接到有线网络或添加 USB WiFi 适配器。但是,A+和零没有这种奢侈。您需要一个外部集线器来获得相同的功能,这损害了大小优势,并造成难以操作的电缆混乱。
这是不幸的,因为其他嵌入式Linux板在类似的外形至少是50美元(英特尔爱迪生)。这些通常专为商业产品而设计,因此,黑客不友好的互连也需要一个突破板,进一步推动成本上升。更糟糕的是, 替代方案没有树莓派培养的在线支持社区。
零迫切需要的是不涉及 USB 端口的 WiFi 。
斯迪奥和哈茨
每个 Pi 的核心的 BCM283x SoC 都有两个 MMC 控制器。其中一个连接到 Pi 引导并运行其操作系统的 SD 卡插槽。另一个在很大程度上被忽视了,但在 HAT 连接器上作为 GPIOs 22-27 上的备用功能出现。最近的内核和引导 Blob 更改使这些引脚能够映射到也支持 SDIO 设备的 MMC 控制器。
SDIO 最初是 SD 规范的扩展,允许具有闪存存储以外的功能卡。某些 PDA 可以通过 SDIO 扩展为具有 WiFi 或摄像头。尽管智能手机通过集成这些通用功能扼杀了SDIO卡的市场,但总线仍作为 SoC 和 WiFi 模块之间的桥梁而运行。
在撰写本文时,树莓派的 rpi-4.2.y 分支很好地支持 HAT 连接器上的 SDIO 接口。只需生成并安装内核并编辑 /boot/config.txt 即可包含以下行:
dtoverlay=sdio,poll_once=false
这启用了 HAT 连接器上的 SDIO,并要求它在启动时轮询 SDIO 卡超过初始驱动程序探测器(稍后将对此进行更多探讨
进入鹰
在零的兴奋,我注意到一堆问题,使用廉价的ESP8266模块作为WiFi桥。通常,这些线程被某人杀死,因为说 SPI 接口会限制速度太多。幸运的是,这些问题使我记忆力大。
我记得这篇博文显示一个已声明的 ESP8266, 注意到在角落里印有 "ESP8089" 。帖子提到, ESP8089 是另一个 Espressif 部分, 一个商品 SPI 和 Sdio 到 Wifi 芯片。这让我想到,如果ESP8089和ESP8266是相同的模具,那么有一个很好的机会,一个ESP8266模块可以作为一个SDIOWiFi适配器在Pi上工作。
Espressif对ESP8089文档没有帮助,但一些谷歌把我降落在廉价的中国平板电脑世界的中心。这指向了特定基于 Rockchip 的平板电脑的内核树中的驱动程序,该平板电脑恰好具有 ESP8089 适配器,并尝试将驱动程序的较旧版本分解为独立模块,以在 SPI 模式下与 ESP8089 一起使用。
因此,有一个驱动程序,可能Pi和ESP8266之间的物理接口,但固件呢?
ESP8266 我们都熟悉通常从片外 SPI 闪存设备启动,并可以选择在 UART 上启动代码。如何启动 (UART vs SPI) 的确定是由 GPIO 在通电时绑带完成的。大多数 ESP 模块都设置在从 SPI 闪存或 UART 引导之间交替。这允许 UART 用于在连接到 PC 时将新固件下载到 SPI 闪存,并在不连接到闪存时从闪存中运行。但是稀疏的ESP8266文档确实提到了第三个SDIO启动模式,但是没有解释如何使用它。
事实证明,SDIO 引导是用于 ESP8089 的。驱动程序包含一些在头文件中编码的固件二进制文件,eagle_fwN.h。令人鼓舞的是,"Eagle"似乎在某些 ESP8266 文档中作为代号出现。此固件在检测到后由驱动程序下载到 ESP8089,之后 ESP8089 重新启动并重新连接到 SDIO。此重新连接是 SDIO 驱动程序需要"poll_once=false"的原因,否则在固件下载后不会检测到 ESP8089。
返回硬件
由于有各种ESP8266模块,我不是射频大师,我决定破解一个现成的模块,带出SDIO。所有可用的 ESP8266 模块都使用 SDIO 接口的所有六个引脚用于 SPI 闪存。这意味着需要从模块中删除 SPI 闪存才能访问 SDIO 总线。ESP-12E是理想的选择,因为它将 6 个 SDIO 信号分解为铸造,但它具有焊接下护罩,因此难以对闪光灯进行脱焊。流行的ESP-01没有屏蔽,但从PCB艺术张贴在网上也有GPIO15绑低通过QFN下的痕迹,使其无法启动到SDIO模式。我结束了与ESP-03,这是没有盖子,并带来了所有的GPIOs所需的启动模式绑在垫子上。
SDIO 接口上的一个切线:在 ESP8266 硬件用户指南的底部是一个示例示意图,演示如何使用 SPI 闪存将 ESP8266 与 1 位 SDIO 进行接口。在此示意图中,另一个 SPI 接口用于闪存的时钟、数据和 CS,而 SD_D2 和 SD_D3 将重新映射为闪存的 /HOLD 和 /WP。同时,其余四个 SDIO 引脚在较低的带宽 1 位模式下工作(SD_D1成为中断请求)。在 SDIO 引导模式下,此配置由 SD_D2 和 SD_D3 信号上的上拉和下拉选择,但没有任何可靠的文档。我在引导期间玩SD_D2SD_D3高或低,同时观看串行端口,这些表带影响"y"在"启动模式:(x,y)"字符串。然而,这与这个项目无关,因为我们不需要SPI闪存,这些应该只有从主机端的上拉4位SDIO。
硬件用户指南对 SDIO 信号有注释,建议所有六个信号上都有 200 欧姆系列端接电阻。我把它们内置到我的原型中, 以便如果需要, 它们可以被换掉。信号看起来不错,所以我会在未来的任何板上使用这些信号。
另一个 Espressif 文档"引脚列表"电子表格有一个覆盖所有引导模式的神秘页面。随着 MTDO / GPIO15 拉低,GPIO2 和 GPIO0 在通常的"闪光启动"(SPI)和 UART 之间进行选择,以及未记录的"重新映射"和"跳转启动"。随着 Mtdo / Gpio15 拉高, Esp8266 靴子从 Sdio 。在 SDIO 引导中,GPIO0 和 GPIO2 选择 SDIO 总线模式的四个选项之一。我不知道"V1"和"V2"I/O是什么意思,但实验表明,"低速"是25MHz时钟,而"高速"是50MHz。理想的捆扎, 我使用的, 有 GPIO15, 0 和 2 拉高由内部上拉。换句话说,没有连接。
CHIP_PD需要拉高才能使芯片工作。我怀疑这通常是连接到主机 SoC 上的 GPIO 来禁用接口,可能通过内核"rfkill"驱动程序运行。原始 ESP8089 驱动程序代码具有一些功能,这些函数切换了某些 GPIO(大概CHIP_PD),以使芯片在驱动程序重新加载时清除状态。我最终将调查连接到 CHIP_PD HAT GPIO 引脚的接线,并修改驱动程序以做到这一点,因为一旦 ESP8089 运行下载的固件,模块无法加载。
项目文件
项目组件
1X   ESP-12F
1X   树莓派
6X   33 欧姆电阻器
1X   2x20 帽子连接器(可选)
1X   坚持 Esp - 12f 的东西
最近,Raspbian 从基于 4.4 的内核切换到 4.9 内核,这一直是一段时间的常态。这打破了 esp8089 驱动程序。如果您的 esp8089 模块在贴切升级后不再加载,这可能是问题所在。
谢天谢地, github 上的 den4ix 今天上午发布了一个拉取请求, 更新了 4.9 的 API 。修复程序位于今天下午发布的最新的 Debian DKMS 软件包中。
若要更新驱动程序,请从 github 下载新的 esp8089 DKMS 包,并安装在旧包的顶部:
wget https://github.com/al177/esp8089/releases/download/1.9.20170510/esp8089-dkms_1.9.20170510_all.deb
sudo dpkg -i esp8089-dkms_1.9.20170510_all.deb
安装包后重新启动以重新加载 esp8089 驱动程序。
现在树莓派零 W出来了, 没有太多的理由使用 Wifi 裤子板。零 W 更紧凑、更便宜,并且拥有开箱即用的 Raspbian 支持 WiFi。也是蓝牙。
在过去的几周里发生了很多事。最大的新闻是,Espressif 已经同意允许他们的 ESP8089 驱动程序根据 GPLv2 和关联的二进制 Blob 固件下许可,并置于 Apache 许可证下。现在,为这个项目以及许多平板电脑设备的驱动程序可以提交到Linux内核中。一些嵌入式Linux爱好者已经加紧清理代码,并推动它通过内核补丁提交过程。感谢Jeroen@Espressif获得批准,以及自由电子人,jwrdegeode,诺亚威廉森和冰诺伊,他们正在进行的工作,使驱动程序内核准备。
大约两周前,我卖掉了库存中最后一个成品的WiFi裤子套件。我也用完了我的长交货时间组件: PCB, ESP 模块, 和长堆栈通过头。我将做另一个运行的工具包,应该在几个星期内的股票,但那些消失后,这将需要几个月的时间来建立任何更多。
最后,我很幸运地参加了第一个哈卡迪电视闲逛,并谈了几分钟关于我的项目与苏菲克拉维茨和利莫尔弗里德,并听到一些真正整洁的Pi黑客。但是,当我兴奋地漫谈我的WiFi裤子项目,我忘了指出演示,我放在一起炫耀WiFi裤子板的电源。你可以在视频闪烁的我身后的长凳上看到它。
看哪, 接入点嗅探器的东西与 Led 在果冻罐, 我还没有考虑命名, 直到正确的这一刻, 或 Apstwljthcnurtm 简而言之:
它是一个 WS2812 LED 条在一个罐子中,根据该地区 WiFi 访问点的数量和强度更改模式。它使用 60 LED WS2812 条,WiFi 裤子,Pi Zero,3 AAA NiMh 电池,果酱罐,从包装的塑料管为 USB 充电器,大量的透明包装胶带,一些热胶,和一个WS2812级换档板与垃圾盒位。软件在 Python 中rpi_ws281x与 LED 和应用程序iw_parse以简化 AP 扫描。
每秒钟左右,Pi 都会扫描可用的网络。网络按信号强度排序,并分配每个 4dB 信号强度的 LED。每个接入点通过将最后 3 个八位字节(非 OUI 部分)散列成色调和饱和度来获取自己的颜色。在gif的底部可以看到,朝向罐子底部的LED颜色更均匀,变化不多,而信号较弱的SP在进入和出范围时,会随着颜色的扩大而向顶部移动。
花费在此时间的总时间约为 5 小时。我想,在全亮度加上Pi和ESP8266的字符串将推近2A限制的升压转换器,使它一个很好的演示。然而,全功率的LED饱和了我的摄像头,使罐子看起来像是充满了燃烧的镁,所以它被限制在1/8的亮度。这可能是最好的,因为AAA电池在全LED电源下下垂太多,跟不上4A左右的转换器拉到极限。
昨晚, 我签入了esp8089 驱动程序的更改, 该驱动程序自动切换 Gpio 在 Esp 上的重置 (CH_PD) 。有了这个变化,ESP黑客基于这里的说明将自动出现在启动期间没有任何脚本或外部重置电路。这也会在模块卸载时发出重置,这样在软重新启动(在命令行上重新启动等)后检测到 ESP,并在重新加载时防止模块在重新加载时停止 OOPSing,而无需重新重置。
项目说明已更新以反映此更改。如果您以前在 ESP (rc.local) 的 init 脚本中添加了 sysfs GPIO 或模块卸载命令,则需要将它们拿出来。驱动程序默认为 GPIO0(ID_SD WiFI 裤子使用),但您可以使用主板使用的 GPIO 编号传递 esp_reset_gpio 模块参数。只要目标具有内核 GPIO 驱动程序,这应该是与平台无关的。
驱动程序仍然不理想,因为每次 Pi 内核更改时都必须重新生成驱动程序。在其他基于 Debian 的系统上,这可以通过 dkms 进行处理,但 Pi Foundation 的非基于包的内核方案使其变得困难。当然,我有一个构建过程来帮助这一点,但这依赖于网络连接,并变得不愉快的零。一种解决方案是针对每个 Pi 内核版本构建驱动程序,并按内核的提交哈希(如 rpi 源)对它编制索引。如果有人有廉价(或免费)二进制版本托管服务的想法,我会开放设置一个自动构建服务器。
钉子的测试夹具 / 床来得很好。I OpenSCAD 为 DUT 安装和保留夹,通过一些归档和钻出 PCB,DUT 和 pogo 引脚可靠排队,DUT 保持原位。巧克力块端子条连接到 PSU,让我夹紧到一次性 DMM 探头。DMM 需要使用奇怪的迷你香蕉插头的测试引线,因此,我只需将探头夹在端子中,而不是尝试定制电缆。它们仅用于电压测量,因此这很好。一些更多的钻孔,支架,和电源插孔,为Pi A+ 单独供电圆出夹具。
输出负载只需 8x 20 欧姆功率电阻器,并联 0.4 欧姆,在 5V 时提供 2A。他们得到一点点烤面包, 但似乎不需要主动冷却。
要在接下来几天内修复的一些错误:
我看到 DUT 的输入电压比夹具的 DMM 高得多,因此我会尝试做开尔文感应器,然后将单独的导线从端子块运行到输入导轨的 pogo 引脚。不幸的是,只有一个pogo引脚馈送输入到DUT,所以我可能不会看到实际电压,除非我重新设计PCB与一个专用的测试板的输入。
此外, 调节器变得过热, 比我在原型构建上测试它时更热。大部分的加热都是用从后到地面泛洪的,我的安装框架设计在DUT后面有一个坚实的填充,除了pogo引脚在哪里。我目前正在重印这个与更多的区域下暴露的部分和一点点发泄对一侧, 试图让切换器自然冷却。
电阻负载按计划工作,只是由于导线损耗,它略低于我想测试的 2A 点。因此,我可以添加另一个电阻器并行,以接近2.25A,这应该使足够的测试裕量。很容易, 因为我有一大袋备件。
我钻了三个支架的孔来支持夹具, 但意识到我定位的 pogo 引脚太接近边缘之一的角落。需要找到一个定位销或热胶水的东西。
我把一个开关从我的垃圾箱在板上,这样我就可以关闭DRT之间的Pi,但开关是片状的,并切断电源在丝毫触摸。它目前被卖空, 但我最终会得到一个替代品。
最后一个错误应该是显而易见的: 我看到 Wifi 上的吞吐量低于我的原型版本。当使用 Pi 的接头上小心地使用相同的 DUT 时, 我看不到这一点, 所以可能是我与接地层一起限制信号的花哨的回收板。只要我看到单位之间的一致行为, 没关系。
现在,我第一次小跑板的部件都坐在我长凳上的一个盒子里,我已经建立了一个测试板。这就是我打算出售的
标题未通过设备运输,以允许不同的装配选项并简化包装。忽略接头上的塑料空间,因为它可以被移除。我不在一个地方库存一吨不同的选项, 所以如果你想在零下面安装这个, 你需要找到一个不同的标题。
根据其他人的建议,我将出售三个工具包:"满"与上述一切,"基本"只填充在PCB上的WiFi,包括所有头,除了JST,和一个裸露的PCB。
虽然我手头有材料来加工板材,但我需要在生产开始前使用一个关键工具。我希望这些板套件在客户焊接在一起后工作,因此我正在研究一个测试夹具,用于通过他们的步伐运行 SDIO 接口和电源。经过多年相处没有真正的板凳供应,我投资了一个很好的Korad 30V 5A可编程线性,我可以与一堆功率电阻器一起运行5V输出到2A在各种输入电压,并测试欠压锁定。上周末, 我还从 Fry 的一些廉价 Dmms 买了一个粗略的输出电压检查, 以及一些杂项的零碎的零碎的东西放在一起。我打算客户使用这个板来运行电机,LED,和其他当前吸油外设,所以我希望每个板在负载测试。
最终,我将有一个打印框架的PCB和站立,以采取负载的Pi下面。我计划这个周末有这个工作, 并开始启动板。
我不能给任何估计, 什么时候将上市。三月特别忙,我几乎没有空闲时间去工作,四月也变得更相同。但我正在取得进展,我将继续在这里分享。
同时, 享受我凌乱的长凳的照片:
分支主题
到目前为止, 我一直在订购 OshPark 快速转向原型板, 因为它们很便宜, 体积非常低。对于最初的裤子运行, 我去了Elecrow在中国从我听到的好评。我上周下订单 50 裤子板与 3 天航运到美国。
Dhl 刚刚通知我, 我应该期待他们在星期二。但我完全没有准备我没有模具, 我错过了一些更昂贵的部分, 我还没有设置一个 Tindie 帐户, 我还没有想出航运或包装, 我还没有一个测试夹具建立, 我的长凳是一个烂摊子!我不知道为什么, 但我没想到 50 多氯联苯将被制造, 运到半个世界, 并在 10 天内交货!
更新 - 这里是:
步骤 1:硬件
您需要 6x 33 欧姆电阻(通孔或 SMT)、一些导线和 ESP-12F 模块。
ESP-12E 的一些变体也应该工作,但有些型号没有 GPIO9 和 GPIO10 引脚连接到边缘,而另一些型号的引脚与此处列出的引脚不同。从我可以告诉只有一个变种的ESP-12F(标签"ESP-12-FQIO L4"的背面),所以这是一个更安全的赌注。ESP-12F 还具有跨输入电源的板载 10uF 电容器,因此您不必自己添加一个电容器。
你可能想要安装ESP-12F的东西。佩尔板是好的, 就像纸板或只是双面泡沫胶带在 Pi 的背面。无论您使用什么,请确保天线或范围下没有任何功能会大大减少。ESP-12F LED 是开始此保持区域的一个很好的标志。
我在手工制造的电路板上使用室外双面泡沫胶带,因为它很难重新定位,并且将模块提升到足以不短于板。创造性地应用热胶或环氧树脂推杆可能工作得很好。
步骤 2
在 ESP-12F 或 -12E 和树莓派帽子之间进行连接。使电线尽可能短,并尽量减少它们相互交叉的时间。如果您使用的是磁线或 Kynar(标准问题蓝线),您可能想要使用较重的 3.3V 和 GND 仪表。 理想情况下,6 SDIO 信号的线长度应该相同,但即使是几英寸的差值也无关紧要。如果可以,SD_CLK保持接近其他电线的平均长度。
SDIO 信号(以"SD_"开头的名称)应具有 33 个欧姆电阻(在 Pi 和 ESP-12F 连接之间)。它可能与其他稍大的值一起使用,或者没有任何电阻。
如果使用 1 位 SDIO 而不是 4 位,请省略 D2 和 D3。不过, 这没有太多的理由。
模块附近的 3.3V 和 GND 之间可能需要 10uF 或更多电容,但合法的 ESP-12F 已具有 10uF 电源上限。
像这样连接它:
请注意,CH_PD信号连接到ID_SD信号。这必须映射为 GPIO (GPIO0), 并切换到输出和低驱动, 然后再次切换到输入之前加载驱动程序, 以便重置模块。这将在不久的将来在驱动程序中添加。
上面的 ESP-03 列是为想要使用 ESP-03 模块的人而使用的。这需要焊接到SPI闪存芯片的引脚的一些信号。SPI 闪光灯可以先脱光,也可以留在就位。
步骤 3:软件
从 2016-05-10 或更晚的 Raspbian SD 新图像开始。
Raspbian 的初始安装需要连接到 Pi 以获取依赖项以生成驱动程序模块。这可能是型号 B Pi 的板载以太网、受支持的 USB 以太网或 USB-WiFi 适配器,或者通过 USB 通过另一台 PC 连接的 Pi Zero 。
步骤 4
以"pi"登录并安装先决条件包以生成驱动程序。
步骤 5
将行"dtoverlay=sdio,poll_once关闭"添加到 /boot/config.txt,或替换任何现有的"dtoverlay=sdio"行。
如果您使用的是 4 位 SDIO(可能是 4 位 SDIO),请运行此操作以设置启动配置:
如果您使用的是 1 位 SDIO,请改为使用它(或者 WiFi 驱动程序在加载时会崩溃):
步骤 6
如果您没有使用 ID_SD (GPIO0, HAT 引脚 27) 作为 CH_PD GPIO,请通过 modprobe.d conf 文件为内核模块提供正确的模块。将下面的"5"替换为正确的 GPIO 编号。
如果您使用 WiFi 裤子板,请跳过此步骤,因为它使用默认的 GPIO0。
sudo sh -c 'echo "options esp8089 esp_reset_gpio=5" > /etc/modprobe.d/esp.conf'
步骤 7
重新启动以加载更新的内核并激活 SDIO
sudo reboot
步骤 8
重新启动后,登录并获取 esp8089 的 DKMS 包:
wget https://github.com/al177/esp8089/releases/download/1.9.20190603/esp8089-dkms_1.9.20190603_all.deb.gz
gunzip esp8089-dkms_1.9.20190603_all.deb.gz
步骤 9
安装包(如果不同,请从上面的 wget 中子文件名):
sudo dpkg -i esp8089-dkms_1.9.20190603_all.deb
每次 Raspbian 安装新内核时,都会自动重新生成并安装此包。
步骤 10
加载驱动程序。
sudo modprobe esp8089
步骤 11
检测到您的 ESP 后,请尝试扫描本地 AP 以查看其工作正常:
sudo iwlist scan

评论

0 / 100
查看更多
1503881740
2020-08-26
833
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号