四针角oled屏连接arduino_使用Arduino开发板连接OLED显示屏制作一款智能手表
我們大多數人都比較熟悉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模塊與手機配對即可??赡芤竺艽a配對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显示屏制作一款智能手表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 数据库管理常用的S
- 下一篇: 查看符号表