我们大多数人都比较熟悉1602点阵液晶显示屏,它在许多项目中用于向用户显示一些信息。但是这些LCD显示器在他们能做的事情上有很多限制。在本篇文章中,我们将使用OLED显示Android智能手机的一些基本信息,如时间、日期、网络强度和电池状态。本篇文章主要介绍了制作一款基于Arduino的智能手表的基本思想和框架,并可进一步扩展以在OLED显示屏上显示来电、消息等等。

所以我们在这里通过使用Android应用程序从Android手机获取一些信息,然后使用蓝牙模块和Arduino Pro Mini开发板将此信息发送到OLED显示屏。 Android智能手机已经内置蓝牙来发送数据,在接收端我们使用蓝牙模块HC-06和Arduino开发板。蓝牙模块HC-05也可用于代替HC-06。

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

所需的硬件

●    OLED显示模块12864(SSD1306)

●    Arduino开发板(我们使用的是Arduino Pro Mini,也可以使用任何Arduino开发板)

●    蓝牙HC05 / HC06

●    连接导线

●    3.7v锂电池

OLED显示屏基本知识

术语OLED代表“有机发光二极管”,它使用与我们大多数电视机相同的技术,但与它们相比具有更少的像素。让这些酷炫的显示模块与Arduino接口真的很有趣,因为它会让我们的项目看起来很酷。本文中,我们使用的是单色4针SSD1306 0.96“OLED显示屏。此显示屏只能用于I2C模式。

OLED.jpg (18.59 KB, 下载次数: 49)

2018-12-11 21:13 上传

●    VCC  - > 3.3v

●    GND  - > GND

●    SDA  - > SDA(引脚3)

●    SCL  - > SCL(引脚5)

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

电路原理图

使用带有Arduino的4针SSD1306 OLED的电路图非常简单,如下所示

Circuit-Diagram-for-Arduino-based-OLED-Smart-Watch.png (45.06 KB, 下载次数: 51)

2018-12-11 21:14 上传

Interfacing-OLED-display-with-Android-Phone-to-build-Smart-Watch.jpg (57.42 KB, 下载次数: 46)

2018-12-11 21:15 上传

在这里,我们使用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。

Android App通过蓝牙向Arduino发送数据

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

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

Android-app-for-Interfacing-OLED-display-with-Android-Phone.png (32.13 KB, 下载次数: 46)

2018-12-11 21:16 上传

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

Android-app-showing-data-to-be-sent-to-OLED-display-via-bluetooth.png (14.66 KB, 下载次数: 44)

2018-12-11 21:16 上传

用于OLED智能手表的Arduino编程

本文末尾处给出了本篇文章的完整程序,这里我们先介绍代码中几个重要的部分。

首先从Github下载并安装Adafruit库以及GFX库,使用以下链接

首先我们在程序中包含所有必需的库

#include

SoftwareSerial Serial1(10, 11);

#include

#include

#include

#include "Adafruit_SSD1306.h"

#define OLED_RESET 4

Adafruit_SSD1306 display(OLED_RESET);复制代码

在此之后,我们为不同的操作定义了一些宏和变量。

#define NUMFLAKES 10

#define XPOS 0

#define YPOS 1

#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16

#define LOGO16_GLCD_WIDTH  16

String str = "";

byte h = 0;

byte m = 0;

byte S = 0;

String dmy, time, network, battery, inNumber, s;

byte centerX = 24;

byte centerY = 39;

byte Radius = 24;

double RAD = 3.141592 / 180;

double LR = 89.99;复制代码

之后写了一个模拟时钟的函数。

void showTimeAnalog(int center_x, int center_y, double pl1, double pl2, double pl3)

{

double x1, x2, y1, y2;

x1 = center_x + (Radius * pl1) * cos((6 * pl3 + LR) * RAD);

y1 = center_y + (Radius * pl1) * sin((6 * pl3 + LR) * RAD);

x2 = center_x + (Radius * pl2) * cos((6 * pl3 - LR) * RAD);

y2 = center_y + (Radius * pl2) * sin((6 * pl3 - LR) * RAD);

display.drawLine((int)x1, (int)y1, (int)x2, (int)y2, WHITE);

}复制代码

还有另一个数字时钟的函数。

void digitalClock()

{

display.setTextSize(1);

display.setTextColor(WHITE);

display.setCursor(60, 20);

display.println(dmy);

display.setTextSize(2);

display.setCursor(60, 30);

display.println(time);

display.display();

delay(2000);

}复制代码

Displaying-Time-on-Arduino-based-OLED-Smart-Watch.jpg (36.84 KB, 下载次数: 46)

2018-12-11 21:18 上传

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

void Battery()

{

display.clearDisplay();

display.setTextSize(2);

display.setTextColor(WHITE);

display.setCursor(20, 0);

display.print("Bat:");

display.print(battery);

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

display.display();

delay(2000);

}复制代码

Displaying-Battery-on-Arduino-based-OLED-Smart-Watch.jpg (32.83 KB, 下载次数: 48)

2018-12-11 21:19 上传

下面的函数也用于显示数字和图形表格中的网络状态。

void Network()

{

display.clearDisplay();

display.drawLine(5, 15, 25, 15, WHITE);

display.drawLine(5, 15, 14, 30, WHITE);

display.drawLine(25, 15, 17, 30, WHITE);

display.fillRect(14, 15, 4, 40, WHITE);

int net = network.toInt() / 20;

int x1 = 24, y1 = 50, x2 = 4, y2 = 5;

.......

.....复制代码

Displaying-Network-on-Arduino-based-OLED-Smart-Watch.jpg (32.7 KB, 下载次数: 44)

2018-12-11 21:19 上传

然后,在setup函数中,我们初始化了本文使用的所有通信和模块。

void setup()

{

Serial.begin(9600);

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)

display.clearDisplay();

Serial1.begin(9600);

Serial1.println("System Ready");

}复制代码

在loop函数中,我们从android mobile接收数据并解码该数据,然后在OLED显示屏上显示该数据。

void loop(){

Serial1.println("1234");

delay(1000);

while (Serial1.available() > 0){

char ch = Serial1.read();

str += ch;

if (ch == '

[p=30, 2, left]以上就是我们如何通过无线方式连接OLED和智能手机,并可以将我们想要的任何数据从智能手机发送或同步到OLED。[/p]

[p=30, 2, left]代码[/p][p=30, 2, left]本篇文章使用的完整代码如下所示:[/p]

){

dmy = str.substring(str.indexOf("#") + 1, str.indexOf(" "));

time = str.substring(str.indexOf(" ") + 1, str.indexOf(",") - 3);

network = str.substring(str.indexOf(",") + 1, str.indexOf(",,"));

battery = str.substring(str.indexOf(",,") + 2, str.indexOf(",,,"));

inNumber = str.substring(str.indexOf(",,,") + 3, str.indexOf("[        DISCUZ_CODE_156        ]quot;));

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, Radius, 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);

digitalClock();

Battery();

Network();

}复制代码

以上就是我们如何通过无线方式连接OLED和智能手机,并可以将我们想要的任何数据从智能手机发送或同步到OLED。

代码

本篇文章使用的完整代码如下所示:

main.rar

(1.25 KB, 下载次数: 116)

2018-12-11 21:26 上传

点击文件名下载附件

四针角oled屏连接arduino_使用Arduino开发板连接OLED显示屏制作一款智能手表相关推荐

  1. 使用Arduino开发板连接模拟pH传感器

    在化学中,pH是用于指定水基溶液的酸性或碱性的标度.酸性溶液的pH值较低,而碱性溶液的pH值较高.因此,Ph传感器具有确定任何溶液的Ph的能力,即可以判断该物质本质上是酸性.碱性还是中性.通过了解pH ...

  2. 使用Arduino开发板连接ec11旋转编码器

    使用Arduino开发板连接ec11旋转编码器 因为最近要用到旋转编码器,从网上花了好长时间找了好多关于arduino使用旋转编码器的资料,总是找不到合适的,最后总结了一下(部分内容有借鉴,仅作分享, ...

  3. Arduino开发板连接XBee模块的方法

    在本篇文章中,我们将使用Arduino Uno开发板连接一个XBee模块.与Arduino开发板连接的XBee模块将作为一个接收器,它将与其他XBee模块进行无线通信,这些模块使用Explorer B ...

  4. 如何使用Arduino开发板连接NEO-6M GPS模块

    本文主要介绍如何使用Arduino开发板连接NEO-6M GPS模块,然后获取GPS数据. GPS全称全球定位系统,当你旅行时,它可以用来确定位置.时间和速度. NEO-6M GPS模块简介 NEO- ...

  5. Arduino开发板连接振动传感器模块

    有几种关键机器或昂贵的设备因振动而受损.在这种情况下,需要振动传感器来确定机器或设备是否产生振动.如果使用适当的传感器来检测振动,识别连续振动的物体并不是一项棘手的工作.市场上有几种类型的振动传感器可 ...

  6. 使用Arduino开发板连接12位数模转换器MCP4725的方法

    我们都知道微控制器只能使用数字量,但在现实世界中有很多模拟信号需要处理.这就是为什么使用ADC(模数转换器Analog to Digital Converters)将现实世界的模拟量转换为数字量,以便 ...

  7. 如何使用Arduino开发板连接PS2无线控制器

    控制器在我们的生活中有着悠久的历史:从控制遥控车和四轮车到游戏控制器-,他们都使用无线或有线控制器.在本篇文章中,您将学习如何使用Arduino连接和使用PS2游戏机控制器. PS2控制器的功能 每个 ...

  8. micropython stm32f429_[MicroPython]STM32F407开发板驱动OLED液晶屏

    1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...

  9. micropython 驱动oled0.91_[MicroPython]STM32F407开发板驱动OLED液晶屏

    1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法. 2.进一步学习编制数据输出程序的设计方法. 3.学习 F407 Micropython开发板控制OLED显示字符. 2.所需元器件 F ...

最新文章

  1. 推荐一些动作识别数据集
  2. PHP浮点运算结果出现误差原因分析及解决方案
  3. Javamysql语法转化oracle_MyBatis项目实战 快速将MySQL转换成Oracle语句
  4. java web 项目伪静态_【Java Web】使用URLRewrite实现网站伪静态
  5. 41. 后台模块开发(6)
  6. oracle教程之创建自己的锁定
  7. 计算机专业工艺流程简述,CNC加工中心编程的工艺流程,新手必读! ! !
  8. 去摆摊吧,落魄的Java程序员
  9. 什么是系统时钟?什么是时钟系统?时钟系统有什么作用?
  10. Android彩信发送
  11. 图片加水印怎么弄?这些图片加水印方法分享给你
  12. html点击鼠标页面出现爱心,js实现鼠标点击飘爱心效果
  13. SQL查询-查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询
  14. 我是云南的云南怒江的是什么梗 我是云南的云南怒江的梗出处
  15. 2019南昌网络赛 H. The Nth Item(广义斐波那契数列求通项公式模板)(二次剩余+分块)
  16. Linux不是Windows(转载)
  17. 让群晖ds218play同树莓3B+派互通有无
  18. 详解scp文件传输(使用ssh服务,无须反复输入密码)(可用于服务器和本地电脑的文件传输)
  19. 使用 javax.mail 发送邮件
  20. dnspod域名解析linux,域名DNS是dnspod解析但域名不在dnspod添加的注意了

热门文章

  1. Object address check - Jurisdiction code
  2. SAP BRF+ debugger工作原理
  3. 关于错误Resource interpreted as Script but transferred with MIME type text_html
  4. control focus related research
  5. SAP 前端技术的演化史简介
  6. 一些SAP UI5代码审查的例子
  7. SAP专家培训之Netweaver ABAP内存管理和内存调优实践
  8. php dvld.active 1,PHP的字符串
  9. 新建一个文件夹服务器,云服务器中新建文件夹命令
  10. mysql中需要提交的操作_MySQL常用操作及基础知识