如何将OLED与Android手机连接起来构建智能手表

描述

我们大多数人都熟悉 16×2 点阵 LCD 显示器 ,它在许多项目中用于向用户显示一些信息。但是这些液晶显示器的功能有很多限制。在本教程中,我们将使用OLED 显示来自 Android 智能手机的一些基本信息,例如时间、日期、网络强度和电池状态。该项目提供了构建基于Arduino 的智能手表的基本理念和框架,并且可以进一步扩展以在 OLED 显示屏上显示来电、消息等。

所以这里我们使用一个安卓应用程序从安卓手机中获取一些信息,然后使用蓝牙模块和Arduino Pro Mini将这些信息发送到OLED显示器。

在 Android 应用程序中,从手机中获取数据并作为字符串发送到 Arduino。现在收到数据后,Arduino 解码传入的字节串并将其放入临时变量中以显示在 OLED 显示器上。在 OLED 显示屏中,我们创建了一些图形来显示值,在此处了解有关在 Arduino 中使用 OLED 显示屏的更多信息。

所需硬件

128×64 OLED显示模组(SSD1306)

Arduino(我们使用的是 Arduino Pro Mini。但我们可以使用任何 Arduino 板)

蓝牙 HC05/HC06

连接电线

3.7v 锂电池

跳线

了解 OLED 显示器

OLED 一词代表“有机发光二极管” ,它使用与我们大多数电视中使用的技术相同的技术,但与它们相比像素更少。将这些看起来很酷的显示模块与 Arduino 连接起来真的很有趣,因为它会让我们的项目看起来很酷。我们 在此处介绍了有关 OLED 显示器及其类型的完整文章。在这里,我们使用的是 单色 4 针 SSD1306 0.96” OLED 显示屏。此显示器只能在 I2C 模式下工作。

OLED

Arduino 社区已经为我们提供了很多库,可以直接使用这些库来简化此操作。我尝试了一些库,发现 Adafruit_SSD1306 库非常易于使用并且有一些图形选项,因此我们将在本教程中使用相同的库。在这里,我们还需要在 Arduino IDE 中安装一个库,可以从这里下载GFX 图形库。

电路原理图

使用 4 针 SSD1306 OLED 与 Arduino的 电路图 很简单,如下所示

OLEDOLED

在这里,我们使用了Arduino Pro Mini板来控制所有操作。选择 Arduino pro mini 的原因是它可以在 3.3v 电源下运行。4针 OLED和蓝牙模块 HC-06也可以在 3.3v 上工作,因此所有这些模块都可以由单个 3.7v Li-on 供电。锂电池是小巧轻便的电池,是可穿戴设备的完美选择。在这里,我们还在这个项目中制作了一些可穿戴的东西,比如一个简单的智能手表,它可以与你的智能手机同步。

现在关于电源的一个问题是,这里所有的模块都在 3.3v 上工作,但锂离子电池提供 3.7v,这可能会损坏模块。因此,为了解决这个问题,我们将电池的 3.7v 电源应用于 Arduino pro mini 的原始引脚,该引脚可以将该电压转换为 3.3v。

用于通过蓝牙向 Arduino 发送数据的 Android 应用

对于这款基于 Arduino 的智能手表,我们在 Android Studio 中创建了一个 Android 应用程序,该应用程序可以从这里下载。因此,只需在您的 Android 智能手机中下载并安装此应用程序,然后启用蓝牙并将 HC-06 模块与您的手机配对。它可能会要求输入密码来配对 HC-06 蓝牙模块,默认密码是 1234 或 0000。

现在打开 OLED 应用程序并选择已配对的蓝牙设备 HC-06,如下图所示:

OLED

现在OLED 应用程序将显示从 android 手机获取的数据,如下所示:

OLED

为 OLED 智能手表编程 Arduino

在这个项目的最后给出了带有演示视频的完整程序,这里我们解释了几部分代码。

首先使用下面的链接从 Github 下载 Adafruit 库和 GFX 库

阿达果图书馆

GFX 图形库

然后从包含所有必需的库开始

#include
SoftwareSerial Serial1(10, 11);

#include
#include
#include
#include “Adafruit_SSD1306.h”

#define OLED_RESET 4
Adafruit_SSD1306 显示(OLED_RESET);
在此之后,我们为不同的操作定义了一些宏和变量。

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
字符串 str = "";
字节 h = 0;
字节 m = 0;
字节 S = 0;
String dmy、时间、网络、电池、inNumber、s;
字节中心X = 24;
字节中心Y = 39;
字节半径 = 24;

双 RAD = 3.141592 / 180;
双 LR = 89.99;
在此之后为模拟时钟编写一个函数。

无效 showTimeAnalog(int center_x,int center_y,双 pl1,双 pl2,双 pl3)
{
双 x1,x2,y1,y2;
x1 = center_x + (半径 * pl1) * cos((6 * pl3 + LR) * RAD);
y1 = center_y + (半径 * pl1) * sin((6 * pl3 + LR) * RAD);
x2 = center_x + (半径 * pl2) * cos((6 * pl3 - LR) * RAD);
y2 = center_y + (半径 * pl2) * sin((6 * pl3 - LR) * RAD);
display.drawLine((int)x1, (int)y1, (int)x2, (int)y2, WHITE);
}
然后还有另一个数字时钟功能。

无效数字时钟()
{
display.setTextSize(1);
display.setTextColor(白色);
display.setCursor(60, 20);
display.println(dmy);
display.setTextSize(2);
display.setCursor(60, 30);
display.println(时间);
显示.显示();
延迟(2000);
}

OLED

然后 OLED 将使用以下功能以数字和图形形式显示电池状态。

无效电池()
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(白色);
display.setCursor(20, 0);
display.print("蝙蝠:");
display.print(电池);
display.print("%");
display.drawRect(14, 20, 80, 40, WHITE);
display.drawRect(94, 30, 10, 20, WHITE);
display.fillRect(14, 20, (int)(8 * (battery.toInt()) / 10), 40, WHITE);
显示.显示();
延迟(2000);
}

OLED

以下函数也用于以数字和图形形式显示网络状态。

无效网络()
{
display.clearDisplay();
display.drawLine(5, 15, 25, 15, WHITE);
display.drawLine(5, 15, 14, 30, 白色);
display.drawLine(25, 15, 17, 30, 白色);
display.fillRect(14, 15, 4, 40, WHITE);
int net = network.toInt() / 20;
整数 x1 = 24, y1 = 50, x2 = 4, y2 = 5;
…………
......

OLED

在设置功能之后,我们初始化了我们在这个项目中使用的所有通信和模块。

无效设置()
{
序列号.开始(9600);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);// 使用 I2C 地址 0x3D 初始化(对于 128x64)
display.clearDisplay();
Serial1.开始(9600);
Serial1.println("系统就绪");
}
在循环功能中,我们从 android mobile 接收数据并解码该数据并将它们发送到 OLED 显示器。

无效循环(){
Serial1.println("1234");
延迟(1000);
而(Serial1.available()> 0){
char ch = Serial1.read();
str += 通道;
如果 (ch == '$'){
dmy = str.substring(str.indexOf("#") + 1, str.indexOf(""));
时间 = str.substring(str.indexOf(" ") + 1, str.indexOf(",") - 3);
网络 = str.substring(str.indexOf(",") + 1, str.indexOf(",,"));
电池 = str.substring(str.indexOf(",,") + 2, str.indexOf(",,,"));
inNumber = str.substring(str.indexOf(",,,") + 3, str.indexOf("$"));
s = time.substring(time.indexOf(" ") + 1, time.indexOf(" ") + 3);
h = s.toInt();
s = time.substring(time.indexOf(" ") + 4, time.indexOf(" ") + 6);
m = s.toInt();
s = time.substring(time.indexOf(" ") + 7, time.indexOf(" ") + 9);
S = s.toInt();
str = "";}
}
display.clearDisplay();
display.drawCircle(centerX, centerY, 半径, WHITE);
showTimeAnalog(centerX, centerY, 0.1, 0.5, h * 5 + (int)(m * 5 / 60));
showTimeAnalog(centerX, centerY, 0.1, 0.78, m);
// showTimePin(centerX, centerY, 0.1, 0.9, S);
数码时钟();
电池();
网络();
}
这就是我们如何将 OLED 与智能手机无线连接,并将我们想要的任何数据从智能手机发送或同步到 OLED。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分