我們大多數人都熟悉 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。
-
智能手機
+關注
關注
66文章
18523瀏覽量
180758 -
OLED
+關注
關注
119文章
6215瀏覽量
224588 -
智能手表
+關注
關注
36文章
3299瀏覽量
114554
發布評論請先 登錄
相關推薦
評論