回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

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

头像 驴友花雕 2025.05.11 12 0

00.jpg
02.jpg
04-.jpg
04--.jpg
05.jpg

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

 

08-2.jpg

  【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 存储和读取数据,并在串口输出结果。


实验串口返回情况

 

08-3.jpg

08-1.jpg

评论

user-avatar
icon 他的勋章
    展开更多