0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

科技观察员 来源:circuitdigest 作者:萨达姆 2022-09-22 17:45 次阅读

我们大多数人都熟悉 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 模式下工作。

pYYBAGMsLaaAP0xSAAIHl1g1kvs328.png

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

电路原理

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

pYYBAGMsLaGADqYnAAF-B-jVSBk820.pngpYYBAGMsLtCAdN-MAACRYaZhKv4869.jpg

在这里,我们使用了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,如下图所示:

pYYBAGMsLtKAPZWtAAB8tonNhdM642.png

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

poYBAGMsLtOACOAwAAA5NHjo6OY126.png

为 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);
}

poYBAGMsLteAbRF8AACJAP0bBBo950.jpg

然后 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);
}

pYYBAGMsLtiAap1sAAB4cFMeWBw140.jpg

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

无效网络()
{
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;
…………
......

pYYBAGMsLtyAQfw1AAB3QkxN9wk753.jpg

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

无效设置()
{
序列号.开始(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。

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

    关注

    66

    文章

    18343

    浏览量

    178971
  • OLED
    +关注

    关注

    119

    文章

    6144

    浏览量

    223248
  • 智能手表
    +关注

    关注

    36

    文章

    3260

    浏览量

    113066
收藏 人收藏

    评论

    相关推荐

    如何将数组的的字符重新连接起来保存?

    TEMP[2]依次存入,直到4存入TEMP[7], 问题是:如何将数组的的字符重新连接起来保存?如何定义新的变量str?使str=\"ABCD1234\"?
    发表于 04-16 07:39

    如何数据库的资料与报表连接起来

    如何数据库的资料与报表连接起来
    发表于 08-07 16:04

    如何将PLC通信口与无线数据终端连接起来??

    `如何将PLC通信口与无线数据终端连接起来,实现PLC与PLC之间,PLC与HMI触摸屏间,PLC与PC组态软件以及PLC与设备之间的无线数据交换!关注微信公众号【PLC无线通讯】解决您的一切烦恼!`
    发表于 09-28 09:49

    如何把数据库和其他程序连接起来

    各位大神,我现在遇到一个问题。我想把已经采集好的数据和数据库的进行对比,然后检索出相应的文字出来。我已经把采集的数据编成代码了,数据库相应的文字也用代码来进行代替。但是现在我不是很清楚如何将他们连接起来。两个小程序分别运行没有问题,但是
    发表于 04-13 11:16

    怎样使用STM32单片和无线智能小车连接起来

    设计一个基于stm32的无线遥控智能小车,现在有材料有板子有杜邦线不知道怎么让STM32跟小车连接起来使用邱大生解答
    发表于 12-07 15:00

    请问由数字组成的字符串怎么连接起来

    想问一下关于字符串连接的问题我想做一个手机界面,通过按键输入手机号,其实就是由数字组成的字符串,但是不知道如何将这些个‘0’,‘1’,‘2’……连接
    发表于 03-29 06:35

    如何将IC的SCL和SDA引脚与FPGA板连接起来

    Aoa ..我想将我的FPGA板(virtex6 ML605)与外部时钟IC(ds1307)连接起来。请指导我如何将IC的SCL和SDA引脚与FPGA板连接。谢谢
    发表于 04-29 08:13

    如何将蓝牙与STM32连接起来

    蓝牙模块有何功能?如何将蓝牙与STM32连接起来呢?
    发表于 11-18 07:02

    如何将STM32L412与STUSB1602 TCPC连接起来呢?

    你好我目前正在尝试 STM32L412 与 STUSB1602 TCPC 连接起来。我试图通过为另一个 MCU 移植一个现有的 STUSB1602 软件库来开始这个工作。看起来这个端口可能非常艰巨且容易出错。有没有人成功地做到
    发表于 12-28 07:13

    如何将Eink显示器与esp32连接起来

    一般来说,我是嵌入式系统和 ESP-IDF 的新手。我正在尝试 Eink 显示器与 esp32 连接起来,但我对如何为其编写代码有点迷茫。有没有我可以参考的指南或教程?
    发表于 03-01 06:36

    如何将hwirq与中断连接起来

    的 MSIR7 寄存器设置中断 0 位。那么,当那个中断到达时,我该如何调用我的 interrupt_handler 函数呢?我想我应该使用 irq_create_mapping 和 request_irq Linux 函数,但我不知道如何将 hwirq 与我的中断链接起来
    发表于 03-14 08:20

    如何将Eink显示器与esp32接口连接起来

    一般来说,我是嵌入式系统和 ESP-IDF 的新手。我正在尝试 Eink 显示器与 esp32 连接起来,但我对如何为其编写代码有点迷茫。有没有我可以参考的指南或教程?
    发表于 04-13 08:09

    如何将EMMC SanDisk iNAND® 7250与LPC 1850连接起来

    我们正在尝试 EMMC SanDisk iNAND® 7250 与 LPC 1850 连接起来。EMMC 使用 MMC 5.1,但 1850 提到 4.4 作为标准。经过研究,发现4.4是向下兼容
    发表于 04-27 06:33

    HC-05和MSP430连接起来控制LED的方式

     今天我们学习如何将蓝牙模块 HC-05 与德州仪器 (TI) 的 MSP430 Launchpad 连接起来。在这个接口示例中,我们将使用蓝牙终端安卓应用程序从智能手机控制 MSP
    发表于 08-29 17:30 1506次阅读
    <b class='flag-5'>将</b>HC-05和MSP430<b class='flag-5'>连接起来</b>控制LED的方式

    RF 433MHz发射器/接收器模块与MCU连接起来

    电子发烧友网站提供《RF 433MHz发射器/接收器模块与MCU连接起来.zip》资料免费下载
    发表于 06-13 09:24 4次下载
    <b class='flag-5'>将</b>RF 433MHz发射器/接收器模块与MCU<b class='flag-5'>连接起来</b>