0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將OLED與Android手機(jī)連接起來(lái)構(gòu)建智能手表

科技觀(guān)察員 ? 來(lái)源:circuitdigest ? 作者:薩達(dá)姆 ? 2022-09-22 17:45 ? 次閱讀

我們大多數(shù)人都熟悉 16×2 點(diǎn)陣 LCD 顯示器 ,它在許多項(xiàng)目中用于向用戶(hù)顯示一些信息。但是這些液晶顯示器的功能有很多限制。在本教程中,我們將使用OLED 顯示來(lái)自 Android 智能手機(jī)的一些基本信息,例如時(shí)間、日期、網(wǎng)絡(luò)強(qiáng)度和電池狀態(tài)。該項(xiàng)目提供了構(gòu)建基于Arduino智能手表的基本理念和框架,并且可以進(jìn)一步擴(kuò)展以在 OLED 顯示屏上顯示來(lái)電、消息等。

所以這里我們使用一個(gè)安卓應(yīng)用程序從安卓手機(jī)中獲取一些信息,然后使用藍(lán)牙模塊和Arduino Pro Mini將這些信息發(fā)送到OLED顯示器。

在 Android 應(yīng)用程序中,從手機(jī)中獲取數(shù)據(jù)并作為字符串發(fā)送到 Arduino?,F(xiàn)在收到數(shù)據(jù)后,Arduino 解碼傳入的字節(jié)串并將其放入臨時(shí)變量中以顯示在 OLED 顯示器上。在 OLED 顯示屏中,我們創(chuàng)建了一些圖形來(lái)顯示值,在此處了解有關(guān)在 Arduino 中使用 OLED 顯示屏的更多信息。

所需硬件

128×64 OLED顯示模組(SSD1306)

Arduino(我們使用的是 Arduino Pro Mini。但我們可以使用任何 Arduino 板)

藍(lán)牙 HC05/HC06

連接電線(xiàn)

3.7v 鋰電池

跳線(xiàn)

了解 OLED 顯示器

OLED 一詞代表“有機(jī)發(fā)光二極管” ,它使用與我們大多數(shù)電視中使用的技術(shù)相同的技術(shù),但與它們相比像素更少。將這些看起來(lái)很酷的顯示模塊與 Arduino 連接起來(lái)真的很有趣,因?yàn)樗鼤?huì)讓我們的項(xiàng)目看起來(lái)很酷。我們 在此處介紹了有關(guān) OLED 顯示器及其類(lèi)型的完整文章。在這里,我們使用的是 單色 4 針 SSD1306 0.96” OLED 顯示屏。此顯示器只能在 I2C 模式下工作。

pYYBAGMsLaaAP0xSAAIHl1g1kvs328.png

Arduino 社區(qū)已經(jīng)為我們提供了很多庫(kù),可以直接使用這些庫(kù)來(lái)簡(jiǎn)化此操作。我嘗試了一些庫(kù),發(fā)現(xiàn) Adafruit_SSD1306 庫(kù)非常易于使用并且有一些圖形選項(xiàng),因此我們將在本教程中使用相同的庫(kù)。在這里,我們還需要在 Arduino IDE 中安裝一個(gè)庫(kù),可以從這里下載GFX 圖形庫(kù)。

電路原理

使用 4 針 SSD1306 OLED 與 Arduino的 電路圖 很簡(jiǎn)單,如下所示

pYYBAGMsLaGADqYnAAF-B-jVSBk820.pngpYYBAGMsLtCAdN-MAACRYaZhKv4869.jpg

在這里,我們使用了Arduino Pro Mini板來(lái)控制所有操作。選擇 Arduino pro mini 的原因是它可以在 3.3v 電源下運(yùn)行。4針 OLED和藍(lán)牙模塊 HC-06也可以在 3.3v 上工作,因此所有這些模塊都可以由單個(gè) 3.7v Li-on 供電。鋰電池是小巧輕便的電池,是可穿戴設(shè)備的完美選擇。在這里,我們還在這個(gè)項(xiàng)目中制作了一些可穿戴的東西,比如一個(gè)簡(jiǎn)單的智能手表,它可以與你的智能手機(jī)同步。

現(xiàn)在關(guān)于電源的一個(gè)問(wèn)題是,這里所有的模塊都在 3.3v 上工作,但鋰離子電池提供 3.7v,這可能會(huì)損壞模塊。因此,為了解決這個(gè)問(wèn)題,我們將電池的 3.7v 電源應(yīng)用于 Arduino pro mini 的原始引腳,該引腳可以將該電壓轉(zhuǎn)換為 3.3v。

用于通過(guò)藍(lán)牙向 Arduino 發(fā)送數(shù)據(jù)的 Android 應(yīng)用

對(duì)于這款基于 Arduino 的智能手表,我們?cè)?Android Studio 中創(chuàng)建了一個(gè) Android 應(yīng)用程序,該應(yīng)用程序可以從這里下載。因此,只需在您的 Android 智能手機(jī)中下載并安裝此應(yīng)用程序,然后啟用藍(lán)牙并將 HC-06 模塊與您的手機(jī)配對(duì)。它可能會(huì)要求輸入密碼來(lái)配對(duì) HC-06 藍(lán)牙模塊,默認(rèn)密碼是 1234 或 0000。

現(xiàn)在打開(kāi) OLED 應(yīng)用程序并選擇已配對(duì)的藍(lán)牙設(shè)備 HC-06,如下圖所示:

pYYBAGMsLtKAPZWtAAB8tonNhdM642.png

現(xiàn)在OLED 應(yīng)用程序?qū)@示從 android 手機(jī)獲取的數(shù)據(jù),如下所示:

poYBAGMsLtOACOAwAAA5NHjo6OY126.png

為 OLED 智能手表編程 Arduino

在這個(gè)項(xiàng)目的最后給出了帶有演示視頻的完整程序,這里我們解釋了幾部分代碼。

首先使用下面的鏈接從 Github 下載 Adafruit 庫(kù)和 GFX 庫(kù)

阿達(dá)果圖書(shū)館

GFX 圖形庫(kù)

然后從包含所有必需的庫(kù)開(kāi)始

#include
SoftwareSerial Serial1(10, 11);

#include
#include
#include
#include “Adafruit_SSD1306.h”

#define OLED_RESET 4
Adafruit_SSD1306 顯示(OLED_RESET);
在此之后,我們?yōu)椴煌牟僮鞫x了一些宏和變量。

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
字符串 str = "";
字節(jié) h = 0;
字節(jié) m = 0;
字節(jié) S = 0;
String dmy、時(shí)間、網(wǎng)絡(luò)、電池、inNumber、s;
字節(jié)中心X = 24;
字節(jié)中心Y = 39;
字節(jié)半徑 = 24;

雙 RAD = 3.141592 / 180;
雙 LR = 89.99;
在此之后為模擬時(shí)鐘編寫(xiě)一個(gè)函數(shù)。

無(wú)效 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);
}
然后還有另一個(gè)數(shù)字時(shí)鐘功能。

無(wú)效數(shù)字時(shí)鐘()
{
display.setTextSize(1);
display.setTextColor(白色);
display.setCursor(60, 20);
display.println(dmy);
display.setTextSize(2);
display.setCursor(60, 30);
display.println(時(shí)間);
顯示.顯示();
延遲(2000);
}

poYBAGMsLteAbRF8AACJAP0bBBo950.jpg

然后 OLED 將使用以下功能以數(shù)字和圖形形式顯示電池狀態(tài)。

無(wú)效電池()
{
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

以下函數(shù)也用于以數(shù)字和圖形形式顯示網(wǎng)絡(luò)狀態(tài)。

無(wú)效網(wǎng)絡(luò)()
{
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;
整數(shù) x1 = 24, y1 = 50, x2 = 4, y2 = 5;
…………
......

pYYBAGMsLtyAQfw1AAB3QkxN9wk753.jpg

在設(shè)置功能之后,我們初始化了我們?cè)谶@個(gè)項(xiàng)目中使用的所有通信和模塊。

無(wú)效設(shè)置()
{
序列號(hào).開(kāi)始(9600);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);// 使用 I2C 地址 0x3D 初始化(對(duì)于 128x64)
display.clearDisplay();
Serial1.開(kāi)始(9600);
Serial1.println("系統(tǒng)就緒");
}
在循環(huán)功能中,我們從 android mobile 接收數(shù)據(jù)并解碼該數(shù)據(jù)并將它們發(fā)送到 OLED 顯示器。

無(wú)效循環(huán)(){
Serial1.println("1234");
延遲(1000);
而(Serial1.available()> 0){
char ch = Serial1.read();
str += 通道;
如果 (ch == '$'){
dmy = str.substring(str.indexOf("#") + 1, str.indexOf(""));
時(shí)間 = str.substring(str.indexOf(" ") + 1, str.indexOf(",") - 3);
網(wǎng)絡(luò) = 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);
數(shù)碼時(shí)鐘();
電池();
網(wǎng)絡(luò)();
}
這就是我們?nèi)绾螌?OLED 與智能手機(jī)無(wú)線(xiàn)連接,并將我們想要的任何數(shù)據(jù)從智能手機(jī)發(fā)送或同步到 OLED。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 智能手機(jī)
    +關(guān)注

    關(guān)注

    66

    文章

    18493

    瀏覽量

    180221
  • OLED
    +關(guān)注

    關(guān)注

    119

    文章

    6200

    瀏覽量

    224215
  • 智能手表
    +關(guān)注

    關(guān)注

    36

    文章

    3288

    瀏覽量

    114078
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何將數(shù)組的的字符重新連接起來(lái)保存?

    TEMP[2]依次存入,直到4存入TEMP[7], 問(wèn)題是:如何將數(shù)組的的字符重新連接起來(lái)保存?如何定義新的變量str?使str=\"ABCD1234\"?
    發(fā)表于 04-16 07:39

    如何數(shù)據(jù)庫(kù)的資料與報(bào)表連接起來(lái)

    如何數(shù)據(jù)庫(kù)的資料與報(bào)表連接起來(lái)
    發(fā)表于 08-07 16:04

    如何將PLC通信口與無(wú)線(xiàn)數(shù)據(jù)終端連接起來(lái)??

    `如何將PLC通信口與無(wú)線(xiàn)數(shù)據(jù)終端連接起來(lái),實(shí)現(xiàn)PLC與PLC之間,PLC與HMI觸摸屏間,PLC與PC組態(tài)軟件以及PLC與設(shè)備之間的無(wú)線(xiàn)數(shù)據(jù)交換!關(guān)注微信公眾號(hào)【PLC無(wú)線(xiàn)通訊】解決您的一切煩惱!`
    發(fā)表于 09-28 09:49

    如何把數(shù)據(jù)庫(kù)和其他程序連接起來(lái)?

    各位大神,我現(xiàn)在遇到一個(gè)問(wèn)題。我想把已經(jīng)采集好的數(shù)據(jù)和數(shù)據(jù)庫(kù)的進(jìn)行對(duì)比,然后檢索出相應(yīng)的文字出來(lái)。我已經(jīng)把采集的數(shù)據(jù)編成代碼了,數(shù)據(jù)庫(kù)相應(yīng)的文字也用代碼來(lái)進(jìn)行代替。但是現(xiàn)在我不是很清楚如何將他們連接起來(lái)。兩個(gè)小程序分別運(yùn)行沒(méi)有問(wèn)題,但是
    發(fā)表于 04-13 11:16

    請(qǐng)問(wèn)由數(shù)字組成的字符串怎么連接起來(lái)?

    想問(wèn)一下關(guān)于字符串連接的問(wèn)題我想做一個(gè)手機(jī)界面,通過(guò)按鍵輸入手機(jī)號(hào),其實(shí)就是由數(shù)字組成的字符串,但是不知道如何將這些個(gè)‘0’,‘1’,‘2’……連接
    發(fā)表于 03-29 06:35

    如何將IC的SCL和SDA引腳與FPGA板連接起來(lái)?

    Aoa ..我想將我的FPGA板(virtex6 ML605)與外部時(shí)鐘IC(ds1307)連接起來(lái)。請(qǐng)指導(dǎo)我如何將IC的SCL和SDA引腳與FPGA板連接。謝謝
    發(fā)表于 04-29 08:13

    如何將藍(lán)牙與STM32連接起來(lái)

    藍(lán)牙模塊有何功能?如何將藍(lán)牙與STM32連接起來(lái)呢?
    發(fā)表于 11-18 07:02

    如何將STM32L412與STUSB1602 TCPC連接起來(lái)呢?

    你好我目前正在嘗試 STM32L412 與 STUSB1602 TCPC 連接起來(lái)。我試圖通過(guò)為另一個(gè) MCU 移植一個(gè)現(xiàn)有的 STUSB1602 軟件庫(kù)來(lái)開(kāi)始這個(gè)工作。看起來(lái)這個(gè)端口可能非常艱巨且容易出錯(cuò)。有沒(méi)有人成功地做到
    發(fā)表于 12-28 07:13

    如何將Eink顯示器與esp32連接起來(lái)?

    一般來(lái)說(shuō),我是嵌入式系統(tǒng)和 ESP-IDF 的新手。我正在嘗試 Eink 顯示器與 esp32 連接起來(lái),但我對(duì)如何為其編寫(xiě)代碼有點(diǎn)迷茫。有沒(méi)有我可以參考的指南或教程?
    發(fā)表于 03-01 06:36

    如何將hwirq與中斷連接起來(lái)?

    的 MSIR7 寄存器設(shè)置中斷 0 位。那么,當(dāng)那個(gè)中斷到達(dá)時(shí),我該如何調(diào)用我的 interrupt_handler 函數(shù)呢?我想我應(yīng)該使用 irq_create_mapping 和 request_irq Linux 函數(shù),但我不知道如何將 hwirq 與我的中斷鏈接起來(lái)
    發(fā)表于 03-14 08:20

    如何將Eink顯示器與esp32接口連接起來(lái)?

    一般來(lái)說(shuō),我是嵌入式系統(tǒng)和 ESP-IDF 的新手。我正在嘗試 Eink 顯示器與 esp32 連接起來(lái),但我對(duì)如何為其編寫(xiě)代碼有點(diǎn)迷茫。有沒(méi)有我可以參考的指南或教程?
    發(fā)表于 04-13 08:09

    HC-05和MSP430連接起來(lái)控制LED的方式

     今天我們學(xué)習(xí)如何將藍(lán)牙模塊 HC-05 與德州儀器 (TI) 的 MSP430 Launchpad 連接起來(lái)。在這個(gè)接口示例中,我們將使用藍(lán)牙終端安卓應(yīng)用程序從智能手機(jī)控制 MSP
    發(fā)表于 08-29 17:30 ?1583次閱讀
    <b class='flag-5'>將</b>HC-05和MSP430<b class='flag-5'>連接起來(lái)</b>控制LED的方式

    RF 433MHz發(fā)射器/接收器模塊與MCU連接起來(lái)

    電子發(fā)燒友網(wǎng)站提供《RF 433MHz發(fā)射器/接收器模塊與MCU連接起來(lái).zip》資料免費(fèi)下載
    發(fā)表于 06-13 09:24 ?4次下載
    <b class='flag-5'>將</b>RF 433MHz發(fā)射器/接收器模塊與MCU<b class='flag-5'>連接起來(lái)</b>

    TLC32040系列與TMS320系列連接起來(lái)

    電子發(fā)燒友網(wǎng)站提供《TLC32040系列與TMS320系列連接起來(lái).pdf》資料免費(fèi)下載
    發(fā)表于 10-08 14:15 ?0次下載
    <b class='flag-5'>將</b>TLC32040系列與TMS320系列<b class='flag-5'>連接起來(lái)</b>

    I2S器件與MSP430器件連接起來(lái)

    電子發(fā)燒友網(wǎng)站提供《I2S器件與MSP430器件連接起來(lái).pdf》資料免費(fèi)下載
    發(fā)表于 10-18 09:31 ?0次下載
    <b class='flag-5'>將</b>I2S器件與MSP430器件<b class='flag-5'>連接起來(lái)</b>