Arduino 入門




Panda Wu

2025/11/25

Arduino 是什麼

常見開發板

ESP32




ref: https://datasheet.lcsc.com/lcsc/Ai-Thinker-NodeMCU-32SLua_C111436.pdf

常見腳位介紹

  • GPIO (General Purpose Input/Output)
    • 透過程式控制 Pin 要輸出 High 還是 Low
  • ADC (Analog-to-Digital Converter)
    • 將連續變化的信號轉為離散的訊號
  • DAC (Digital-to-Analog Converter)
    • 將數位訊號轉為對應的模擬類比訊號
  • PWM (Pulse Width Modulation)

ref: https://datasheet.lcsc.com/lcsc/Ai-Thinker-NodeMCU-32SLua_C111436.pdf

Arduino IDE

安裝 Arduino IDE

ref: https://www.arduino.cc/wiki/static/ide-a6b6a068e29663bfde50923fc52fb982.svg

設定開發 ESP32 板板的環境

  • Preferences > Additional boards manager URLs:
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
  • Tools > Board > Boards Manager > search: esp32 and Install
  • 選擇對應開發版的 Port (可以把開發板拔掉再插回去看多了哪個選項)
  • 開發板選擇 NodeMCU-32S

CP2102x 驅動程式 (Windows only)

參考教學

Blink

File > Example > 01.Basics > Blink

LED_BUILTIN: GPIO2

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
}

試試看接其他腳位,參考 Data Sheet

常用語法

  • void setup(): 程式啟動時只會執行一次。
  • void loop(): 在 void setup() 執行後,會無限重複執行這裡面的內容
  • pinMode(pin, mode)
    • pin: 腳位號碼
    • mode: INPUT, OUTPUT, INPUT_PULLUP
  • digitalWrite(pin, value)
    • value: HIGH, LOW

常用語法

  • digitalRead(pin): return HIGH / LOW
  • analogRead(pin): return 0~4095 (int)
  • analogWrite(pin, value):
    • value: 0~255
  • delay(ms)

呼吸燈

讓燈慢慢變暗,然後再慢慢變亮

呼吸燈

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  for(int i = 0; i<255; ++i) {
    analogWrite(LED_BUILTIN, i);
    delay(20);
  }

  for(int i = 255; i>0; --i) {
    analogWrite(LED_BUILTIN, i);
    delay(20);
  }
}

Lab - digitalRead

試著讓燈在按鈕按下時會亮,沒暗時不亮

Lab - analogRead

試著讀取可變電阻,根據讀取的數字改變燈的亮度

What's more

  • UART / SPI / I2C
  • 中斷 (Interrupt)
  • 無線:藍芽、網路、紅外線
  • 別人做的專案

Thanks for listening




本投影片採用

BY-NC-SA 許可協議。轉載請註明出處!

Google tag (gtag.js)

dark / light toggle btn

<style> #theme-toggle-btn { position: fixed; top: 20px; right: 20px; z-index: 9999; width: 50px; height: 50px; border-radius: 50%; border: none; background: #444; box-shadow: 0 4px 6px rgba(0,0,0,0.1); cursor: pointer; font-size: 24px; transition: 0.3s; display: flex; align-items: center; justify-content: center; padding: 0; } #theme-toggle-btn:hover { transform: scale(1.1); } #theme-toggle-btn.is-dark { background: #f0f0f0; } #theme-toggle-btn::after { content: '🌙'; } #theme-toggle-btn.is-dark::after { content: '☀️'; margin-top: 0; } </style> <button id="theme-toggle-btn" onclick="document.querySelectorAll('section').forEach(s=>s.classList.toggle('invert'));this.classList.toggle('is-dark')"> </button>