编者注:这个项目叫Retro Watch。
该教程最初发布在 Instructables 上,作者是 GodsTale。
本项目教程已有波兰语和韩语版本,现在作者又添加了中文版本。
说到可穿戴设备,我们通常首先想到的就是智能手表。
购买一款时尚的智能手表固然很棒,但作为创客,你也可以像我一样选择自己制作一款!我把这款DIY智能手表命名为Retro Watch。
整个项目基于Android和Arduino开发板。
该项目的所有软硬件设计都是开源的。
您可以下载源代码或在 Github 上贡献自己的成果。
另外值得一提的是,Retro Watch 已经支持 u8glib,它可以让你选择任何你想使用的屏幕(包括 OLED),而且屏幕也可以占用更少的 RAM。
第一步:系统结构设计 如上图所示,Retro Watch的结构比较简单:硬件平台基于Arduino,只有一个控制按钮。
另外,我还开发了一个基于Android系统的应用程序,让手表可以通过蓝牙连接到Android设备,这样我们就可以通过Retro Watch在Android设备上查看RSS推送和系统通知。
第二步:组件准备因为我们要做的是一款智能手表,所以保证每个组件体积小也是关键之一。
我选择的Arduino微控制器是最小的Arduino Pro Mini,它是Uno R3的轻量级版本。
上面连USB接口芯片都没有,所以需要额外准备一个USB转UART模块。
该Arduino有两个版本,工作电压不同(3.3v/5v)。
我选择了3.3V版本,因为蓝牙模块和显示器都支持3.3V,而且3.7V锂电池也可以正常使用。
3.3V版本的Arduino运行在8MHz,5V版本运行在16MHz,但8MHz已经绰绰有余了。
一般来说,Arduino Pro Mini的核心处理器件是ATmega微控制器,其RAM为2KB;但Arduino版本的ATmega只有1KB RAM是不够的。
蓝牙HC~06蓝牙模块比较常见。
其中一个有一个接口板,其中包含一个重置按钮和一个 LED,但它也相对较大。
由于接口板对于本项目意义不大,而且也增加了成本,因此这里选择不带接口板的HC~06。
显示器 我们需要一个足够小且功耗足够低的显示器。
我最终选择了Adafruit的0.96英寸×64 OLED显示屏,它支持I2C和SPI,可以轻松连接Arduino。
我这里选择的是I2C和SSD驱动芯片。
我选择的电池是3.7V的LiPo电池,容量为mAh。
正常使用可持续7小时。
同样,选择电池的尺寸也很重要。
除了电线等其他组件外,还需要一个 10 kΩ 电阻(用于按钮连接)。
第三步:组装整个系统的硬件结构。
连接图如下: 蓝牙连接 Arduino: VCC ~ 3.3VGND ~ GNDTX ~ D2RX ~ D3OLED 连接 Arduino: GND ~ GNDVCC ~ VCCSDA ~ A4 (模拟引脚 4) SCL ~ A5 (模拟引脚 5) 如果您使用的是SPI 接口,可以参考 Adafruit 教程连接,如下: D1: MOSI ~ Arduino D11 (MOSI) D2: MISO ~ Arduino D12 (MISO) (可选) D0: CLK ~ Arduino D13 (SCK)DC: DC (数据命令)~Arduino D8(或其他)CS:CS(片选)~Arduino D10(SS)RES:RESET~Arduino D9(或其他)按钮:连接方法如图所示,请注意这里A使用 10 kΩ 电阻。
电池连接 Arduino:正极 ~ RAW 负极 ~ GND USB 转 UART 模块连接 Arduino:3.3V ~ VCCTXD ~ RXDRXD ~ TXDGND ~ GND 安装尺寸如下: 第四步:编译 Arduino 代码并上传完成的 Arduino项目,可以在 GitHub 上下载。
下载后先不要急于编译。
您还需要先配置开发环境。
安装显卡驱动:首先需要安装图形处理库Adafruit_SSD和Adafruit-GFX-Library,以便在OLED上显示图像。
(在某些开发环境中,Adafruit 库会与 Robot_xxx 库冲突;如果发生这种情况,请备份 Robot_xxx 库并将其从库文件夹中删除。
) 警告:如果您使用的是带有 SH 驱动程序的 OLED,请下载 Adafruit_SH GitHub 上的驱动程序。
另外,该项目还支持u8glib。
您可以从其官方主页下载支持Arduino的版本。
复制位图图像头文件:将RetroWatchArduino文件夹中的bitmap.h文件复制到路径/Arduino安装文件夹/Arduino/hardware/libraries/RetroWatch。
如果没有这样的路径,您可以自己创建它。
修改源代码:打开Arduino IDE并加载RetroWtchArduino.ino。
如果您使用的引脚与本教程不同,则需要修改引脚定义:SoftwareSerial BTSerial(9, 8); //蓝牙TX、RX连接引脚 int ButtonPin = 5; // 按钮引脚显示.begin (SSD_SWITCHCAPPVCC, 0x3C); // OLED I2C 地址,将 Ox3D 替换为您的地址。
如果您使用的是 u8glib,则加载 RetroWatchArduino_u8glib.ino 文件并注意以下代码: U8GLIB_SSD_X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0); // 根据Modify the display选择SoftwareSerialBTSerial(2, 3); // 蓝牙TX、RX连接引脚 int ButtonPin = 5; // 按钮引脚 如果您使用Adafruit的图形库并使用OLED的Reset引脚,则将OLED的Reset连接到Arduino的D8引脚。
当然也可以自定义:#define OLED_RESET 8Adafruit_SSDdisplay(OLED_RESET);编译上传:完成上述步骤后,进行编译上传。
成功后,显示屏上会显示RetroWatch。
Arduino 徽标和 Adafruit 徽标。
出现徽标后,屏幕将显示 00:00,如下图所示: 步骤 5:Android 软件及其源代码。
由于Android 4.3之后的版本仅支持从应用程序读取通知信息,请确保您的Android设备安装的是Android 4.3或更高版本的系统。
但如果您使用的版本低于4.3,则可以使用该应用程序的另一个阉割版本:它可以通过智能手表接收通知,但无法读取内容。
应用程序源代码可以在 GitHub 上查看或直接通过 Google Play 商店安装(旧系统为 RetroWatch 或 RetroWatch LE)。
安装Android软件后,检查系统是否授予其读取通知的权限。
接下来,打开手机的蓝牙,并将Android手机的蓝牙与Arduino配对。
然后在RetroWatch软件中选择连接的Arduino。
如果界面显示“已连接”,则表示连接成功。
单击菜单并选择数据传输到手表,然后设备将使用蓝牙将时间和信息传输到智能手表。
由于手表硬件性能有限,很多功能需要通过Android应用程序来实现。
手表本身的主要功能就是显示。
在Android应用程序中,您可以设置推送消息的类型(仅支持英文字符显示)和状态通知(手机电量、信号强度等),还可以推送应用程序中订阅的RSS(您可以订阅天气RSS,用于将天气显示在手表上)。
每 30 分钟同步更新一次。
此外,该应用程序还提供了65种不同的显示图标,您可以自行定义设置。
第六步:手表功能介绍安装完成后,就可以开始探索我们的智能手表了。
智能手表系统工作在以下模式: 启动显示:显示标志,手表启动。
时钟显示:显示连接的 Android 手机上的时间。
此外,时间显示也可以修改。
目前提供模拟显示、数字显示和混合显示三种模式。
单击一次按钮,手表进入紧急信息显示模式。
如果10分钟内没有数据更新或操作,显示界面将切换到待机界面。
紧急信息显示:当用户点击按钮或输入新的紧急信息时,手表进入该模式。
用户可以再次单击该按钮来查看下一条消息。
如果10秒内没有任何操作,手表会自动显示下一条消息。
信息显示完成后,手表切换到正常信息显示。
因为RAM只有2KB,很小。
因此,智能手表最多可以存储3条紧急消息,如果超过3条,最旧的消息将被自动删除。
普通信息显示:紧急信息显示完成后,手表将继续显示普通信息。
单击按钮或5秒不操作将显示下一条信息。
信息显示完成后,手表切换回时钟显示。
最多可存储7条一般信息。
待机显示:如果10分钟内没有数据更新或操作,显示界面将切换到待机界面。
在此模式下,手表界面仅以 hh:mm 模式显示指示器(可在 Android 应用程序中选择)和时间,并且其功耗也有所降低。
当待机状态下点击按钮或收到新消息时,手表进入时钟显示模式。
以下为工作过程演示视频: 步骤七:外部结构制作。