最近一段时间都在玩ESP-01模块,它长这个样子
有一颗ESP8266EX芯片,外部有1MByte的FLASH。玩它的原因是,价格便宜最低的见过4元多点还包邮,最大能有4个IO口,能连接WIFI。
编程使用VSCODE+PlatformIO,感觉编译速度比Arduino IDE要快很多。
为了下载程序,在今天之前就是自己用洞洞板焊了一个小板子,板子上带2个按键,1个2*4P的排母,一个4P排针。原理图如下,实物就不放照片了,太丑
一般下载流程:点击VSCode底部工具栏里面的“PlatformIO:Upload"(一个向右的箭头),趁着编译的空档,先按住SW1(拉低IO0),然后按下SW2并放开(拉低CHIP_EN再让它恢复成高电平,让ESP8266重启),然后放开SW1,这样ESP-01模块上的ESP8266EX芯片就进入了下载模式。
如果没配合好,手速慢了,或者忘记了,就会收到一个错误提示:A fatal error occurred: Failed to connect to ESP8266: Timed out waiting for packet header
*** [upload] Error 2
前几天厌倦了这样的手工下载方式,决定去做一块自动下载的小模块,原理图如下:
器件很少TYPEA公头1个,AMS1117-3.3V一颗,CH340C一片,BC847BS一颗(双NPN三极管),10K*4排阻1颗,10uf电容2颗,0.1uf电容1颗,2*4排母1个,自觉手残如我应该能焊接好,于是信心满满地下单做PCB了。
等待了差不多四天,收到了PCB板子,三下五除二焊接好器件,就迫不及待地插上esp-01模块测试了。
不出意外地收到了前面的错误提示。
排查过程大致如下:
1、检查BC847BS的六个管脚是否都焊接好了;
2、检查排阻有没有短路;
3、检查BC847BS的2、4两脚到1、6,3、4的压降是否为0.7V左右;
4、用逻辑分析仪检查IO0和CHIP_EN是否正常被拉低。
到这个第4步发现问题了,整个下载过程,这两个脚只有IO0被正常地拉低了,CHIP_EN一直为高。
5、检查CH340C的RTS#和DTR#两个管脚,发现开始下载后,一直为低电平,直到下载报错。
6、找下载脚本esptool.py,说明一下,因为我开发电脑上安装了Arduino IDE,我第一次找到的就是这个的,所以一直都没搞对。
7、检查esptool.py脚本,找到_connect_attempt函数
注释很清楚,动作也没问题,先拉高DTR,同时拉低RTS,结合最上面的原理图,这一步就代表着让CHIP_EN处于低电平,IO0为高电平。
为啥我的实际情况就不是这个样子呢?
各种思考、各种测试,直到我把mode这个参数打印出来,才发现它居然是no_reset,完美地避开了DTR和RTS两个设置。
好吧,继续找这个no_reset在哪里设置的。找了一圈,没找到;百度了几个小时,没答案。
在电脑的硬盘上到处翻目录的牌子,直到我翻到了它
这个目录里面的就是描述各个ESP8266板子的参数文件,我用的是esp01_1m,所以打开它,看看有点啥
哟,这不是resetmethod吗,它原本是写的"ck",不知道是啥意思,我去看看其它的板子,很多都是nodemcu,改成它。
下载,舒服~~。
话说,有人能说说,这个”ck"是啥意思不?