ESP32 開発備忘録

IO2 の設定

基本オープン、もしくはpull-downしておく。pull-upの場合はダウンロード時エラー。

Sketch uses 262541 bytes (20%) of program storage space. Maximum is 1310720 bytes.

Global variables use 21344 bytes (6%) of dynamic memory, leaving 306336 bytes for local variables. Maximum is 327680 bytes.

esptool.py v4.5.1

Serial port /dev/cu.usbserial-14130

Connecting......................................


A fatal error occurred: Failed to connect to ESP32: Wrong boot mode detected (0xb)! The chip needs to be in download mode.

For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html

Failed uploading: uploading error: exit status 2



 割り込みのテスト



/************************************************
 * ESP32 interrupt minimum test
 * Wemos D1 mini ESP32 v1.0
 * 2024/3/27
 * *********************************************/

#define LED_PIN 2

// 1. タイマー宣言
hw_timer_t * timer = NULL;
hw_timer_t * timer1 = NULL;

volatile int interruptCounter = 0;
int totalInterruptCounter = 0;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;

// 6. タイマー呼び出しされるコールバック関数
void IRAM_ATTR onTimer() {
  portENTER_CRITICAL_ISR(&timerMux);
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));
  portEXIT_CRITICAL_ISR(&timerMux);
}

// タイマー1呼び出しされるコールバック関数
void IRAM_ATTR onTimer1() {
  portENTER_CRITICAL_ISR(&timerMux);
  interruptCounter++;
  portEXIT_CRITICAL_ISR(&timerMux);
}

void setup() {
  Serial.begin(9600);
  pinMode(LED_PIN, OUTPUT);

  // 2. タイマー作成。0番のタイマーを80クロックで1カウント、カウントアップ
  timer = timerBegin(0, 80, true);
  // 3. 割り込みの設定。第一引数は設定するタイマー、第二引数は割り込み関数
  timerAttachInterrupt(timer, &onTimer, true);
  // 4. トリガー条件を設定。timerが1000,000カウントごとに割り込みを発生させる
  timerAlarmWrite(timer, 1000000, true);
  // 5. タイマーを有効化
  timerAlarmEnable(timer);


  // 2. タイマー(1)
  timer1 = timerBegin(1, 80, true);
  timerAttachInterrupt(timer1, &onTimer1, true);
  timerAlarmWrite(timer1, 3000000, true);
  // 5. タイマーを有効化
  timerAlarmEnable(timer1);
}

void loop() {
  if (interruptCounter > 0) {
 
    portENTER_CRITICAL(&timerMux);
    interruptCounter--;
    portEXIT_CRITICAL(&timerMux);
 
    totalInterruptCounter++;
     
    Serial.print("An interrupt as occurred. Total number: ");
    Serial.println(totalInterruptCounter);
  }
}


EEPROM
ESP-WROOM-32 のEEPROM(疑似)のサイズ1K(1024)
struct DATA_SET{
    int vala;
    int valb;
    char check[10];
};
DATA_SET data;

//データをEEPROMから読み込む。保存データが無い場合デフォルトにする。
void load_data() {
    EEPROM.get<DATA_SET>(0, data);
    if (strcmp(data.check, DATA_VERSION)) { //バージョンをチェック
        //保存データが無い場合デフォルトを設定
        data.vala = DEFAULT_VALA;
        data.valb = DEFAULT_VALB;
    }
}
 
//EEPROMへの保存
void save_data() {
    //EEPROMに設定を保存する。
    strcpy(data.check, DATA_VERSION);
    EEPROM.put<DATA_SET>(0, data);
    EEPROM.commit(); //大事
}

変数のサイズ 
uint8_t 1 
uint16_t 2 
int 2 
ulong 4 
float 4

コメント

このブログの人気の投稿

オンボード・グロープラグヒート製作(On-board glow plug heat circuit)①構想編

ICD2 clone project (completed)

回路シミュレータ LTSPICE