PCB设计
直播中

远风

9年用户 1019经验值
擅长:MEMS/传感技术 模拟技术 存储技术
私信 关注
[资料]

基于ESP32设计一款智能手表

描述
Diy ESP32 智能手表

ESP32 是一系列低成本、低功耗的片上系统微控制器,集成了 Wi-Fi 和双模蓝牙。ESP32 系列采用双核和单核版本的 Tensilica Xtensa LX6 微处理器、Xtensa LX7 双核微处理器或单核 RISC-V 微处理器,并包括内置天线开关、RF balun、功率放大器、低噪声接收放大器、滤波器和电源管理模块。ESP32 由总部位于上海的中国公司 Espressif Systems 创建和开发,并由台积电使用其 40 纳米工艺制造。它是 ESP8266 微控制器的继任者。

规格

当谈到 ESP32 芯片规格时,您会发现:
ESP32 是双核的,这意味着它有 2 个处理器。
它内置了Wi-Fi和蓝牙。
它运行 32 位程序。
时钟频率可以高达 240MHz,它有一个 512kB 的 RAM。
这个特定的板有 30 或 36 个引脚,每行 15 个。
它还提供多种外围设备,例如:电容式触控、ADC、DAC、UART、SPI、I2C 等等。
它带有内置霍尔效应传感器和内置温度传感器。

ESP32 引脚指南

与 ESP826 相比,ESP32 具有更多功能更丰富的 GPIO。
使用 ESP32,您可以决定哪些引脚是 UART、I2C 或 SPI——您只需在代码上进行设置。这是可能的,因为 ESP32 芯片的多路复用功能允许将多个功能分配给同一引脚。如果您没有在代码上设置它们,则默认使用引脚 - 如下图所示(引脚位置可能因制造商而异)。
带有 30 个 GPIO 的版本



OLED显示模块概述

OLED 显示模块突破了小型单色 OLED 显示屏。它宽 128 像素,高 64 像素,宽 0.96 英寸。它是微型的,但它仍然具有冲击力 - OLED 显示屏由于高对比度而非常易读,并且您可以在其中放置大量的图形。

由于显示器自己发光,因此不需要背光。这显着降低了运行 OLED 所需的功率,这就是为什么显示器具有如此高的对比度、极宽的视角并且可以显示深黑色级别的原因。



该模块的核心是一个强大的单芯片 CMOS OLED 驱动控制器 - SSD1306,它处理所有 RAM 缓冲,因此您的 ESP32 只需要做很少的工作。SSD1306 控制器的工作电压范围为 1.65V 至 3.3V – 非常适合与 ESP32 等 3.3V 微控制器连接。

OLED 内存映射

要完全控制您的 OLED 显示模块,了解其内存映射非常重要。
无论 OLED 模块的大小如何,SSD1306 驱动程序都有一个内置的 1KB 图形显示数据 RAM (GDDRAM),用于保存要显示的位模式的屏幕。这 1K 的内存区域被组织成 8 页(从 0 到 7)。每页包含 128 列/段(块 0 到 127)。并且每列可以存储 8 位数据(从 0 到 7)。这肯定告诉我们我们有
8 页 x 128 段 x 8 位数据 = 8192 位 = 1024 字节 = 1KB 内存
下面突出显示了包含页面、段和数据的整个 1K 内存。


每个位代表屏幕上的特定 OLED 像素,可以通过编程方式打开或关闭。
128×64 OLED 屏幕显示 RAM 的所有内容,而 128×32 OLED 屏幕仅显示 RAM 的 4 页(一半内容)。
将 OLED 显示模块连接到 ESP32

理论说完了,让我们开始实践吧!让我们将显示器连接到 ESP32。
连接相当简单。首先将 VCC 引脚连接到 ESP32 上的 3.3V 输出,然后将 GND 接地。
接下来,将 SCL 引脚连接到 ESP32 上的 I2C 时钟 D22 引脚,并将 SDA 引脚连接到 ESP32 上的 I2C 数据 D21 引脚。请参阅 ESP32 引脚分配。

下图向您展示了如何连接所有东西。




带ESP32的 OLED 显示模块的接线连接

有了它,您现在就可以上传一些代码并进行显示打印了。
安装 OLED 显示模块库

OLED 显示器的 SSD1306 控制器具有灵活而复杂的驱动程序。为了使用 SSD1306 控制器,需要大量的内存寻址知识。幸运的是,Adafruit 的 SSD1306 库是为了隐藏 SSD1306 控制器的复杂性而编写的,这样我们就可以发出简单的命令来控制显示器。
要安装库,请导航到 Sketch > Include Library > Manage Libraries... 等待库管理器下载库索引并更新已安装库的列表。


通过输入“adafruit ssd1306”过滤您的搜索。应该有几个条目。寻找 Adafruit 的 Adafruit SSD1306。单击该条目,然后选择安装。



这个 Adafruit SSD1306 库是一个特定于硬件的库,它处理较低级别的函数。它需要与 Adafruit GFX 库配对以显示点、线、圆、矩形等图形基元。也安装此库。



笔记

该库从 ESP32 分配 1KB(128×64)/8 位)的内存作为缓冲区。因此,它可以操作屏幕缓冲区,然后执行从 ESP32 内存到 SSD1306 控制器内部存储器的批量传输。
修改 Adafruit SSD1306 库

Adafruit 的 SSD1306 库不是为 128×64 OLED 显示器(我们现在使用的显示器)设置的。必须在 Adafruit_SSD1306.h 头文件中更改显示大小以使其适合我们。如果没有改变,错误消息说#error(“高度不正确,请修复Adafruit_SSD1306.h!”);尝试在 Arduino IDE 中验证示例草图时可能会出现:



要更改 Adafruit_SSD1306.h 头文件,请打开您的速写本位置。通常是我的文档 > Arduino。现在去图书馆> Adafruit_SSD1306



在文本编辑器中打开 Adafruit_SSD1306.h 文件。向下滚动文件以找到带有 SSD1306 显示器的部分或直接转到第 1 行。73. 注释掉#define SSD1306_128_32 并取消注释#define SSD1306_128_64 使本节中的代码如下所示:



而已。现在保存文件并重新启动您的 Arduino IDE。

ESP32 代码 – 显示文本
现在有趣的东西来了!
以下测试草图将打印“Hello World!” 显示屏上的消息。它还包括
显示反转文本
显示数字
显示带基数的数字(十六进制,十二月)
显示 ASCII 符号
水平和垂直滚动文本
滚动显示部分

这将使您全面了解如何使用 OLED 显示器,并可作为更多实际实验和项目的基础。

概念

一个简单的 MicroPython 脚本,用于将带有 oled 的 ESP32 变成智能手表。

目前它可以连接到互联网,获取天气和时间。接下来,我将使用来自 Google 的 OAuth2ForDevices 和一个将未读邮件保存到 Google Drive 的脚本来添加对 Gmail 的访问。

设置

在您的上安装 MicroPython。
在 consts_exemple.py 文件中,将以下值替换为您的值
NTW_LIST、WEATHER_API_KEY、GOOGLE_CLIENT_ID、GOOGLE_CLIENT_SECRET
将 consts_exemple.py 重命名为 consts.py。
上传 ESP32 根目录下的 Libs 和 Sources 文件夹中的 consts.py 和 python 文件。您可以使用 Ampy 程序或提供的 upload.sh 脚本来执行此操作。您可以编辑 .ampy 文件以更改默认配置。
运行main.py,就可以使用Ampy了。对于测试就像使用 Esplorer。

oled 未连接到标准 I2C 引脚,其 SDA 引脚为 4,SCL 引脚为 15。您可以通过将 Wire.begin(4, 15) 添加到设置代码来进行设置。显示器的 I2C 地址为 0x3C。您还需要使用 OLED_RST 引脚来启用显示: pinMode(16,OUTPUT); 数字写入(16,低);延迟(50);数字写入(16,高);应用这些设置后,I2CScan 可以找到显示和大多数 SSD1306 Arduino 库工作(例如,Adafruit SSD1306 在将 Wire.begin() 更改为 Wire.begin(4, 15) 并设置复位引脚和 I2C 地址后工作)。
尺寸:25.5mm 高 50mm 宽 5.75mm 厚









更多回帖

发帖
×
20
完善资料,
赚取积分