项目和创意方向介绍
该项目属于物联网方向,因为在物联网DIY过程中会大量的使用到ESP32的模组,但是一旦遇到问题需要调试就会比较麻烦。因为一般来说,ESP32模组还需要少部分外围电路才可以正常工作。而且调试时需要USB-TTL串口模块才可以正常通讯。而市面上购买的串口模块基本都只是一个单一的串口,并不带有ESP32的外围电路,用起来会比较麻烦。因此,我打算自己设计一个调试用的通讯模块,实现直接连接ESP32后就可以正常编程。
项目设计思路及实现方法
由于对于部分ESP32模组封装,焊接起来不太便利,比如mini系列模组,手工焊接总是容易出现焊接不良的情况。这种时候无法烧录程序,连接不上电脑,就只能将模组拆下再做检查。因此这款调试器的设计需求是要包含所有ESP32正常工作所需的外围电路,同时由于我使用的是CH343P这款国产芯片,它支持电平自定义的功能,因此我还给他加上了电平选择,让它也可以用来烧录5V电平的arduino开发板。
方案框图和介绍
外围电路设计主要是自动下载电路。默认情况下可以直接启动ESP32内部的flash,让其正常工作。当下载程序时可以自动重置ESP32并进入下载模式。当然,手动重置与下载模式的按钮也会一并添加。
方案中使用到的指定厂商元器件
我计划在这个项目中使用Molex的USB TYPE-C接口来进行设计。
16Pin TYPE-C接口是目前最主流的USB-C插口,目前广泛应用于各类Type-C线材、各类充电设备的USB-C插口、普通配置的数码电器USB-C插口上等其他USB-C插口。
由于目前很多普通电子设备内置的MCU(MicrocontrollerUnit;微控制单元)都不支持USB3.0,只支持USB2.0,那么使用24Pin的TypeC很浪费,于是就有了16Pin的TypeC。
16Pin TypeC在24Pin的基础上阉割了USB3.0的TX1/2、RX1/2,保留了SBU1/2、CC1/2、USB2.0的D+D-,除了没有USB3.0/3.1高速传输外,其他别无二致,同样支持 PD快充、音频设备、HDMI传输、调试模式等功能。
原理图介绍
原理图使用了Molex的type-C接口连接电脑。供电使用的是3.3V LDO,这个供电仅给外部使用,串口芯片CH343P使用内置的LDO。VIO用跳线帽选择工作电平,而EN和BOOT引脚上拉同样接到VIO,而不是3.3V。主要原因是在对arduino进行编程时,也需要通过DTR引脚的脉冲来复位atmega芯片。因此这两个引脚并不完全是给ESP32使用的,所以电平应和串口电平匹配。
PCB设计介绍
调试器布线十分紧凑,其中5V和3.3V属于供电线路,因此使用了更粗的布线。同时板载还有两个按钮,方便手动进入烧写模式。两个三极管我选择了封装在一起的UMH3N,UMH3N内置了基极限流电阻,所以不需要配置任何外围部件就能直接用,很方便,也节省了很多板上的空间。
关键代码介绍
我用Arduino写了一个简单的测试程序,烧录完成后会打印出欢迎字样,然后可以检测boot按钮的状态,并在串口打印。可以通过烧录这个测试程序来判断调试器和ESP32模组是否在正常工作。
int pushButton = 0;
void setup() {
Serial.begin(9600);
pinMode(pushButton, INPUT);
delay(1000);
Serial.println("Hello EEtree!");
}
void loop() {
static int last_buttonState = 1;
int buttonState = digitalRead(pushButton);
if (buttonState != last_buttonState) {
last_buttonState = buttonState;
if (buttonState) {
Serial.println("Button Release");
} else {
Serial.println("Button Press");
}
}
}
功能展示图及说明
焊接好的成品还是非常精致小巧的,左上角用跳线帽选择通信电平。我这里选择的是3.3V.
我找了个ESP32-S3模组,用来测试调试器是否可以对单一模块进行编程。先把模块的串口,boot,en和供电地线接出来:
然后把这六根线一一插在做好的调试器上:
插上电脑,烧录程序。自动烧录过程一切正常,可以无需手动进入下载模式。烧录完后进入串口,通过按EN和BOOT板载按钮,可以看到对应的打印内容。
心得体会
通过参加FastBond活动,不但解决了我在日常调试中的需求,还可以和大家一起分享,同时获得活动奖励,一举多得,希望活动可以越办越好。