我们大多数人都熟悉 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 模式下工作。
Arduino 社区已经为我们提供了很多库,可以直接使用这些库来简化此操作。我尝试了一些库,发现 Adafruit_SSD1306 库非常易于使用并且有一些图形选项,因此我们将在本教程中使用相同的库。在这里,我们还需要在 Arduino IDE 中安装一个库,可以从这里下载GFX 图形库。
电路原理图
使用 4 针 SSD1306 OLED 与 Arduino的 电路图 很简单,如下所示
在这里,我们使用了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 应用程序将显示从 android 手机获取的数据,如下所示:
为 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 将使用以下功能以数字和图形形式显示电池状态。
无效电池()
{
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);
}
以下函数也用于以数字和图形形式显示网络状态。
无效网络()
{
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;
…………
......
在设置功能之后,我们初始化了我们在这个项目中使用的所有通信和模块。
无效设置()
{
序列号.开始(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。
全部0条评论
快来发表一下你的评论吧 !