|
| 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桁で四捨五入しています。 |