ESP32-S3 开发板配套物联网扩展板的设计与制作

在完成之前的 《ESP32-S3 最小开发板》 之后,想到很长一段时间,都是用 ESP32-S3 做物联网相关的应用。在这过程中,又会碰到一些会经常重复使用的模块,例如 LCD 屏幕、I2C 外设等,这个时候如果有一个现成的扩展板,就可以省去很多通过杜邦线连接模块的时间,提升应用开发效率。

在做完 ESP32-S3 最小开发板之后,我就根据自己的需求,并且参考了一些其他扩展板,开始设计一个主要用于物联网领域的扩展板。

设计目标

和 ESP32-S3 最小开发板一样,为了使初学者更容易使用,这次的扩展板也会基于容易焊接的前提去规划,主要使用 0805 元件和 2.54mm 排母插件,其中多数元件以模块的方式来引入,这样可以在淘宝购买对应的模块直插,避免在模块的电路设计上花费太多时间。

整个扩展板以输入模块、输出模块和总线模块三部分组成,对应到物联网开发中的大多数展示以及交互场景。

输入模块

  • 5 个用户按键
    • 接受用户输入,可以作为方向键,也可以模拟鼠标移动和按下操作
  • 多功能按键
    • 常见的手持设备,会提供一个多功能按键来实现向上、向下、按压三种操作
  • TF 读卡器
    • 用于数据文件的保存和读取

输出模块

  • LCD 屏幕
    • 显示界面和数据
  • WS2812 LED
    • 状态指示,灯光效果

总线模块

  • I2C 总线
    • 常见传感器模块都支持 I2C 通信,需要支持多个 I2C 模块同时连接
  • SPI 总线
    • 和屏幕或者 TF 读卡器模块进行通信

功能设计

整体原理图

esp32-hat-schematic-full.png

输入模块

5 个用户按键

esp32-hat-schematic-user-buttons
esp32-hat-render-user-buttons

作为常见的用户输入途径,扩展板设计了 5 个用户按键,使用五向按键布局,这样在一些场景中,可以模拟鼠标的移动和按下操作。

因为是和 ESP32-S3 配合使用,ESP32-S3 的 GPIO 内置了上拉电阻,可以通过 pinMode(GPIO, INPUT_PULLUP) 方式启用,因此在 PCB 上直接将 GPIO、按键、地连接。

按钮按下时,GPIO 将读到低电平,这时可以处理相应的按键事件。

为了减少电路复杂度,没有增加消抖电容,可以使用软件方式消除抖动。

多功能按键

esp32-hat-schematic-multi-button
esp32-hat-render-multi-button

一些常见的手持小设备,会使用多功能按键来实现全部导航操作,并且多功能按键使用上也比较方便和简单。

这里扩展板使用了 ALPS SLLB120200 多功能按键,它提供了两段的向上或向下拨动检测以及按下操作支持,基本上可以满足大多数场景的导航操作。

多功能按键的原理和编码器不一样,它的原理跟轻触开关一样,都是通过单个 GPIO 的电平来检测状态,因此这个多功能按键会占用 5 个 GPIO。

同用户按键一样,多功能按键也使用内置上拉电阻,按下时低电平的方式来检测。

TF 读卡器

esp32-hat-schematic-tf-card
esp32-hat-render-tf-card.

之前做的 ESP32-S3 模块虽然选择了 N16R8 型号, 拥有 16MB Flash,但是在一些需要大容量存储的使用场景,16MB 存储还是不太够用,因此引入了 TF 读卡器模块,这样可以随意扩展存储大小,在读写库兼容的情况下,可以扩展到 64G 等。

使用 SdFat 库即可完成 FAT16、FAT32 以及 exFAT 分区文件的读取和写入。

TF 读卡器模块使用 SPI 连接到 ESP32-S3,在 40MHz 的速率下,读写速度可以到达 1MB/s 左右,可以满足大多场景的读写速率要求了。

注:读写速度测试参考 https://esp32.com/viewtopic.php?t=26152

电池电压 ADC

esp32-hat-schematic-battery-adc
esp32-hat-schematic-battery-adc

扩展板提供了一个 PH 2.0 接口,用来连接电池,但是因为电池供电需要额外补充充放电电路,会增加扩展板复杂度,因此这里仅保留 ADC 能力,不提供使用电池给 ESP32-S3 开发板供电的能力。

通过这个接口连接电池后,即可使用 ESP32-S3 的 ADC 来读取电池电压,这里使用了两个 100K 电阻进行分压,因此实际电压需要通过乘以 2 来获取。

输出模块

LCD 屏幕

esp32-hat-schematic-tft-lcd
esp32-hat-render-tft-lcd

屏幕是移动设备与用户交互最常见的外设了,这里采用常见的 ST7789V 驱动 TFT LCD 屏幕,使用 SPI 总线通信。

ESP32-S3 在不使用 IOMUX 的情况下,SPI 最高可以运行在 80MHz,对于常见 320x240 分辨率的 LCD 来说,在使用 16 位色深的情况下,全屏刷新可以跑到 60 FPS,可以满足绝大多数场景的使用了。

其中通过 LCD_BL 引脚,可以使用 PWM 来控制 LCD 背光的亮度,例如在 Arduino 中可以通过 analogWrite(LCD_BL, 128) 来设置 LCD 背光亮度为一半亮度。

扩展板通过 2.54mm 排针座来连接 LCD 屏幕,引脚顺序按淘宝上常见 ST7789V 模块引脚顺序来定义,引脚顺序从左到右为:

GND VCC SCL SDA RST DC CS BL

为了便于反向安装屏幕,扩展板也提供了引脚顺序相同,方向相反的排针座。

0.96寸 12864 OLED

esp32-hat-schematic-oled-12864
esp32-hat-render-oled-12864

0.96寸 12864 OLED 也是常见的屏幕外设,在一些要求不高的场合,例如显示少量状态等,是一个比较好的选择,并且功耗相比 LCD 要低不少。

扩展板使用 I2C 接口的屏幕模块,提供 2.54mm 排针座来连接,引脚顺序也按淘宝上常见的模块来定义,引脚顺序为:GND V3.3 SCL SDA。

对于单色 OELD 来说,I2C 的频率跑在 Fast 模式 400Kbits/s 的速率下,即可获得 48 FPS 的刷新速度,也基本满足大多数场景的使用需求。

WS2812 LED

esp32-hat-schematic-ws2812
esp32-hat-render-ws2812

WS2812 相比传统的 6 脚 RGB,更节省 MCU 的 IO,只需一根数据线就可以控制颜色和亮度,并且多个 LED 还可以串联,组成 LED 阵列,实现各种灯光效果,因此扩展板也加入了 WS2812 LED 阵列模块。

蜂鸣器

esp32-hat-schematic-buzzer
esp32-hat-render-buzzer

蜂鸣器可以作为警告提示等用途。

总线模块

SPI 总线

SPI 总线是常见的外设通信总线,在 ESP32-S3 中不使用 IOMXU 时频率可以运行在 80MHz,使用 IOMUX 时可以运行在 40MHz,扩展板中分别连接了 LCD 屏幕和 TF 读卡器,因此没有提供额外的 SPI 总线排针座。

在不使用 LCD 屏幕的情况下,也可以通过 LCD 排针座来连接 SPI 总线外设。

I2C 总线

esp32-hat-schematic-i2c-bus
esp32-hat-render-i2c-bus

常见的传感器模块,很多都是采用 I2C 通信,例如温湿度、气压、光照强度等传感器,因此扩展板通过 2.54mm 排针座提供了 3 组 I2C 接口。

参考淘宝上的传感器模块设计,引脚顺序使用了常见的 V3.3 GND SCL SDA。

如果碰到引脚顺序不一致的模块,也可以通过杜邦线连接。

最终 PCB 产品

在打样时 TF 读卡器模块的 CMD 引脚连接错误,通过飞线解决了,开源项目中的 PCB 已经为正确版本,可以放心打样。

这里演示了使用 Si7021 模块获取当前温度,通过 I2C 总线进行通信,因为模块引脚顺序与扩展板引脚顺序不一致,因此通过杜邦线重新连接了。

ESP32S3扩展板.jpg

开源项目

这个项目中的 ESP32-S3 开发板和扩展板均已在立创开源平台开源,可以直接使用立创 EDA 编辑查看,或者下单 PCB。

项目名称:ESP32-S3-WROOM-1 开发板

项目链接:https://oshwhub.com/wandaeda/dan-pian-ji-esp32-s3-kai-fa-ban

该项目中同时包含了 ESP32-S3 最小开发板和当前展示的扩展板,可以直接通过嘉立创打样服务下单制作。

发表评论?

2 条评论。

  1. 您好,这些外设的驱动是自己写的还是有现成的?

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>