<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用第三方開源庫驅動OLED模塊

CHANBAEK ? 來源:魚香ROS ? 作者:小魚 ? 2023-07-13 15:00 ? 次閱讀

你好,我是愛吃魚香ROS的小魚。本節我們繼續嘗試使用開源庫,驅動OLED模塊,最后的效果實現在OLED上顯示當前的角度信息。

教程所使用硬件平臺為MicroROS學習板V1.0.0,可點擊閱讀原文購買及查看詳情

圖片

我們MicroROS開發板上的OLED位置如圖所示。

圖片

一、OLED模塊介紹

我們的OLDE模塊樣子如上圖所示,整個屏幕有128*64個像素點,我們可以實現對每一個像素點的亮滅控制,以此實現對屏幕顯示內容的控制。注意我們并不能控制屏幕上像素的顏色,所以我們OLED一般是單色的。

那我們如何控制它的亮滅呢,可以看到在OLED的上方一共有四個引腳,從左到右依次是GND、VCC、SCL、SDA,其中GND、VCC是用于OLED的供電使用,SCL和SDA是I2C通信使用。

聽到I2C通信是不是覺得很熟悉,畢竟上一節驅動MPU6050時我們就是使用的I2C協議(Wrie),別著急,我們先用著,下一節我們再詳細介紹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

接著打開IMU的源碼目錄,將pio/libdeps/featheresp32/MPU6050_light/examples/GetAngle/GetAngle.ino文件內容復制到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庫驅動OLED

該庫提供的驅動例程較為復雜,小魚這里提供一個簡易版本。

#include "Wire.h"
#include < Adafruit_GFX.h >     // 加載Adafruit_GFX庫
#include < Adafruit_SSD1306.h > // 加載Adafruit_SSD1306庫
Adafruit_SSD1306 display;     // 聲明對象

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

void loop()
{
  
}

根據上面的簡易版本,修改原有的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庫
#include < Adafruit_SSD1306.h > // 加載Adafruit_SSD1306庫

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); // 設置OLED的I2C地址
  display.clearDisplay();                    // 清空屏幕
  display.setTextSize(2);                    // 設置字體大小
  display.setCursor(0, 0);                   // 設置開始顯示文字的坐標
  display.setTextColor(SSD1306_WHITE);       // 設置字體顏色
  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); // 設置開始顯示文字的坐標
    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();
  }
}

四、下載測試

接上OLED,將代碼編譯下載到開發板上,觀察OLED的顯示。

五、總結

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2528

    瀏覽量

    46729
  • OLED
    +關注

    關注

    119

    文章

    6060

    瀏覽量

    222041
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    121215
  • 學習板
    +關注

    關注

    0

    文章

    40

    瀏覽量

    12089
  • ROS
    ROS
    +關注

    關注

    1

    文章

    273

    瀏覽量

    16783
收藏 人收藏

    評論

    相關推薦

    proteus第三方元器件

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

    如何加入第三方元件

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

    如何把第三方加到PROTEUS中?

    新手求教,弱弱的問下,下了一個第三方,說是要先安裝,再添加路徑,可是我下來的第三方沒有看到安裝文件啊。還望指教如何添加!
    發表于 06-15 22:32

    關于proteus第三方元件的問題

    下了兩個第三方元件,然后就不知道放哪了,也不知道怎么調用。百度不到,求大神解答。謝了!
    發表于 11-13 08:56

    下載完第三方軟件后怎么讓protues識別???跪求大神們...

    下載完第三方軟件后怎么讓protues識別???
    發表于 12-11 18:15

    Proteus 第三方元件

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

    第三方dll調用問題?。?!

    第三方dll,沒有.h,labview怎么實現調用,dll可以用VS打開,類說明也有
    發表于 05-11 09:14

    proteus第三方元件

    proteus第三方元件
    發表于 05-26 10:44

    下載python第三方

    python第三方的下載
    發表于 07-02 13:12

    國內知名第三方檢測認證機構排名

    第三方檢測機構國內起步的很晚,基本是2000年以后的事情,進入改革開放以來,特別是新世紀以來,國家對第三方機構的政策越來越放開了,很多職能部門都逐步下放到第三方機構來做。為了保證產品品質,就有
    發表于 07-19 16:57

    Keil_C++環境移植第三方出現類型錯誤問題怎樣去解決

    Keil_C++環境移植第三方出現類型錯誤問題解決@firestaradmin 2020年12月8日16:28:18死亡如風,常伴吾身。Keil里實現C++環境編程,在C/C++ 選項卡中 添加
    發表于 07-16 07:17

    頭文件中包含第三方文件

    macrocmake如果源文件(例如 CPP)中包含第三方頭文件,但是頭文件(例如 hpp)中不包含該第三方文件頭,采用 PRIVATE。如果源文件和頭文件中都包含該第三方文件頭,采用 PUBLIC
    發表于 08-18 08:10

    怎樣去調用一個第三方驅動

    怎樣去調用一個第三方驅動呢?如何用IIC驅動Terawins的圖像處理芯片T613呢?
    發表于 03-04 06:59

    鴻蒙開源第三方組件資料合集

    1、鴻蒙開源第三方組件——日志工具組件Timber_ohosTimber_ohos是一個帶有小型可擴展API的日志工具組件,它可以給開發者提供統一的API接口,來記錄不同類型的日志,幫助開發者管理
    發表于 03-23 09:53

    在Framework下調用第三方的C++算法庫

    我這里是JNI調用一個語音處理,這些廠商會以非開源的so文件形式提供。JNI在編譯時需要依賴它,所以需要先預編譯安裝第三方
    發表于 11-24 17:37
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>