Esp8266学习7. 点亮JMD0.96C-1 OLED屏

这篇具有很好参考价值的文章主要介绍了Esp8266学习7. 点亮JMD0.96C-1 OLED屏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Esp8266学习7. 点亮JMD0.96C-1 OLED屏,# ESP单片机,学习,c语言,开发语言

一、ESP32-C3 I2C资源简介

1. 简介

ESP8266具有一个I2C控制器,通常称为I2C主机。这个I2C控制器可以用来连接各种I2C外设,如传感器、显示屏等。

在ESP8266上,I2C控制器的引脚分配如下:

  • SDA(Serial Data Line):通信数据线
  • SCL(Serial Clock Line):时钟线

这两个引脚的位置可以根据具体的ESP8266开发板而有所不同。

使用ESP8266的Arduino库,可以通过以下步骤使用ESP8266的I2C功能:

  1. 引入Wire库:在Arduino代码中引入Wire库,该库提供了与I2C通信相关的函数。
  2. 初始化I2C:在setup()函数中,使用Wire.begin(sda, scl)函数初始化I2C控制器,其中sda和scl是你选择的引脚。
  3. 发送和接收数据:使用Wire.beginTransmission()和Wire.endTransmission()函数发送和接收数据。
  4. 读写数据:使用Wire.requestFrom()和Wire.write()函数来读写数据。

2. 准备工作

  • NodeMCU开发板 1.0
  • Arduino 开发工具 2.1.1

二、I2C协议简介

I2C(Inter-Integrated Circuit)是一种用于短距离通信的串行通信协议,通常用于连接芯片之间,比如连接微控制器、传感器、显示屏等。它使用两根信号线(SDA和SCL)来实现通信,具有简单、灵活和多设备连接的特点。

以下是I2C协议的基本通讯过程:

1. 起始条件(Start Condition):

通信开始前,主设备(通常是微控制器)发送一个起始条件,即将SDA从高电平转换为低电平,然后再将SCL从高电平转换为低电平。这表明通信开始。

2. 设备地址传输(Device Address Transmission):

主设备会发送要通信的设备的7位地址,最高位是读写位(0表示写操作,1表示读操作)。设备在总线上监听地址,匹配地址的设备响应。

3. 从设备响应(Slave Acknowledgment):

如果有设备的地址匹配,从设备会发送一个应答位,将SDA拉低表示接受通信。如果没有匹配设备,从设备不发送应答位,SDA保持高电平。

4. 数据传输(Data Transmission):

主设备发送数据位,从设备每接收一个位都会发送应答位。数据位是一个8位字节,从设备会在每个字节接收完毕后发送应答。

5. 停止条件(Stop Condition):

通信结束后,主设备发送一个停止条件,即将SDA从低电平转换为高电平,然后再将SCL从低电平转换为高电平。这表明通信结束。

6. 重复起始条件(Repeated Start Condition):

主设备可以在不释放总线的情况下发送重复的起始条件,用于在一个通信过程中切换到不同的设备。

I2C通信可以实现多主设备和多从设备的连接。在多主设备情况下,主设备之间需要协调以避免冲突。在多从设备情况下,每个从设备都有唯一的地址,主设备可以根据需要与特定的从设备通信。

三、I2C通讯示例

1. 接线

下面示例使用GPIO4作为 SDA引脚, GPIO5作为SCL引脚。
Esp8266学习7. 点亮JMD0.96C-1 OLED屏,# ESP单片机,学习,c语言,开发语言
从图上看到,将 OLED 屏的SDA接到 D2引脚, SCL接到 D1引脚。

如果使用ESP32C3-mini-1开发板,则把SDA接到4脚, SCL接到5脚。

2. 基本使用 查询I2C资源地址

#include <Wire.h>
// 自定义 I2C 引脚
#define SDA_PIN 4
#define SCL_PIN 5

void setup() {
  // 初始化I2C总线,指定SDA和SCL引脚
  Wire.begin(SDA_PIN, SCL_PIN);  

  Serial.begin(9600);
  while (!Serial);  // Leonardo: 等待串口监视器连接
  // 输出开始信息
  Serial.println("I2C Scanner");  
}

void loop() {
  byte error, address;
  int nDevices;
  
  // 输出正在扫描信息
  Serial.println("Scanning...");  

  // 记录找到的设备数量
  nDevices = 0;
  for (address = 1; address < 127; address++) {
    // 启动与指定地址的I2C通信
    Wire.beginTransmission(address);
    // 结束I2C通信并获取错误码
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16)
        Serial.print("0");
      // 输出找到的设备地址        
      Serial.print(address, HEX);
      // 输出设备找到的标志
      Serial.println("  !"); 

      // 增加找到设备的计数
      nDevices++; 
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16)
        Serial.print("0");
      // 输出发生错误的地址        
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0){
    // 输出没有找到设备的信息
    Serial.println("No I2C devices found");
  }
  else{
    // 输出没有找到设备的信息
    Serial.println("done");
  }
  // 等待5秒进行下一次扫描
  delay(5000);
}

运行结果可以看到I2C的设备(这里是OLED屏)地址是0x3C。
Esp8266学习7. 点亮JMD0.96C-1 OLED屏,# ESP单片机,学习,c语言,开发语言

3. 点亮OLED屏

#include <Wire.h>  // 引入Wire库
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// 在这里定义你的自定义I2C引脚
#define SDA_PIN 4
#define SCL_PIN 5


void setup() {
  Serial.begin(9600);
  Serial.println("begin...");
  // 初始化OLED显示屏对象,设置分辨率为128x64
  Wire.begin(SDA_PIN, SCL_PIN);
  Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
  // 初始化OLED显示屏
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();

  // 设置文本样式
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  // 显示提示信息 Drawing Shapes
  display.setCursor(30, 8);
  display.println("Drawing Shapes");

  // 绘制文本 Square:
  display.setTextSize(1);
  display.setCursor(10, 25);
  display.println("Square:");

  // 在屏幕内部绘制正方形
  display.drawRect(15, 40, 20, 20, SSD1306_WHITE);  // (x, y, width, height, color)

  // 显示文本 Circle:
  display.setTextSize(1);
  display.setCursor(60, 25);
  display.println("Circle:");

  // 在屏幕内部绘制圆
  display.drawCircle(80, 50, 12, SSD1306_WHITE);  // (centerX, centerY, radius, color)


  // 更新显示内容
  display.display();
  Serial.println("end");
}

void loop() {

}


运行示例:
Esp8266学习7. 点亮JMD0.96C-1 OLED屏,# ESP单片机,学习,c语言,开发语言文章来源地址https://www.toymoban.com/news/detail-653825.html

到了这里,关于Esp8266学习7. 点亮JMD0.96C-1 OLED屏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ESP8266+STM32获取网络时间、OLED显示时间&图片&视频。

    先说说我的设计内容的组成: 目录 学习过程不易,发文共享以下学习过程~ 1. STM32控制ESP8266获取网络时间 第一步:电脑控制ESP8266获取时间数据; 2. STM32基于获取到的时间使用定时器本地运行 3. 使用OLED显示时间数据,包括自定义的文字显示,图片显示,视频显示; 4. 完整的

    2024年02月08日
    浏览(40)
  • NodeMCU ESP8266 点亮LED灯手把手教程(图文并茂+超级详细)

    大家如果学过编程,那么 Hello World 往往是大家写下的第一个程序,在C语言中,看着控制台输出 hello world ,也就意味着我们敲开了编程的大门。同样的,点亮一个LED灯可以说是嵌入式里的 hello world 。 NodeMCU ESP8266是一款基于ESP8266芯片的开发板。之前我们有做过介绍,这个开发

    2024年02月05日
    浏览(106)
  • 51单片机ESP8266

    安信可提供的烧录WiFi固件工具: 链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72 安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB 经过测试,选择这个不可以,因为是4MB 的,上述用到的两款 ESP8266 是 1MB(8Mbit)flash的模组,应该使用 手头有

    2024年01月25日
    浏览(45)
  • 【开源】ESP8266_MAX30102_OLED屏幕实现血氧心率检测

    本系列,是记录自己入门嵌入式领域的学习笔记。 看看能坚持多久。 今天是2023年5月2日 源代码的来源:https://github.com/yangqingyuan-byte/MAX30102-0.96_4pin_oled-esp8266_HR_and_SPO2 * ESP8266 --- OLED * GND --- GND * * 5V --- VCC  * D1 --- SCL  * D2 --- SDA  * ESP8266 --- MAX30102 * 5V --- VIN * G --- GND * D0 --- INT

    2024年02月03日
    浏览(45)
  • ESP32 入门笔记04: 0.96寸OLED 显示屏 + u8g2库丝滑显示UI (ESP32 for Arduino IDE)

    先导知识 ESP32 入门笔记01:开发板信息、开发环境搭建以及学资料准备 ESP32 入门笔记02: GPIO参考指南 在本例中,我们使用 I2C 通信协议。ESP32 中最适合 I2C 通信的引脚是通用输入输出接口 22(SCL) 和通用输入输出接口 21(SDA) 。 安装 SSD1306 OLED 库 – ESP32 (也可以用u8g2库,在Ardu

    2024年01月19日
    浏览(56)
  • 51单片机(ESP8266模块)

    蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计 AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。 其对所传输的数据包大小有定义:即对于

    2024年02月06日
    浏览(37)
  • (pc端)/单片机连接ESP8266

    硬件:ESP8266模块,USB转TTL 连接方式 : esp8266的TX接转串口的RX,RX接TX 安装阿信可的esp8266调试工具 [ESP8266网络调试工具]ESP8266网络调试工具 提取码:djsz AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电

    2024年02月09日
    浏览(45)
  • 基于51单片机的esp8266使用(Labview上位机)

    说明:本人写博客只是为了做笔记,参考了各位大佬的文章,参考的比较多,有一些并没有贴出连接,请各位大佬见谅,真的没有恶意,只是用来学习!! 这篇是自己根据各种方法自己总结并且亲身试用可行性做出的笔记 1.ESP8266模块 2.USB-TTL(下载器) VCC、GND对应连接,TX、

    2024年02月02日
    浏览(50)
  • 51单片机与ESP8266轻松上手Onenet(三)--温度上传onenet平台

      51单片机与ESP8266快速上手物联网系列将一步步介绍89C51单片机将采集到的DS18B20的温度数据通过ESP8266 WIFI模块实时上传到onenet云平台这样一个案例。       前面我们硬件对ESP8266模块刷入OneNET的AT固件(51单片机与ESP8266轻松上手Onenet(一)--Onetnet MQTT 固件烧录),并对于OneNET-M

    2023年04月09日
    浏览(42)
  • STM32+esp8266实现单片机与服务器的WiFi通信

             源码已上传至gitee: stm32: 一些stm32模块使用经验记录 - Gitee.com https://gitee.com/lrf1125962926/stm32/tree/esp8266wifi%E9%80%9A%E4%BF%A1/         本实验采用STM32F1系列+esp8266 01s模块,采用HAL库开发。主控芯片哪个系列和型号都可以,只要有两个串口(UART或者USART,以下统称串口)

    2024年02月07日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包