SDカード バイナリーデータの読み書き
テキストエディタで見てもまったく意味不明のいわゆるバイナリーデータの読み書きです。 温度・湿度・気圧を計測するセンサーENV.IIIを使ったfloatのデータを読み書きします。
サンプルプログラムです。
/*
*******************************************************************************
* M5Stack prototype
* date:2022/8/1
* Author Sadajejeje
*******************************************************************************
*/
#include <M5Core2.h>
#include "UNIT_ENV.h"

void overWrite();
void appendWrite();

SHT3X sht30;//temp, hum sensor
QMP6988 qmp6988;// press sensor

void setup(){
    
    // M5Stackの初期化
    M5.begin();
    Wire.begin();  // Wire init, adding the I2C bus.
    qmp6988.init();
    delay(500);
    

    // 文字サイズを変更
    M5.Lcd.setTextSize(2);

    writeData();
    readData();
} 

void loop(){
}

void writeData(){
    float tmp, hum,  pres;    
    
    pres = qmp6988.calcPressure() / 100.0;
    if (sht30.get() == 0) { 
        tmp = sht30.cTemp;
        hum = sht30.humidity;
    } else {
        tmp = 1000, hum = 1000;
    }

    // ファイルオープン
    File file = SD.open("/text/env.dat",FILE_WRITE, true);
    if (file) {
        //1文字書き込み
        file.write((uint8_t*) &tmp, 4);
        file.write((uint8_t*) &hum, 4);
        file.write((uint8_t*) &pres, 4);
        // ファイルクローズ   
        file.close();
    } 
    else{
        M5.Lcd.println("File open error env.dat");
    }
}


void readData(){
    float tmp, hum,  pres; 
    
    // ファイルオープン
    File file = SD.open("/text/env.dat");
    if (file) {
        file.read((uint8_t *)&tmp, 4);
        file.read((uint8_t *)&hum, 4);
        file.read((uint8_t *)&pres, 4);
        file.close();
        M5.Lcd.print(tmp);
        M5.Lcd.println("");
        M5.Lcd.print(hum);
        M5.Lcd.println("");
        M5.Lcd.print(pres);
        // ファイルクローズ   
        file.close();
    } 
    else{
        M5.Lcd.println("File open error env.dat");
    }

}
    

結果は、

env.datの内容はUbuntuのGHexで表示します。温度は

湿度は、

気圧は、

となり画面表示と一致します。
M5.Lcd.print(tmp);
などでは小数点以下2桁で四捨五入しています。