《超圖解ESP32應用實作》範例檔更新支援開發環境3.x版及Arduino IDE 2.x資料上傳工具操作說明

本文旨在說明《超圖解ESP32應用實作》程式碼更新支援EPS32 Arduino開發環境3.x版,並提供Arduino IDE 2.x版的操作說明,以及ESP32 SPIFFS分區資料上傳工具的安裝與操作。

Arduino IDE 2.x版的ESP32開發環境安裝說明

底下是Arduino IDE 2.x版的操作介面外觀:

Arduino IDE 2.x版的操作介面

按一下左側的「開發板管理員」,搜尋“esp32”,可找到兩種ESP32開發環境,其中一個由Arduino官方維護,另一個由ESP32晶片設計,樂鑫信息科技(Espressif Systems)維護。

開發板管理員

Arduino IDE 2.x和1.x版共用相同的開發環境資源,如果你的電腦有安裝1.x版以及ESP32開發環境,以上畫面會顯示已安裝的訊息。請點擊「更新」,更新到最新版本。

如果是全新安裝,請點擊底下那一個,樂鑫信息科技提供的版本。

開發板管理員

如果「開發板管理員」搜尋不到樂鑫信息科技的ESP32版本,請選擇主功能表「檔案 / 喜好設定」,在底下的「其他開發板管理員網址」欄位,輸入:” https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json”,然後按下「確定」。

喜好設定

選擇ESP32開發板和序列埠

把ESP32開發板接上電腦,以“LOLIN 32”開發板為例,點擊IDE上方選單中的「選擇其他開發板及連接埠」選項:

選擇其他開發板及連接埠

然後在底下的面板中搜尋esp32,並點選它所在的連接埠,再按下「確定」,即可進行開發。

選擇其他開發板及連接埠

更新ESP32 Arduino開發環境3.x版的程式敘述

ESP32 Arduino開發環境3.x版的某些語法和2.x版不相容,主要差異是設定和輸出PWM訊號的語法,相關說明請參閱「使用ESP32 Arduino開發平台3.x版製作呼吸燈效果」。

在1.x和2.x版,設定與輸出PWM訊號的語法如下:

ledcSetup( PWM通道, 頻率, 位元數 );
ledcAttachPin( PWM腳, PWM通道 );
ledcWrite(PWM通道, PWM輸出值);

第3.x版的語法改成:

ledcAttachChannel( PWM腳, 頻率, 位元數, PWM通道 );
ledcWrite(PWM腳, PWM輸出值);

目前仍有許多程式採用2.x版的語法,也不是所有開發人員都升級到最新版本。為了讓原始碼兼容不同版本,ESP32 Arduino開發環境內建的esp_arduino_version.h標頭檔,定義了判斷ESP32 Arduino開發環境版本的巨集:ESP_ARDUINO_VERSION_VAL,透過此巨集判斷開發環境版本是否大於或等於3.0的敘述如下:

#if ESP_ARDUINO_VERSION >=  ESP_ARDUINO_VERSION_VAL(3, 0, 0)
  // 編譯3.0版以上的程式敘述
#else
  // 編譯2.x版或1.x版的程式敘述
#endif

因此,底下的敘述將依據開發環境的版本,自動編譯合適的PWM設定和輸出敘述:

#if ESP_ARDUINO_VERSION >=  ESP_ARDUINO_VERSION_VAL(3, 0, 0)
  ledcAttachChannel(  PWM腳, 頻率, 位元數, PWM通道 );   // 3.x版的語法
  ledcWrite(PWM腳, PWM輸出值);
#else
  ledcSetup( PWM通道, 頻率, 位元數 );  // 2.x版的語法
  ledcAttachPin( PWM腳, PWM通道 );
  ledcWrite(PWM通道, PWM輸出值);
#endif

ESP32開發環境的Arduino.h標頭檔有引用esp_arduino_version.h,所以我們編寫的Arduino程式可直接執行上面的前置處理器指令。以《超圖解ESP32應用實作》第一章的diy1-1.ino檔為例,修改後的原始碼如下:

#define THERMO_PIN 36                 // 熱敏電阻分壓輸入腳
#define HEATER_PIN 33                 // 陶瓷加熱片的 PWM 輸出腳
#define ADC_BITS 10                   // 類比輸入解析度 10 位元
#define INTERVAL_MS (5 * 60 * 1000L)  // 5 分鐘
#define PWM_CHANNEL 0                 // PWM 通道

const uint16_t PWMs[] = { 30, 0, 60, 0, 90, 0 };  // PWM 值
// PWM 值的數量
const uint8_t TOTAL_PWMs = sizeof(PWMs) / sizeof(PWMs[0]);
uint16_t power = 0;  // PWM 的輸出值
uint32_t prevTime;   // 前次時間

// 熱敏電阻值轉換成攝氏溫度值
float readTemp(float R0 = 10000.0, float beta = 3950.0) {
  int adc = analogRead(THERMO_PIN);    // 讀取熱敏電阻感測值
  float T0 = 25.0 + 273.15;            // 轉換成溫度值
  float r = (adc * R0) / ((1 << ADC_BITS) - 1 - adc);  // 傳回攝氏溫度
  return 1 / (1 / T0 + 1 / beta * log(r / R0)) - 273.15;
}

void setup() {
  Serial.begin(115200);
  pinMode(HEATER_PIN, OUTPUT);
  power = PWMs[0];  // 讀取第 1 筆 PWM 值
  Serial.printf("PWM:%d", power);
  analogSetAttenuation(ADC_11db);  // 設定類比輸入上限 3.6V
  analogReadResolution(ADC_BITS);  // 設定 ADC(類比轉數位)的解析度

#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
  // 以下兩行適用於ESP32開發平台3.x版
  ledcAttachChannel(HEATER_PIN, 1000, 8, PWM_CHANNEL);  // 接腳, 頻率, 解析度, 通道
  ledcWrite(HEATER_PIN, power);   // 開始加熱 (接腳, 工作週期)
#else
  // 以下三行適用於ESP32開發平台2.x版
  ledcSetup(PWM_CHANNEL, 1000, 8);  // 設置 PWM:通道 0、1KHz、8 位元
  ledcAttachPin(HEATER_PIN, PWM_CHANNEL);
  ledcWrite(PWM_CHANNEL, power);  // 開始加熱
#endif
  prevTime = millis();  // 紀錄前次時間
}
void loop() {
  static uint8_t index = 0;  // PWM 陣列的索引

  uint32_t now = millis();
  if (index < TOTAL_PWMs - 1) {
    // 每隔 5 分鐘測量一次溫度,並輸出下一個 PWM 值
    if (now - prevTime >= INTERVAL_MS) {
      prevTime = now;
      power = PWMs[++index];
      float temp = readTemp();  // 取出下一筆 PWM 值
      // 取得感測溫度值
      Serial.printf(", 溫度:%.2f\n", temp);
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
      // 底下敘述適用於ESP32開發平台3.x版
      ledcWrite(HEATER_PIN, power);  // 開始加熱
#else
      // 底下敘述適用於ESP32開發平台2.x版
      ledcWrite(PWM_CHANNEL, power); // 開始加熱
#endif
      Serial.printf("PWM:%d", power);
    }
  }
}

書本的範例原始檔已全數更新,請讀者重新下載,非常感謝本書的編輯黃昕暐先生在假日協助處理。

下載與安裝Arduino IDE的外掛工具

超圖解ESP32應用實作》第四章的動態PID調整網頁,透過一個Arduino IDE外掛工具(Arduino ESP32 filesystem uploader),把網頁檔案寫入ESP32的快閃記憶體,該工具僅支援Arduino IDE 1.x版。

支援Arduino IDE 2.2.1或更高版本的上傳資料檔案外掛工具是“arduino-spiffs-upload”(目前最新的發行版),也需要另行安裝,請點擊下載.vsix副檔名的檔案,其他是此外掛工具的原始碼,無需下載。

下載arduino-spiffs-upload

Arduino IDE的外掛工具的安裝路徑,位於使用者家目錄的“.arduinoIDE/plugins”路徑;第一次安裝外掛工具之前,需要自行新增“plugins”資料夾,在Windows系統中,此路徑是:

%HOMEPATH%\.arduinoIDE

請在此路徑中新增“plugins”資料夾:

.arduinoIDE資料夾

然後把剛才下載的外掛(此例為:arduino-spiffs-upload-1.1.5.vsix檔)存入plugins資料夾:

plugins資料夾

外掛安裝完畢,請先重新Arduino IDE。

在macOS安裝Arduino IDE的外掛工具

在macOS系統桌面(Finder)按下⌘ + Shift + G鍵,或選擇「前往→前往檔案夾」命令,然後輸入“~/.arduinoIDE”路徑,然後按下Enter鍵:

~/.arduinoIDE路徑

在.arduinoIDE檔案夾內,新增一個“plugins”檔案夾,然後把之前下載的外掛(此例為:arduino-spiffs-upload-1.1.5.vsix檔)存入plugins檔案夾。

plauin檔案夾

外掛安裝完畢,請先重新Arduino IDE。

使用Arduino IDE 2.x版上傳資料檔案到ESP32或ESP8266的快閃記憶體(SPIFFS分區)

請先確認程式檔所在的目錄包含data資料夾:選擇「草稿碼 / 顯示草稿碼資料夾」,將能看到目前程式檔的資料夾。

目前程式檔的資料夾

序列埠監控窗處於開啟狀態,請先關閉它,否則會出錯:

在IDE中按下Ctrl + Shift + P鍵(macOS請按下⌘ + Shift + P鍵),然後在‘>’提示字元後面輸入“upload”,它將提示”upload”開頭的命令:

輸入upload命令

點擊“Upload SPIFFS to Pico/ESP8266/ESP32”命令之後,將開始壓縮、上傳資料。

上傳資料

上傳完畢,開發板將自動重啟。

上傳資料

如果上傳檔案時出現如下錯誤,而你確定已選好序列埠,請關閉IDE再重開。

未指定序列埠

Posts created 486

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top