【花雕学编程】Arduino动手做(245)---DS3231 高精度时钟模块之读取和写入 24C32 EEPROM

在这里插入图片描述

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

** 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器**

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
实验模块接线示意图

在这里插入图片描述

读取和写入板载 24C32 EEPROM 芯片,还需要安装另一个名为 uEEPROMLib 的库。

在这里插入图片描述

【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之二:读取和写入 24C32 EEPROM

实验开源代码

/*
  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十五:DS3231 高精度时钟模块  IIC/I2C接口 实时计时传感器
  项目之二:读取和写入 24C32 EEPROM
*/

#include "Arduino.h"
#include "Wire.h"
#include "uEEPROMLib.h"

// 创建 EEPROM 实例,I2C 地址为 0x57
uEEPROMLib eeprom(0x57);

void setup() {
    Serial.begin(9600);  // 初始化串口通信
    Wire.begin();  // 初始化 I2C 通信

    // 定义存储的数据
    int inttmp = 32123;  // 整型数据
    float floattmp = 3.1416;  // 浮点型数据
    char chartmp = 'A';  // 单个字符
    char c_string[] = "https://mc.dfrobot.com.cn";  // 长字符串
    int string_length = strlen(c_string);  // 计算字符串长度

    Serial.println("写进存储记忆......");

    // **存储整型数据**
    if (!eeprom.eeprom_write(0, inttmp)) {
        Serial.println("Failed to store int.");
    } else {
        Serial.println("int was stored correctly.");
    }

    // **存储浮点型数据**
    if (!eeprom.eeprom_write(4, floattmp)) {
        Serial.println("Failed to store float.");
    } else {
        Serial.println("float was stored correctly.");
    }

    // **存储单字符**
    if (!eeprom.eeprom_write(8, chartmp)) {
        Serial.println("Failed to store char.");
    } else {
        Serial.println("char was stored correctly.");
    }

    // **存储长字符串**(从地址 33 开始,未对齐 EEPROM 32 字节页)
    if (!eeprom.eeprom_write(33, (byte *)c_string, string_length)) {
        Serial.println("Failed to store string.");
    } else {
        Serial.println("string was stored correctly.");
    }

    Serial.println("\nReading memory...");

    // **读取并打印存储数据**
    Serial.print("int: ");
    eeprom.eeprom_read(0, &inttmp);
    Serial.println(inttmp);

    Serial.print("float: ");
    eeprom.eeprom_read(4, &floattmp);
    Serial.println((float)floattmp);

    Serial.print("char: ");
    eeprom.eeprom_read(8, &chartmp);
    Serial.println(chartmp);

    Serial.print("string: ");
    eeprom.eeprom_read(33, (byte *)c_string, string_length);
    Serial.println(c_string);

    Serial.println();
}

void loop() {
    // EEPROM 只需在 setup() 进行读写,loop() 为空
}

代码简单解读

这段代码使用 EEPROM(电子可擦除存储器) 通过 I2C 读取和存储数据,核心逻辑如下:

  1. 初始化 EEPROM
    ✅ uEEPROMLib eeprom(0x57); → 创建 EEPROM 实例,I2C 地址为 0x57
    ✅ Wire.begin(); → 初始化 I2C 通信
    ✅ Serial.begin(9600); → 启动串口通信

  2. 写入数据
    ✅ eeprom.eeprom_write(address, data); → 将数据存入 EEPROM
    ✅ 存储不同类型的数据(整型、浮点数、字符、字符串)
    ✅ 字符串存储 → (byte *)c_string, strlen(c_string) 确保正确写入

  3. 读取数据
    ✅ eeprom.eeprom_read(address, &data); → 从 EEPROM 读取数据
    ✅ 按照原地址读出 int、float、char、string
    ✅ 格式化输出,确保数据存储正确

  4. 循环结构
    ✅ loop() 为空 → 仅在 setup() 进行读写操作

这段代码让 EEPROM 通过 I2C 存储和读取数据,并在串口输出结果。

实验串口返回情况

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值