ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Arduino IDE卡99%?ESP8266开发板安装代理与离线缓存方案

Arduino IDE卡99%?ESP8266开发板安装代理与离线缓存方案 先跟各位说个扎心的场景你满心欢喜打开Arduino IDE想给板子添加ESP8266开发板支持进度条一路稳到99%然后就像被拔了电源一样纹丝不动。你等五分钟、重启IDE、关掉杀毒软件、拔插几次USB结果都一样。这问题我这两年至少被问过几十次问的人里还有不少以为是开发板买到了坏板子。其实卡99%跟板子关系不大九成情况是IDE在下载工具链的“最后一公里”断了连接。这篇文章我不会让你去无脑重装软件而是把整个安装流程掰开揉碎讲清楚先告诉你卡99%到底卡在哪个环节再给你一套能在5分钟里跑通的代理配置方案外加一个“不用等进度条”的离线缓存技巧。公司内网、校园网、普通家庭宽带照着做基本都能解决。如果你手头已经有了一块ESP8266却发现一直装不上库或者想从零开始玩物联网这篇应该能省下你半天折腾时间。1. 卡99%的真相不是IDE死了是下载链路最后一公里出了岔子1.1 进度条停在99%时IDE到底在干什么Arduino IDE添加ESP8266开发板的过程表面上看是“下载并安装”实际上是三件事依次发生。第一步IDE去请求一个JSON格式的索引文件里面记录了开发板支持包的所有组件列表、版本号、下载地址。第二步IDE根据索引内容去不同服务器上下载真正的大块头包括编译器、工具链、烧录工具等。第三步把这些文件解压到Arduino的系统目录里注册成可用的开发板类型。大多数卡99%的场景都发生在第二步的结尾阶段。原因倒也不复杂IDE下载的这些工具链文件不是小打小闹光是xtensa的GCC交叉编译工具链就有小几十MBesptool这类烧录工具虽然不大但配合其他文件加起来也有不少体量。文件一大网络稍微抖一下、超时一下整个下载就停了。而Arduino IDE的下载机制又很“耿直”没有完善的断点续传一个文件没下全它就一直停在那边进度条卡在99%给你看。1.2 同样是卡99%不同网络环境原因还不一样我接触过的卡99%案例基本能分成三类。第一类是宽带本身访问官方下载服务器不稳定。Arduino的包默认放在官方域名和GitHub上这类服务器在国内部分网络环境下连接质量忽高忽低下载到一半超时很正常。第二类是校园网或公司网需要走认证代理。这类网络的特点是浏览器打开网页没问题但IDE这种客户端程序如果没有正确配置代理连接就会一直挂在半路。第三类比较冷门是杀毒软件或防火墙在后台拦截了IDE的子进程下载。杀毒软件会“礼貌地”放行前面的大部分请求等下载快要完成时突然把连接掐断表现出来也是卡99%。所以你看卡99%并不是一个单一的故障而是一类“下载中断”问题的共同表现。解决问题的关键是先定位你的IDE卡在了哪一类网络环节上再对症下药。2. 方案一在Arduino IDE里正确设置代理让网络通道先通起来2.1 找对入口Preferences里的Network配置项既然标题是“代理设置”那就先从官方的代理配置讲起。Arduino IDE早就在设置里留了网络代理的选项只是很多人装完软件从来没点开过。在Arduino IDE 1.8.x版本里点击菜单栏的File再选Preferences会弹出一个设置窗口里面有几块内容Settings、Network、Additional Boards Manager URLs。关键就藏在Network这块。如果是macOS用户入口在Arduino IDE字样的菜单里然后同样找Preferences。到了IDE 2.x版本界面风格变了入口在菜单栏的File Preferences或者用快捷键Ctrl 逗号打开设置面板再找到Network相关的选项卡。Network选项卡里通常有三个选项Use no proxy不使用代理、Use system settings使用系统设置、Manual proxy configuration手动配置代理。很多人不知道怎么选。如果你的电脑本身是公司统一配置了代理或者你通过系统设置已经能稳定访问外网那选Use system settings最省事。如果你手上有一份明确的代理服务器地址和端口那就选手动配置。都不确定的话可以先从“系统设置”这个选项开始试。2.2 手动代理怎么填关键字段别填错手动代理配置看起来简单但翻车的人不在少数。界面会让你填代理类型、服务器地址、端口有些版本还有用户名和密码。代理类型一般选HTTP即可Arduino IDE的下载走的就是HTTP/HTTPS协议。服务器地址有两种填法一是填域名比如proxy.company.com二是填IP地址比如127.0.0.1。注意域名前面不用加http://有些版本加了前缀反而解析不了。端口号要看代理服务实际监听的端口常见的企业代理端口有8080、3128抓包调试工具Fiddler默认用8888Charles默认也习惯用8888。如果你不清楚端口是多少问一下网络管理员或者看提供代理的人给你的文档。如果这个代理服务器要求身份认证界面里会有Username和Password字段照实填写就行。填完之后别急着点“确认”就以为完事了我的经验是改完代理必须完全退出IDE再重开一次很多版本不会在运行时热加载网络配置。你直接重开IDE等它重新初始化网络模块再重新触发开发板安装代理才会生效。2.3 没有现成代理这些合法场景下你能拿到可用的代理信息有些朋友看到“代理”两个字就头疼觉得又不是大公司哪来的代理服务器。其实代理在开发调试里很常见不只有企业IT才会用到。一种是公司内网和校园网环境。这类网络为了管控流量、做日志审计通常会给员工或学生提供一个统一的HTTP代理地址。你可以查看当前系统网络设置的代理项Windows用户在“设置 网络和Internet 代理”里能看到“手动设置代理”区域macOS用户在“系统偏好设置 网络 高级 代理”里能看到HTTP代理配置。如果你的浏览器在不做任何修改的情况下就能打开网页但IDE连不上八成就是你浏览器自动走了系统代理而IDE没设成“使用系统设置”。另一种是抓包调试工具。你在本机打开Fiddler或Charles这类工具它们会自动在127.0.0.1的某个端口开启一个HTTP代理用来记录电脑上所有网络请求。把Arduino IDE的代理指向127.0.0.1和对应的端口IDE的下载请求就会被这个本地代理接管。这不仅能解决一部分网络问题还能让你直观看到IDE正在请求哪些地址、卡在了哪个文件上排查问题会轻松不少。要提醒一句如果你确认自己的网络不需要代理就不要强行勾选“手动代理”。代理填错了反而会让原本能通的连接也连不上到时候IDE会直接提示连接失败比卡99%更好排查但也更让人着急。3. 方案二不折腾代理手动把工具链“喂”给IDE3.1 先找到那个下载了近一半的缓存目录如果试了几次代理发现你的网络环境根本没有可用的代理那就别在代理上耗时间了。这里有一个更土但极其有效的方法用浏览器下载工具链文件然后手动放进Arduino IDE的缓存目录让它“秒装”。Arduino IDE下载组件时会先把文件写进一个staging目录下载完成后从这个目录读文件、解压、安装。如果你在IDE下载卡住后去翻这个目录通常能找到一些残留的临时文件这就是IDE没下完的东西。关键点是路径。Windows系统一般在C:\Users\你的用户名\AppData\Local\Arduino15\staging\packagesmacOS通常在~/Library/Arduino15/staging/packagesLinux一般在~/.arduino15/staging/packages。不同版本IDE路径可能略有差异但Arduino15这个目录基本稳定。你可以在文件管理器里搜一下“Arduino15”或者用系统全局搜索直接查staging文件夹。打开这个目录如果里面躺着一些扩展名是.part、.tmp的文件而且文件大小还在变化说明IDE确实没死它还在挣扎着下载。如果这些文件的体积已经很大但好几分钟没变化了那基本就是网络彻底断了。这时候得先把这些半成品文件删掉注意是删除不要留着占地方否则后面会把IDE搞糊涂。3.2 浏览器下载神器用最熟悉的方式下完所有依赖接下来你要手动完成IDE没做完的事情。先从开发板管理器地址里找到JSON索引文件通常叫package_esp8266com_index.json。你在浏览器里打开这个文件会看到一大段JSON数据里面重点看每个组件的下载地址。最常见的几个下载项是xtensa-lx106-elf-gcc编译器、esptool烧录工具、mkspiffs文件系统工具。用浏览器逐个打开这些下载地址以IDE正在下载的那个文件名称为准下载到本地。为什么用浏览器因为浏览器下载有断点续传、有下载管理对网络波动的容忍度比IDE高太多。文件全部下好之后把它们一个一个复制到前面说的staging/packages目录里文件名必须保持和URL最后的文件名完全一致一个字母都不能差。然后回到Arduino IDE重新点击安装ESP8266开发板。IDE在安装前会先检查缓存目录里有没有对应文件发现文件已经完整存在就不会重新下载直接进入校验、解压、安装阶段。整个过程可能几秒钟就跳完了进度条从零直接蹦到完成那叫一个舒坦。3.3 为什么“喂文件”比配代理更靠谱从我自己的实操经验看手动把文件放缓存这种办法成功率几乎是百分之百因为它完全绕开了网络不稳定这个根源。代理只是优化了网络路径但如果网络本身对境外服务器不友好代理也未必能救得了。而手动下载文件你用的是浏览器断线了可以重新下下完了IDE也只是做本地文件操作不受网络影响。这个办法唯一麻烦的地方是需要看懂索引文件里有几个大件。不过你不需要全下先把最大那个编译器文件搞定卡99%的问题就已经解掉一半了。我建议你下完文件后顺手打开文件管理器看一眼每个文件的大小和JSON里声明的大小是否一致文件不完整照样会安装失败但至少不会再卡99%卡得那么憋屈。4. 方案三换开发板管理器地址让IDE走一条更稳的下载路线4.1 开发板管理器地址还能这么玩除了代理和手动缓存还有一个思路是换一个更快、更稳的索引下载源。Arduino IDE的Preferences里有一个Additional Boards Manager URLs输入框这里可以填多个JSON地址用逗号分隔。IDE会按你给的地址列表去下载索引选择速度最快、返回最及时的那一个。最常见的就是ESP8266官方地址http://arduino.esp8266.com/stable/package_esp8266com_index.json。如果你下载这个文件很慢可以试试Arduino官方CDN的地址https://downloads.arduino.cc/packages/package_esp8266com_index.json。这算是一种“换镜像”的思路不改变安装逻辑只是换条路上的车。更进阶的操作是直接使用本地文件端口。你先把JSON索引文件下载到电脑里然后在Additional Boards Manager URLs里填类似file:///C:/Users/你的用户名/Desktop/package_esp8266com_index.json的本地路径。这样IDE每次检查更新时直接从本地读取索引省掉了拉取JSON的等待时间。这个技巧特别适合那些装了多个开发板包、每次启动IDE都要卡半天的人。4.2 什么时候该换源什么时候别瞎换换源不是万能的。如果你卡在“下载索引”阶段换一个CDN地址确实有用。但如果你已经进入了组件下载阶段也就是进度条已经走到中后段那换源就有点晚了。因为索引文件只提供组件下载地址组件本体大多还是存放在GitHub releases或官方服务器上JSON换了地址也不能改变大文件的下载位置。所以我的建议是先把当前进度条卡在哪一步搞清楚。如果IDE日志显示正在下载的是某个几十MB的压缩包那就别折腾地址了直接走上一节说的手动缓存方案如果日志显示还在拉取索引文件那换源或者配代理都有机会救回来。另外Additional Boards Manager URLs不要填太多乱七八糟的第三方地址。每多填一个IDE启动和检查更新时就要多请求一次反而拖慢速度。只保留你真正需要的那一两个即可。5. 完整实操实录从卡死到烧录5分钟流程跑一遍5.1 第1分钟定位问题卡点与其盲目操作不如先花一分钟搞清楚IDE到底卡在哪。我的做法是先打开文件管理器找到Arduino15目录里的staging/packages文件夹看里面有没有正在增长的临时文件。如果临时文件的大小在变化说明IDE还在下载只是慢那你等一下或者考虑配代理来加速。如果临时文件已经好几分钟不变化说明连接彻底断了那就退出IDE把这个目录里的半成品文件全部清空。清空的同时记下当前IDE正在下载的最大那个文件名后面要用。这一步很重要很多人在网络上瞎折腾半小时结果卡住的文件早就在本地躺着了只是IDE没认出来。5.2 第2-3分钟下载文件或配置代理二选一接下来是两条路。如果你手头有可用的代理信息打开Preferences里的Network设置选Manual proxy configuration填上服务器地址和端口保存后重启IDE再重新触发安装。如果你的网络压根没有代理信息那就打开浏览器前往JSON索引文件里记录的下载地址把最大的那个工具链压缩包下载下来塞进staging/packages文件夹。我个人更建议先做手动下载这一步因为它不依赖任何环境信息所有人都能操作。哪怕你以后换了台电脑这个方法依旧通用。下载时留意一下文件大小是否和网页显示一致别下到一半浏览器自己停了。5.3 第4-5分钟重新安装并验证是否成功文件放好后切回Arduino IDE重新打开开发板管理器找到ESP8266 by ESP8266 Community点击Install。正常情况下IDE会跳过网络下载阶段直接开始校验本地缓存几秒钟后安装按钮变成Installed。到这步你的开发板管理器里就已经能看到ESP8266了。安装成功后顺手验证一下在菜单Tools Board里找到ESP8266开发板列表随便选一个型号比如NodeMCU 1.0然后在Tools Port里勾选你的串口。如果你用的是CH340芯片的板子记得装好CH340驱动如果系统里完全看不到串口大概率是数据线问题换成一条能传数据的线再试。确认串口出现后随便写一个Blink例程改一下引脚定义编译并上传。能顺利上传成功才说明整个环境是真的通了。6. 安装后的坑esptool.py连接不上怎么办6.1 开发板装好了但上传时报timeout到底哪错了环境装好之后紧接着就会遇到另一个高频报错A fatal esptool.py error occurred: failed to connect to ESP8266: timed out waiting for packet header。这个报错看起来吓人其实跟开发板安装没有半点关系纯粹是烧录环节出了问题。我解释一下原因。ESP8266芯片在上电运行用户程序时如果想进入烧录模式需要芯片在复位信号释放的那一刻检测到GPIO0引脚是低电平。很多开发模块上有一个FLASH按钮就是用来在烧录时把GPIO0拉低的。如果你上传时没有正确进入烧录模式esptool就等不到芯片返回的握手包于是报timed out等待超时。6.2 六个必查项直接抄着用遇到这个报错按顺序排查下面六项基本能覆盖绝大多数情况。第一检查串口是否选对。Windows设备管理器里看端口编号macOS或Linux下看/dev/ttyUSB0或/dev/cu.SLAB_USBtoUART之类的设备。第二确认CH340或CP2102驱动已安装。很多板子用的CH340芯片Windows 10以上系统通常自动识别但国产山寨板偶尔需要手动装驱动。第三上传时按住板上的FLASH按钮在IDE提示Connecting时松开。第四把上传波特率从115200降到9600或57600试试老系统或劣质数据线下低速更稳定。第五换一根确认支持数据传输的数据线很多充电线根本不通数据。第六给板子外接5V或3.3V稳定供电有些板子仅靠USB口供电电流不够也会导致握手失败。6.3 高频问题速查表我把这些问题整理成了一张表方便你直接对照排查。现象可能原因解决动作安装进度卡在99%工具链下载中断手动下载压缩包放入staging缓存目录安装卡在“Downloading index”JSON索引访问慢换CDN地址或使用本地file路径IDE报代理连接失败代理地址或端口错误确认代理类型为HTTP端口正确重启IDE上传报timed out未进入烧录模式按住FLASH按钮后再烧录设备管理器看不到串口驱动未装或数据线不通安装CH340驱动换数据线上传成功但板子无反应程序引脚或代码错误核对LED引脚定义检查供电这张表往后你大概率还会用到。尤其是“上传成功但板子无反应”这个很多人以为板子坏了其实只是例程里定义的引脚和板子上的LED不是同一个改一下代码里的引脚编号就好了。7. 最后的几点经验之谈再聊点题外话。我见过不少朋友在卡99%时第一反应是去下载各种“一键安装包”“绿化版IDE”这反而容易引入更多问题。Arduino IDE只是个壳子真正的安装动作是那个JSON索引引导的工具链下载你把网络通道理顺了官方原版一样能装上。配置代理这件事说简单也不简单。很多人填了代理之后IDE反而连原来的网页都打不开了这种情况大概率是把“使用系统设置”和“手动代理”混用了。遇到这种先把所有代理选项都关掉确认能正常联网再一步一步试不要同时开好几个设置。我还是那个建议先把浏览器当作你的下载神器把大文件“喂”给IDE的缓存目录这套办法在下一次遇到“卡99%”时依然管用。等你把开发板顺利点亮接下来就可以去折腾OTA远程升级、接入物联网云平台这些有意思的事了到那时你会在更多细节里体会到环境安装只是长征第一步后面还有数不清的坑等着你但每一个坑踩过去都是实打实的经验。
返回列表