精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

使用第三方開(kāi)源庫(kù)驅(qū)動(dòng)OLED模塊

CHANBAEK ? 來(lái)源:魚(yú)香ROS ? 作者:小魚(yú) ? 2023-07-13 15:00 ? 次閱讀

你好,我是愛(ài)吃魚(yú)香ROS的小魚(yú)。本節(jié)我們繼續(xù)嘗試使用開(kāi)源庫(kù),驅(qū)動(dòng)OLED模塊,最后的效果實(shí)現(xiàn)在OLED上顯示當(dāng)前的角度信息

教程所使用硬件平臺(tái)為MicroROS學(xué)習(xí)板V1.0.0,可點(diǎn)擊閱讀原文購(gòu)買及查看詳情

圖片

我們MicroROS開(kāi)發(fā)板上的OLED位置如圖所示。

圖片

一、OLED模塊介紹

我們的OLDE模塊樣子如上圖所示,整個(gè)屏幕有128*64個(gè)像素點(diǎn),我們可以實(shí)現(xiàn)對(duì)每一個(gè)像素點(diǎn)的亮滅控制,以此實(shí)現(xiàn)對(duì)屏幕顯示內(nèi)容的控制。注意我們并不能控制屏幕上像素的顏色,所以我們OLED一般是單色的。

那我們?nèi)绾慰刂扑牧翜缒兀梢钥吹皆贠LED的上方一共有四個(gè)引腳,從左到右依次是GND、VCC、SCL、SDA,其中GND、VCC是用于OLED的供電使用,SCL和SDA是I2C通信使用。

聽(tīng)到I2C通信是不是覺(jué)得很熟悉,畢竟上一節(jié)驅(qū)動(dòng)MPU6050時(shí)我們就是使用的I2C協(xié)議(Wrie),別著急,我們先用著,下一節(jié)我們?cè)僭敿?xì)介紹I2C通信。

二、新建工程并安裝依賴

圖片

安裝依賴,可以直接修改>platformio.ini

[env:featheresp32]
platform = espressif32
board = featheresp32
framework = arduino
lib_deps = 
    https://ghproxy.com/https://github.com/rfetick/MPU6050_light.git
    adafruit/Adafruit SSD1306@^2.5.7

接著打開(kāi)IMU的源碼目錄,將pio/libdeps/featheresp32/MPU6050_light/examples/GetAngle/GetAngle.ino文件內(nèi)容復(fù)制到main.cpp中,接著修改波特率和I2C地址。

#include "Wire.h"
#include < MPU6050_light.h >

MPU6050 mpu(Wire);
unsigned long timer = 0;

void setup()
{
  Serial.begin(115200);
  Wire.begin(18, 19);

  byte status = mpu.begin();
  Serial.print(F("MPU6050 status: "));
  Serial.println(status);
  while (status != 0)
  {
  } // stop everything if could not connect to MPU6050

  Serial.println(F("Calculating offsets, do not move MPU6050"));
  delay(1000);
  // mpu.upsideDownMounting = true; // uncomment this line if the MPU6050 is mounted upside-down
  mpu.calcOffsets(); // gyro and accelero
  Serial.println("Done!n");
}

void loop()
{
  mpu.update();

  if ((millis() - timer) > 10)
  { // print data every 10ms
    Serial.print("X : ");
    Serial.print(mpu.getAngleX());
    Serial.print("tY : ");
    Serial.print(mpu.getAngleY());
    Serial.print("tZ : ");
    Serial.println(mpu.getAngleZ());
    timer = millis();
  }
}

三、使用Adafruit庫(kù)驅(qū)動(dòng)OLED

該庫(kù)提供的驅(qū)動(dòng)例程較為復(fù)雜,小魚(yú)這里提供一個(gè)簡(jiǎn)易版本。

#include "Wire.h"
#include < Adafruit_GFX.h >     // 加載Adafruit_GFX庫(kù)
#include < Adafruit_SSD1306.h > // 加載Adafruit_SSD1306庫(kù)
Adafruit_SSD1306 display;     // 聲明對(duì)象

void setup()
{
  Wire.begin(18, 19);
  display = Adafruit_SSD1306(128, 64, &Wire);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 設(shè)置OLED的I2C地址,默認(rèn)0x3C
  display.clearDisplay();                    // 清空屏幕
  display.setTextSize(2);                    // 設(shè)置字體大小,最小為1
  display.setCursor(0, 0);                   // 設(shè)置開(kāi)始顯示文字的坐標(biāo)
  display.setTextColor(SSD1306_WHITE);       // 設(shè)置字體顏色
  display.println("hello oled!");             // 輸出的字符
}

void loop()
{
  
}

根據(jù)上面的簡(jiǎn)易版本,修改原有的IMU代碼,最后得到如下代碼

/* Get tilt angles on X and Y, and rotation angle on Z
 * Angles are given in degrees
 *
 * License: MIT
 */

#include "Wire.h"
#include < MPU6050_light.h >
#include < Adafruit_GFX.h >     // 加載Adafruit_GFX庫(kù)
#include < Adafruit_SSD1306.h > // 加載Adafruit_SSD1306庫(kù)

Adafruit_SSD1306 display;
MPU6050 mpu(Wire);
unsigned long timer = 0;

void setup()
{
  Serial.begin(115200);
  Wire.begin(18, 19);
  /*========================OLED初始化====================================*/
  display = Adafruit_SSD1306(128, 64, &Wire);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 設(shè)置OLED的I2C地址
  display.clearDisplay();                    // 清空屏幕
  display.setTextSize(2);                    // 設(shè)置字體大小
  display.setCursor(0, 0);                   // 設(shè)置開(kāi)始顯示文字的坐標(biāo)
  display.setTextColor(SSD1306_WHITE);       // 設(shè)置字體顏色
  display.println("hello oled!");            // 輸出的字符
  display.display();

  /*========================IMU初始化====================================*/
  byte status = mpu.begin();
  Serial.print(F("MPU6050 status: "));
  Serial.println(status);
  while (status != 0)
  {
  } // stop everything if could not connect to MPU6050

  Serial.println(F("Calculating offsets, do not move MPU6050"));
  delay(1000);
  // mpu.upsideDownMounting = true; // uncomment this line if the MPU6050 is mounted upside-down
  mpu.calcOffsets(); // gyro and accelero
  Serial.println("Done!n");
}

void loop()
{
  mpu.update();

  if ((millis() - timer) > 100)
  { // print data every 100ms
    Serial.print("X : ");
    Serial.print(mpu.getAngleX());
    Serial.print("tY : ");
    Serial.print(mpu.getAngleY());
    Serial.print("tZ : ");
    Serial.println(mpu.getAngleZ());
    timer = millis();
    /*==========================OLED顯示===========================*/
    display.clearDisplay();  // 清空屏幕
    display.setCursor(0, 0); // 設(shè)置開(kāi)始顯示文字的坐標(biāo)
    display.print("X=");   // 輸出X
    display.println(mpu.getAngleX());
    display.print("Y="); // 輸出Y
    display.println(mpu.getAngleY());
    display.print("Z="); // 輸出Z
    display.println(mpu.getAngleZ());
    display.display();
  }
}

四、下載測(cè)試

接上OLED,將代碼編譯下載到開(kāi)發(fā)板上,觀察OLED的顯示。

五、總結(jié)

本節(jié)依然是很輕松的完成了OLED驅(qū)動(dòng),但你應(yīng)該有個(gè)疑問(wèn),為什么OLED和MPU6050代碼里都有這么一句Wire.begin(18, 19);,為什么都是18和19,不能是其他的數(shù)值嗎?帶著疑惑,下一節(jié)小魚(yú)帶你一起探秘I2C通信以及原理圖。

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

    關(guān)注

    7

    文章

    2673

    瀏覽量

    47347
  • OLED
    +關(guān)注

    關(guān)注

    119

    文章

    6182

    瀏覽量

    223854
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1482

    瀏覽量

    123335
  • 學(xué)習(xí)板
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    12154
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    276

    瀏覽量

    16967
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    proteus第三方元器件庫(kù)

    本帖最后由 eehome 于 2013-1-5 09:59 編輯 網(wǎng)上找的,_proteus第三方元器件庫(kù)。解壓后直接安裝。
    發(fā)表于 12-05 08:23

    如何加入第三方元件庫(kù)

    最近在做食堂管理系統(tǒng)的仿真,需要向元件庫(kù)中添加第三方元件庫(kù),需要用到SLE4442卡,不知道上哪去下載含此類元件的庫(kù),以及如何添加?
    發(fā)表于 04-21 13:00

    如何把第三方庫(kù)加到PROTEUS中?

    新手求教,弱弱的問(wèn)下,下了一個(gè)第三方庫(kù),說(shuō)是要先安裝,再添加路徑,可是我下來(lái)的第三方庫(kù)沒(méi)有看到安裝文件啊。還望指教如何添加!
    發(fā)表于 06-15 22:32

    關(guān)于proteus第三方元件庫(kù)的問(wèn)題

    下了兩個(gè)第三方元件庫(kù),然后就不知道放哪了,也不知道怎么調(diào)用。百度不到,求大神解答。謝了!
    發(fā)表于 11-13 08:56

    Proteus 第三方元件庫(kù)

    第三方元件庫(kù),基本包含大部分常用元件的,分享給大家。
    發(fā)表于 04-16 22:06

    第三方dll調(diào)用問(wèn)題!!!

    第三方dll,沒(méi)有.h,labview怎么實(shí)現(xiàn)調(diào)用,dll可以用VS打開(kāi),類庫(kù)說(shuō)明也有
    發(fā)表于 05-11 09:14

    proteus第三方元件庫(kù)

    proteus第三方元件庫(kù)
    發(fā)表于 05-26 10:44

    下載python第三方庫(kù)

    python第三方庫(kù)的下載
    發(fā)表于 07-02 13:12

    怎樣去調(diào)用一個(gè)第三方驅(qū)動(dòng)庫(kù)

    怎樣去調(diào)用一個(gè)第三方驅(qū)動(dòng)庫(kù)呢?如何用IIC驅(qū)動(dòng)Terawins的圖像處理芯片T613呢?
    發(fā)表于 03-04 06:59

    鴻蒙開(kāi)源第三方組件資料合集

    1、鴻蒙開(kāi)源第三方組件——日志工具組件Timber_ohosTimber_ohos是一個(gè)帶有小型可擴(kuò)展API的日志工具組件,它可以給開(kāi)發(fā)者提供統(tǒng)一的API接口,來(lái)記錄不同類型的日志,幫助開(kāi)發(fā)者管理
    發(fā)表于 03-23 09:53

    proteus第三方元件庫(kù)下載

    proteus第三方元件庫(kù) DEV_SPEC_FUNCT.LIB,DEV_TEXAS.LIB,DEV_DSIMM.LIB,DEV_AD.LIB, DEV_MEMORY.LIB,DEV_OPTICAL.LIB,LCD_SYMBOLS.LIB等等。
    發(fā)表于 05-19 15:47 ?0次下載

    移動(dòng)應(yīng)用第三方庫(kù)自動(dòng)檢測(cè)和分類

    移動(dòng)應(yīng)用中,廣泛使用第三方庫(kù)來(lái)幫助開(kāi)發(fā)和增強(qiáng)應(yīng)用功能.很多關(guān)于移動(dòng)應(yīng)用分析以及訪問(wèn)控制的研究工作,需要在分析之前對(duì)第三方庫(kù)進(jìn)行檢測(cè)、過(guò)濾或者對(duì)其進(jìn)行功能分類.當(dāng)前,大部分研究工作都以使
    發(fā)表于 12-29 14:35 ?0次下載

    鴻蒙開(kāi)發(fā)中怎么引入第三方庫(kù)

    Android 發(fā)展到現(xiàn)在不僅提供了很多 API,還提供了很多第三方庫(kù)。這降低了我們開(kāi)發(fā)者的開(kāi)發(fā)難度,提升了開(kāi)發(fā)效率,讓應(yīng)用開(kāi)發(fā)更加的簡(jiǎn)單高效。 眾所周知,HarmonyOS 除了提供 16000
    的頭像 發(fā)表于 10-11 14:11 ?4010次閱讀

    學(xué)會(huì)安裝第三方開(kāi)源庫(kù)

    你好,我是愛(ài)吃魚(yú)香ROS的小魚(yú)。秉承著拒絕重復(fù)造輪子的ROS精神,本節(jié)我們學(xué)習(xí)如何在我們的工程里安裝第三方開(kāi)源庫(kù)
    的頭像 發(fā)表于 07-13 14:35 ?967次閱讀
    學(xué)會(huì)安裝<b class='flag-5'>第三方</b><b class='flag-5'>開(kāi)源</b><b class='flag-5'>庫(kù)</b>

    python第三方庫(kù)有哪些

    Python 作為一門功能強(qiáng)大的編程語(yǔ)言,擁有豐富的第三方庫(kù),幾乎覆蓋了各個(gè)領(lǐng)域的應(yīng)用。下面是一些常見(jiàn)且廣泛應(yīng)用的 Python 第三方庫(kù)的總結(jié),希望能為您提供幫助。 NumPy(Nu
    的頭像 發(fā)表于 11-29 14:31 ?2097次閱讀