上位に戻る ESP32 お便利関数 初版2025/3/3

ESP32 雨検出器を作りたく始めたのですが、色々引っかかったので、記録しておこうと思います
便利な関数をメモってきます 頂戴してきたものです

  1. EEPROMに設定データを保存する
    ライブラリに記載のあった凡例だと、書き出し、読み込み連続だとOKでしたが、一旦電源切るとうまく行かない
    commit追加してもダメ 異なるエリアを読み出してるんじゃないかと しかもデータの無い領域も配列サイズで
    読み込んでくる・・・。ウザで、捜してると
    文字列として書き込み読み込み出来るスケッチ例がありました
    転載元:https://tatepro.com/esp32_eeprom/

    //設定データ保存
    #include "EEPROM.h"

    //設定領域上限
    int EEPROM_MAXSIZE=128;
    String datada="anata,128,6,20,40";

    void setup() {
      Serial.begin(115200);
      EEPROM.begin(128);//128byte設定保存領域確保
     //EEPROMに書き込み
      eeprom_write(0,100,datada);
      delay(500);
      //EEPROMから読み出し
      if(eeprom_read(0,100).length()!=0){
     datada=eeprom_read(0,100);
     Serial.println(atesaki);}
    }


    //EEPROM領域書き込み読み出し
    void eeprom_write(int startaddr,int endaddr, String data){
    byte Byte_data[EEPROM_MAXSIZE];
    data.getBytes(Byte_data,EEPROM_MAXSIZE);
    int k;
    for(k=startaddr;k<=endaddr;k++){
      EEPROM.put(k,'\0');
      EEPROM.put(k,Byte_data[k-startaddr]);
    }
    EEPROM.commit();
    }
    String eeprom_read(int startaddr,int endaddr){
      String data_from_rom="";
      char c;
      int i;
      for(i=startaddr;i<=endaddr;i++){
        c=EEPROM.get(i,c);
        if(c=='\0')break;
        data_from_rom=data_from_rom+String(c);
      }
      return data_from_rom;
    }

  2. 区切り文字で区切られた文字列(csvファイル)を配列に格納する
    C#とかだと標準で、Split関数があるので誰か作ってないかと探したらありました!
    掲載元:arduinoで文字列から指定の文字で区切る方法 #Arduino - Qiita
    String outdata[10]={ "\n" };

    //-------------------------------------------------------
    //概要:dataの文字を区切って配列に入れる
    //引数:data=区切りたい文字列 delimiter=区切り文字 dst=区切った文字を入れる配列
    //戻り値:配列の数
    //-------------------------------------------------------
    int split(String data, char delimiter, String* dst) {
      int index = 0;
      int arraySize = (sizeof(data)) / sizeof((data[0]));
      int datalength = data.length();

      for (int i = 0; i < datalength; i++) {
        char tmp = data.charAt(i);
        if (tmp == delimiter) {
          index++;
          if (index > (arraySize - 1)) return -1;
        } else dst[index] += tmp;
      }
      return (index + 1);
    }

    void setup() {
      // put your setup code here, to run once:
      String Data = "anata,125,6,20,40";
      Serial.begin(115200);  // シリアル通信速度設定
      delay(3000);
      Serial.println("テスト開始");
      int index = split(Data, ',', outdata);
      for(int i=0;i < index;i++){
        Serial.println(outdata[i]);
        }
    }

    void loop() {
      // put your main code here, to run repeatedly:

    }

  3. 数字文字に0を埋めて桁数を合わせる
    毎回sprintfで、文字数字をintにしてフォーマット指定するのもめんどいので探してたらありました ってちょっとは自分で書けよと言いたい
    転載元:Arduinoで桁数を指定して0埋めする方法 | 次世代情報技術研究所(仮)
    //フォーマット桁数指定で0を埋める
    // numに数値を、zeroCountに桁数を指定する。
    String strPad(String numm,int zeroCount){
      char tmp[256];
      char param[5] = {'%','0',(char)(zeroCount+48),'d','\0'};
      int numa = numm.toInt();
      sprintf(tmp,param,numa);
      return tmp;
    }







以上間違い等ありましたら、以下ご意見箱にお願いします

   

    ご意見箱