登录/注册

oled/LIS3DH显示屏

更多

看到你提到 OLED/LIS3DH 显示屏组合,我理解你大概率是希望在项目中同时使用 OLED 显示屏和 LIS3DH 加速度计传感器,并将 LIS3DH 读取的数据(如倾斜角度、运动方向等)实时显示在 OLED 屏幕上。?

这两个器件是电子项目中非常常见的组合:

  1. LIS3DH: 一款由意法半导体 (STMicroelectronics) 生产的低成本、低功耗、三轴加速度计传感器(不是显示屏)。
    • 它通过 I2C 或 SPI 接口输出 X, Y, Z 三个方向的加速度数据。
    • 常用于检测倾斜、运动、振动、点击/双击等。
  2. OLED (Organic Light-Emitting Diode) 显示屏: 一种使用有机发光二极管的显示屏幕
    • 常见规格:128x64像素、128x32像素、0.96英寸或1.3英寸尺寸(最常见的是0.96英寸 128x64)。
    • 优点是:自发光(不需要背光)、高对比度、宽视角、响应速度快、可显示清晰图案和文字。
    • 接口通常是 I2C (省线) 或 SPI (速度快),接口选择会影响到代码和接线方式。

如何将两者结合使用?

  1. 硬件连接 (核心是共享 I2C 总线):

    • 选择接口: 大多数情况下,为了方便,OLED 和 LIS3DH 都选择 I2C 接口模式。它们可以共享同一个 I2C 总线(即 SCLSDA 两根线)。

    • 连线要点:

      • 将 OLED 的 VCC 连接到主控板(如 Arduino)的 3.3V5V (取决于OLED模块规格,多数5V兼容)。
      • 将 OLED 的 GND 连接到主控板的 GND
      • 将 OLED 的 SCL 连接到主控板的 I2C SCL 引脚(如 Arduino Uno/Nano 的 A5)。
      • 将 OLED 的 SDA 连接到主控板的 I2C SDA 引脚(如 Arduino Uno/Nano 的 A4)。
      • 将 LIS3DH 的 VCC 连接到 3.3V ⚠️非常重要! LIS3DH 通常工作在 2.16V - 3.6V 范围,连接到 5V 可能损坏!如果你的主控板只有 5V,需要使用电平转换器。
      • 将 LIS3DH 的 GND 连接到主控板的 GND
      • 将 LIS3DH 的 SCL 连接到主控板的 SCL (与 OLED 共享)。
      • 将 LIS3DH 的 SDA 连接到主控板的 SDA (与 OLED 共享)。
      • LIS3DH 可能需要连接 CS 引脚到高电平 (VCC) 以启用 I2C 模式(具体看模块说明)。
      • (可选) LIS3DH 的中断引脚 (INT1, INT2) 可以连接到主控板的数字输入引脚用于触发中断。
    • ? 关键点:I2C 地址冲突检查!

      • OLED I2C 地址常见为 0x3C (最普遍) 或 0x3D (当模块上有电阻配置时)。
      • LIS3DH I2C 地址取决于 SA0/SDO 引脚的电平:接地 (LOW) 时为 0x18,接电源 (HIGH) 时为 0x19
      • 必须确保 OLED 和 LIS3DH 的 I2C 地址不同(0x3C vs 0x180x19)才能同时挂在总线上! 如果不相同,配置地址即可解决冲突问题。
  2. 软件 (Arduino 示例思路):

    • 安装库:
      • OLED 库: 安装 Adafruit SSD1306Adafruit GFX Library (通过 Arduino IDE 库管理器搜索安装)。
      • LIS3DH 库: 安装 Adafruit LIS3DH 库 (通过 Arduino IDE 库管理器搜索安装)。
    • 代码流程:

      #include <Wire.h>
      #include <Adafruit_GFX.h>
      #include <Adafruit_SSD1306.h>
      #include <Adafruit_LIS3DH.h>
      #include <Adafruit_Sensor.h>
      
      // 定义OLED尺寸 (常见128x64, 128x32)
      #define SCREEN_WIDTH 128
      #define SCREEN_HEIGHT 64
      #define OLED_ADDR 0x3C // OLED的I2C地址,通常0x3C
      
      // 创建OLED对象
      Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
      
      // 创建LIS3DH对象
      Adafruit_LIS3DH lis = Adafruit_LIS3DH(); // 使用默认地址0x18
      // 如果地址不同(0x19),需修改构造函数: Adafruit_LIS3DH lis = Adafruit_LIS3DH(0x19);
      
      void setup() {
        Serial.begin(9600);
      
        // 初始化OLED
        if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
          Serial.println(F("SSD1306 allocation failed"));
          for(;;); // 死循环
        }
        display.display(); // 显示Adafruit Logo
        delay(2000);       // 暂停2秒
        display.clearDisplay(); // 清除缓冲区
        display.setTextSize(1);
        display.setTextColor(SSD1306_WHITE);
        display.setCursor(0,0);
      
        // 初始化LIS3DH
        if (! lis.begin(0x18)) { // 根据实际连接的SA0/SDO引脚调整地址参数 (0x18 或 0x19)
          Serial.println("LIS3DH not found");
          display.println("LIS3DH not found!");
          display.display();
          while (1);
        }
      
        lis.setRange(LIS3DH_RANGE_4_G); // 设置量程(可选: 2_G, 4_G, 8_G, 16_G)
      
        Serial.println("LIS3DH and OLED found!");
        display.println("LIS3DH OK!");
        display.display();
        delay(1000);
        display.clearDisplay();
      }
      
      void loop() {
        // 清除显示缓冲区
        display.clearDisplay();
        display.setCursor(0,0);
      
        // 读取LIS3DH数据 (G为单位)
        sensors_event_t event;
        lis.getEvent(&event);
      
        // 在串口监视器打印
        Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("  ");
        Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("  ");
        Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.println(" m/s^2");
      
        // 在OLED上显示标题
        display.println("Accel (m/s^2):");
      
        // 在OLED上格式化显示X, Y, Z数据
        display.print("X: "); display.println(event.acceleration.x, 2); // 保留2位小数
        display.print("Y: "); display.println(event.acceleration.y, 2);
        display.print("Z: "); display.println(event.acceleration.z, 2);
      
        // 你也可以显示其他信息,比如角度或状态
        // float angleX = atan2(event.acceleration.y, event.acceleration.z) * RAD_TO_DEG;
        // display.print("Angle X: "); display.println(angleX, 1);
      
        // 将缓冲区内容发送到OLED显示
        display.display();
      
        delay(200); // 稍作延时,更新速率约为5Hz
      }

常见问题 & 解决:

总结:

OLED 和 LIS3DH 是非常适合搭配的硬件 - OLED 清晰显示数据,LIS3DH 提供实时的动态感知。使用中关键是 I2C 地址不能冲突,以及 LIS3DH 务必使用 3.3V 供电。库的使用让代码编写相对简单。

如果你需要关于具体接线图(哪个模块需要连到哪个开发板的哪个引脚?)、更高级的功能实现(如检测点击、手势或绘制图形?),或者遇到了特定错误,请告诉我你使用的开发板型号、OLED尺寸和遇到的问题细节,我很乐意继续深入探讨!?

LIS3DH的应用笔记

本文档介绍了以 LGA 封装提供的低压 3 轴数字量输出线性 MEMS 加速度计。LIS3DH 是属于 “nano” 系列的超低功耗高性能 3

2023-09-13 06:53:17

LIS3DH相关资料分享

LIS3DH 是属于 “nano” 系列的超低功耗高性能 3 轴线性加速度计,具有数字 I2C、 SPI 串行接口标准输出。器件具有超低功耗工作模式,可实现高级节能、智能睡眠唤醒以及恢复睡眠功能。

2023-09-06 08:08:49

LIS3DH的零偏移值是多少?

LIS3DH加速度计出厂校准后,加速度计给出的值范围是多少(选择12位输出)。我从加速度计获得 X 轴的 20-30 ADC 计数,其中 Y 轴的 -1 到 3 计数。为什么会有更大的差异请回答,谢谢。

2023-01-12 07:03:21

LIS3DH高性能3轴线性加速度计应用笔记

本文档介绍了以 LGA 封装提供的低压 3 轴数字量输出线性 MEMS 加速度计。 LIS3DH 是属于 “nano” 系列的超低功耗高性能 3

资料下载 乐侨珂 2023-07-31 09:44:39

LCD、OLED液晶显示屏完整中文资料合集

LCD、OLED液晶显示屏完整中文资料合集

资料下载 ChenGuanQing 2022-01-17 09:39:48

stm32 硬件IIC使用方法说明与示例---LIS3DH的IIC通信

例子很多。这里我需要使用LIS3DH三轴加速度传感器,获取三个方向的加速度用于碰撞检测。这个是LIS3DH数据刷新速率的配置寄存器:出于某些原因,我需要达到500hz以上的数据刷新速率,所以ODR要配置成0b1000

资料下载 mintsy 2021-12-09 12:21:10

IIC通信小OLED显示屏模块资料汇总

IIC通信小OLED显示屏模块资料汇总

资料下载 jf_42320578 2021-05-20 15:38:44

1.3OLED显示屏IIC接口电路原理图免费下载

本文档的主要内容详细介绍的是1.3OLED显示屏IIC接口电路原理图免费下载。

资料下载 佚名 2019-12-20 16:41:37

LIS3DH一旦设置了ODR是否需要延迟以确保数据稳定呢?

我正在使用 LIS3DH。应用笔记 AN3308 在执行自测的建议过程中指定了配置和读取数据之间的 90 毫秒延迟时间(DocID18198 修订版 3 的第 57 页)。延迟

2023-01-05 08:22:11

LIS3DH地址更改配置后的问题求解

我正在使用表现出奇怪行为的 LIS3DH 分线板。我的 I2C master 是一块 STM32L496 板,已经用其他 I2C 芯片测试过。 启动I2C 初始化至 400 KHz通过

2022-12-28 11:05:15

LiS3DH传感器的高电平输入电流是多少?

不确定这是否回答了您的问题,但您可以将此信息参考 LIS3DH 的下一代加速度计,但在这个意义上非常相似,即LIS2DW12,数据表第 7 页:这里,4 mA 是最大驱动能力,即数字焊盘可以提供/吸收的最大直流电流,

2022-12-07 12:02:55

LIS3DH加速度计的质量(或重量)是多少?

嗨,我想知道 LIS3DH 加速度计的质量(或重量)是多少。谢谢

2022-12-02 07:24:08

LIS3DH INT1_THS设置问题

我想要做一个LIS3DH角度报警的程序 目前中断 角度值都可以实现,但是关于设置报警的角度时遇到了问题,如何设置INT1_THS寄存器都只会让角度在80-90之间进行报警,无法在自己想要的角度区间

2022-04-24 10:42:29

LIS3DH寄存器配置and调试的相关资料分享

LIS3DH寄存器配置and调试记录最近两周做一个LIS3DH+国产蓝牙芯片(FR8016)计步功能项目,LIS3DH调试过程中出现了很多坑,亲

2022-01-11 07:06:38

LIS3DH的INT线保持低电平

嗨, 所以,时间到了,我使用2个LIS3DH加速度计(分配给它们的两个不同的地址),它们都在我的微控制器上使用相同的I2C线和相同的INT线。 这是它的设计方式,现在必须使它们都工作(不是同时

2019-06-12 08:47:49
7天热门专题 换一换
相关标签