文章目录
在完成之前的 《ESP32-S3 最小开发板》 之后,想到很长一段时间,都是用 ESP32-S3 做物联网相关的应用。在这过程中,又会碰到一些会经常重复使用的模块,例如 LCD 屏幕、I2C 外设等,这个时候如果有一个现成的扩展板,就可以省去很多通过杜邦线连接模块的时间,提升应用开发效率。
在做完 ESP32-S3 最小开发板之后,我就根据自己的需求,并且参考了一些其他扩展板,开始设计一个主要用于物联网领域的扩展板。
设计目标
和 ESP32-S3 最小开发板一样,为了使初学者更容易使用,这次的扩展板也会基于容易焊接的前提去规划,主要使用 0805 元件和 2.54mm 排母插件,其中多数元件以模块的方式来引入,这样可以在淘宝购买对应的模块直插,避免在模块的电路设计上花费太多时间。
整个扩展板以输入模块、输出模块和总线模块三部分组成,对应到物联网开发中的大多数展示以及交互场景。
输入模块
- 5 个用户按键
- 接受用户输入,可以作为方向键,也可以模拟鼠标移动和按下操作
- 多功能按键
- 常见的手持设备,会提供一个多功能按键来实现向上、向下、按压三种操作
- TF 读卡器
- 用于数据文件的保存和读取
输出模块
- LCD 屏幕
- 显示界面和数据
- WS2812 LED
- 状态指示,灯光效果
总线模块
- I2C 总线
- 常见传感器模块都支持 I2C 通信,需要支持多个 I2C 模块同时连接
- SPI 总线
- 和屏幕或者 TF 读卡器模块进行通信
功能设计
整体原理图
输入模块
5 个用户按键
作为常见的用户输入途径,扩展板设计了 5 个用户按键,使用五向按键布局,这样在一些场景中,可以模拟鼠标的移动和按下操作。
因为是和 ESP32-S3 配合使用,ESP32-S3 的 GPIO 内置了上拉电阻,可以通过 pinMode(GPIO, INPUT_PULLUP) 方式启用,因此在 PCB 上直接将 GPIO、按键、地连接。
按钮按下时,GPIO 将读到低电平,这时可以处理相应的按键事件。
为了减少电路复杂度,没有增加消抖电容,可以使用软件方式消除抖动。
多功能按键
一些常见的手持小设备,会使用多功能按键来实现全部导航操作,并且多功能按键使用上也比较方便和简单。
这里扩展板使用了 ALPS SLLB120200 多功能按键,它提供了两段的向上或向下拨动检测以及按下操作支持,基本上可以满足大多数场景的导航操作。
多功能按键的原理和编码器不一样,它的原理跟轻触开关一样,都是通过单个 GPIO 的电平来检测状态,因此这个多功能按键会占用 5 个 GPIO。
同用户按键一样,多功能按键也使用内置上拉电阻,按下时低电平的方式来检测。
TF 读卡器
之前做的 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
扩展板提供了一个 PH 2.0 接口,用来连接电池,但是因为电池供电需要额外补充充放电电路,会增加扩展板复杂度,因此这里仅保留 ADC 能力,不提供使用电池给 ESP32-S3 开发板供电的能力。
通过这个接口连接电池后,即可使用 ESP32-S3 的 ADC 来读取电池电压,这里使用了两个 100K 电阻进行分压,因此实际电压需要通过乘以 2 来获取。
输出模块
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
0.96寸 12864 OLED 也是常见的屏幕外设,在一些要求不高的场合,例如显示少量状态等,是一个比较好的选择,并且功耗相比 LCD 要低不少。
扩展板使用 I2C 接口的屏幕模块,提供 2.54mm 排针座来连接,引脚顺序也按淘宝上常见的模块来定义,引脚顺序为:GND V3.3 SCL SDA。
对于单色 OELD 来说,I2C 的频率跑在 Fast 模式 400Kbits/s 的速率下,即可获得 48 FPS 的刷新速度,也基本满足大多数场景的使用需求。
WS2812 LED
WS2812 相比传统的 6 脚 RGB,更节省 MCU 的 IO,只需一根数据线就可以控制颜色和亮度,并且多个 LED 还可以串联,组成 LED 阵列,实现各种灯光效果,因此扩展板也加入了 WS2812 LED 阵列模块。
蜂鸣器
蜂鸣器可以作为警告提示等用途。
总线模块
SPI 总线
SPI 总线是常见的外设通信总线,在 ESP32-S3 中不使用 IOMXU 时频率可以运行在 80MHz,使用 IOMUX 时可以运行在 40MHz,扩展板中分别连接了 LCD 屏幕和 TF 读卡器,因此没有提供额外的 SPI 总线排针座。
在不使用 LCD 屏幕的情况下,也可以通过 LCD 排针座来连接 SPI 总线外设。
I2C 总线
常见的传感器模块,很多都是采用 I2C 通信,例如温湿度、气压、光照强度等传感器,因此扩展板通过 2.54mm 排针座提供了 3 组 I2C 接口。
参考淘宝上的传感器模块设计,引脚顺序使用了常见的 V3.3 GND SCL SDA。
如果碰到引脚顺序不一致的模块,也可以通过杜邦线连接。
最终 PCB 产品
在打样时 TF 读卡器模块的 CMD 引脚连接错误,通过飞线解决了,开源项目中的 PCB 已经为正确版本,可以放心打样。
这里演示了使用 Si7021 模块获取当前温度,通过 I2C 总线进行通信,因为模块引脚顺序与扩展板引脚顺序不一致,因此通过杜邦线重新连接了。
开源项目
这个项目中的 ESP32-S3 开发板和扩展板均已在立创开源平台开源,可以直接使用立创 EDA 编辑查看,或者下单 PCB。
项目名称:ESP32-S3-WROOM-1 开发板
项目链接:https://oshwhub.com/wandaeda/dan-pian-ji-esp32-s3-kai-fa-ban
该项目中同时包含了 ESP32-S3 最小开发板和当前展示的扩展板,可以直接通过嘉立创打样服务下单制作。
您好,这些外设的驱动是自己写的还是有现成的?
如果用 Arduino 的话,都是现成的,加个库就可以用。