为了帮助儿子认识钟表,我特地设计了这样的一个装置。上电之后会通过语音播报出一个随机时间。用户通过装置上的两个旋转编码器来分别设定时针和分针到达指定之间的位置即为通过。
卖家没有提供 Arduino 的库,因此只能从 C51 例子中修改。最终成功将其 porting 到 < span class="colour" style="color:rgb(51, 51, 51)">Adafriut GFX 上。< /span> < span class="colour" style="color:rgb(51, 51, 51)">遇到的第二个问题是如何驱动旋转编码器,< /span>入手的是 ALPS EC11 系列的:
为了让它工作,自己做了电路板电阻配合,单独的驱动电路图如下:
软件方面使用了 ai-esp32-rotary-encoder 库。< span class="size">< /span> * 3、描述项目硬件、软件部分涉及到的关键点 硬件电路图下: < span class="size">
< /span> PCB 设计如下:
2 和 LCD 通过 SPI 接口进行通讯;我已经编写好了 GC9A01的 Adafruit_GFX 库,声明 Arduino_GC9A01 tft = Arduino_GC9A01(GC9A01_DC\, GC9A01_RST\,GC9A01_CS ) 后即可使用; ESP32 和旋转编码器通过 GPIO 通讯,但是 ESP32 上不是任何的 GPIO 都能选择成为和旋转编码器连接的引脚,某些连接之后会导致无法启动,我是通过实验来确定能否使用的。每个旋转编码器除了电源和地之外还有两根线用于处理旋转数据,一根用于按键信息;在引用对应的库之后,通过下面 2 个函数即可开始使用旋转编码器: AiEsp32RotaryEncoder rotaryEncoder1 = AiEsp32RotaryEncoder(ROTARY_ENCODER1_A_PIN\, ROTARY_ENCODER1_B_PIN\, ROTARY_ENCODER1_BUTTON_PIN\, -1);AiEsp32RotaryEncoder rotaryEncoder2 = AiEsp32RotaryEncoder(ROTARY_ENCODER2_A_PIN\, ROTARY_ENCODER2_B_PIN\, ROTARY_ENCODER2_BUTTON_PIN\, -1); ESP32 通过串口和 SYN6288 通讯。
1. http://www.lab-z.com/gc9a01tft/ESP32 GC9A01 测试代码
2. https://www.lab-z.com/gc9a01gfx/ GC9A01 Porting 到 Adafriut GFX< span class="size">< /span>< br> < br>
Zoologist 来自 Arduino 中文社区,爱好使用 Arduino 制作各种有趣的东西。