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