812 lines
28 KiB
Markdown
812 lines
28 KiB
Markdown
# Common Devices Reference
|
||
|
||
> **类别:reference** | **主题:常用器件与模块速查** | **信源:** 多平台汇总
|
||
|
||
Cross-platform device/module reference for Raspberry Pi and ESP32 GPIO configuration. Used to determine pin requirements, I2C addresses, voltage levels, and platform-specific wiring guidance.
|
||
|
||
## Table of Contents
|
||
|
||
- [Category 1: Sensors — Environmental](#category-1-sensors--environmental)
|
||
- [BME280](#bme280-temperaturehumiditypressure)
|
||
- [BMP280](#bmp280-temperaturepressure--no-humidity)
|
||
- [DHT22 / AM2302](#dht22--am2302-temperaturehumidity)
|
||
- [DS18B20](#ds18b20-temperature-1-wire)
|
||
- [SHT31](#sht31-temperaturehumidity)
|
||
- [Category 2: Sensors — Motion/Position](#category-2-sensors--motionposition)
|
||
- [MPU6050](#mpu6050-6-axis-imu--accelerometer--gyroscope)
|
||
- [ADXL345](#adxl345-3-axis-accelerometer)
|
||
- [HMC5883L / QMC5883L](#hmc5883l--qmc5883l-magnetometercompass)
|
||
- [NEO-6M / NEO-7M / NEO-M8N](#neo-6m--neo-7m--neo-m8n-gps-module)
|
||
- [Category 3: Sensors — Analog/Power](#category-3-sensors--analogpower)
|
||
- [ADS1115](#ads1115-16-bit-adc-4-channel)
|
||
- [INA219](#ina219-currentvoltagepower-monitor)
|
||
- [Category 4: Displays](#category-4-displays)
|
||
- [SSD1306](#ssd1306-oled-display-128x64-or-128x32)
|
||
- [ST7789](#st7789-tft-color-display-typically-240x240-or-240x320)
|
||
- [HD44780](#hd44780-character-lcd-16x2-or-20x4-via-pcf8574-i2c-backpack)
|
||
- [e-Paper / e-Ink Display](#e-paper--e-ink-display-waveshare-style)
|
||
- [Category 5: Communication](#category-5-communication)
|
||
- [nRF24L01](#nrf24l01-24ghz-radio-transceiver)
|
||
- [HC-05 / HC-06](#hc-05--hc-06-bluetooth-classic-serial)
|
||
- [SX1276 / RFM95W](#sx1276--rfm95w-lora-radio)
|
||
- [MCP2515](#mcp2515-can-bus-controller)
|
||
- [ENC28J60](#enc28j60-spi-ethernet-controller)
|
||
- [Category 6: Motor Control](#category-6-motor-control)
|
||
- [PCA9685](#pca9685-16-channel-pwmservo-driver)
|
||
- [L298N](#l298n-dual-h-bridge-motor-driver)
|
||
- [DRV8825 / A4988](#drv8825--a4988-stepper-motor-driver)
|
||
- [Category 7: Other](#category-7-other)
|
||
- [MCP23017](#mcp23017-16-channel-gpio-expander)
|
||
- [WS2812B / NeoPixels](#ws2812b--neopixels-addressable-rgb-leds)
|
||
- [Rotary Encoder](#rotary-encoder-incremental-with-push-button)
|
||
- [Relay Modules](#relay-modules-1248-channel)
|
||
- [MAX31855 / MAX6675](#max31855--max6675-thermocouple-interface)
|
||
- [I2C Address Collision Map](#i2c-address-collision-map)
|
||
|
||
---
|
||
|
||
## Category 1: Sensors — Environmental
|
||
|
||
### BME280 (Temperature/Humidity/Pressure)
|
||
|
||
- Interface:I2C (default), SPI
|
||
- Required Pins:I2C: SDA, SCL. SPI: MOSI, MISO, SCLK, CS
|
||
- I2C Address:0x76 (SDO→GND), 0x77 (SDO→VDD)
|
||
- Voltage:1.8–3.6V (most breakouts accept 3.3V or 5V input)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- Use I2C1 (GPIO2 SDA, GPIO3 SCL)
|
||
- Enable with `dtparam=i2c_arm=on`
|
||
- SPI mode: SPI0 (GPIO10 MOSI, GPIO9 MISO, GPIO11 SCLK, GPIO8 CE0)
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C via GPIO matrix
|
||
- Default Wire library: GPIO21 SDA, GPIO22 SCL
|
||
- SPI VSPI default: GPIO23 MOSI, GPIO19 MISO, GPIO18 SCLK, GPIO5 CS
|
||
|
||
**Gotchas:**
|
||
- ADDRESS COLLISION with BMP280 — both use 0x76/0x77
|
||
- Cannot use BME280 + BMP280 on same I2C bus unless one is on alternate address
|
||
- Use I2C multiplexer (TCA9548A) if both needed at same address
|
||
|
||
---
|
||
|
||
### BMP280 (Temperature/Pressure — no humidity)
|
||
|
||
- Interface:I2C (default), SPI
|
||
- Required Pins:I2C: SDA, SCL. SPI: MOSI, MISO, SCLK, CS
|
||
- I2C Address:0x76 (SDO→GND), 0x77 (SDO→VDD)
|
||
- Voltage:1.8–3.6V (most breakouts accept 3.3V or 5V input)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- Use I2C1 (GPIO2 SDA, GPIO3 SCL)
|
||
- Enable with `dtparam=i2c_arm=on`
|
||
- SPI mode: SPI0 (GPIO10 MOSI, GPIO9 MISO, GPIO11 SCLK, GPIO8 CE0)
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C via GPIO matrix
|
||
- Default Wire library: GPIO21 SDA, GPIO22 SCL
|
||
- SPI VSPI default: GPIO23 MOSI, GPIO19 MISO, GPIO18 SCLK, GPIO5 CS
|
||
|
||
**Gotchas:**
|
||
- ADDRESS COLLISION with BME280
|
||
- Registers are mostly compatible but not identical — don't assume BME280 libraries work on BMP280
|
||
- Cheap clone boards sometimes mislabel BMP280 as BME280
|
||
|
||
---
|
||
|
||
### DHT22 / AM2302 (Temperature/Humidity)
|
||
|
||
- Interface:Single-wire proprietary protocol (NOT 1-Wire/Dallas)
|
||
- Required Pins:DATA (1 GPIO)
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V–5V (data pin is 3.3V logic compatible)
|
||
- Pull-ups:4.7kΩ–10kΩ on data line (some breakouts include it)
|
||
|
||
**RPi Notes:**
|
||
- Use any available GPIO
|
||
- No overlay needed
|
||
- Timing-sensitive — occasional read failures are normal; retry in software
|
||
- Minimum 2-second sampling interval (do not exceed 0.5 Hz)
|
||
|
||
**ESP32 Notes:**
|
||
- Use any GPIO
|
||
- Avoid strapping pins (GPIO0, 2, 5, 12, 15)
|
||
- Avoid input-only pins (GPIO34-39) — data pin is bidirectional
|
||
|
||
**Gotchas:**
|
||
- THIS IS NOT 1-Wire PROTOCOL — do not use w1-gpio overlay
|
||
- Do not confuse with DS18B20
|
||
- Requires specific library (e.g., Adafruit DHT library)
|
||
- DHT11 is the cheaper/less accurate variant — same protocol
|
||
|
||
---
|
||
|
||
### DS18B20 (Temperature, 1-Wire)
|
||
|
||
- Interface:1-Wire (Dallas protocol)
|
||
- Required Pins:DQ (data, 1 GPIO)
|
||
- I2C Address:N/A
|
||
- Voltage:3.0–5.5V (supports parasitic power: data + GND only)
|
||
- Pull-ups:4.7kΩ required on data line
|
||
|
||
**RPi Notes:**
|
||
- Default: GPIO4 with `dtoverlay=w1-gpio`
|
||
- Custom pin: `dtoverlay=w1-gpio,gpiopin=N`
|
||
- Parasitic power: `dtoverlay=w1-gpio-pullup,gpiopin=N`
|
||
- Multiple sensors can share one data pin (each has unique 64-bit address)
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO via OneWire library
|
||
- Avoid strapping pins
|
||
- Avoid input-only pins (GPIO34-39)
|
||
|
||
**Gotchas:**
|
||
- Multiple sensors on one bus is a key feature — each has factory-programmed unique ID
|
||
- Parasitic power mode can cause issues with cable runs >3m
|
||
- Counterfeit DS18B20s are common — may have worse accuracy or fail parasitic power
|
||
|
||
---
|
||
|
||
### SHT31 (Temperature/Humidity)
|
||
|
||
- Interface:I2C
|
||
- Required Pins:SDA, SCL. Optional: ALERT (interrupt), RST (active-low reset)
|
||
- I2C Address:0x44 (ADDR→GND), 0x45 (ADDR→VDD)
|
||
- Voltage:2.4–5.5V (most breakouts have regulator)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- Use I2C1 (GPIO2 SDA, GPIO3 SCL)
|
||
- Enable with `dtparam=i2c_arm=on`
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C via GPIO matrix
|
||
|
||
**Gotchas:**
|
||
- ADDRESS COLLISION — INA219 also uses 0x44/0x45
|
||
- Has built-in heater element for self-diagnostics (enable via register)
|
||
- Higher accuracy than DHT22
|
||
|
||
---
|
||
|
||
## Category 2: Sensors — Motion/Position
|
||
|
||
### MPU6050 (6-Axis IMU — Accelerometer + Gyroscope)
|
||
|
||
- Interface:I2C
|
||
- Required Pins:SDA, SCL. Optional: INT (interrupt — recommended for DMP)
|
||
- I2C Address:0x68 (AD0→GND), 0x69 (AD0→VDD)
|
||
- Voltage:3.3V (VDD). Most breakouts accept 3.3V–5V input
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- Use I2C1 (GPIO2/3)
|
||
- Connect INT to any GPIO if using interrupt-driven reads
|
||
- No specific overlay needed beyond `dtparam=i2c_arm=on`
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C
|
||
- Connect INT to any input-capable GPIO
|
||
- Input-only pins (GPIO34-39) are fine for INT output
|
||
|
||
**Gotchas:**
|
||
- ADDRESS COLLISION — 0x68 collides with DS3231 RTC
|
||
- If using both, put one on alternate address or use I2C multiplexer
|
||
- Has built-in DMP (Digital Motion Processor) — use INT pin for DMP-ready interrupts
|
||
- MPU9250 is the 9-axis successor (adds magnetometer) — same I2C address scheme
|
||
|
||
---
|
||
|
||
### ADXL345 (3-Axis Accelerometer)
|
||
|
||
- Interface:I2C, SPI
|
||
- Required Pins:I2C: SDA, SCL. SPI: MOSI, MISO, SCLK, CS. Optional: INT1, INT2
|
||
- I2C Address:0x53 (ALT ADDRESS/SDO→GND), 0x1D (ALT ADDRESS/SDO→VDD)
|
||
- Voltage:2.0–3.6V (most breakouts accept 3.3V–5V)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- I2C1 (GPIO2/3) or SPI0 (GPIO7-11)
|
||
- Interrupt pins to any available GPIO
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C, any pins for SPI via GPIO matrix
|
||
- Avoid flash pins (GPIO6-11) for SPI
|
||
|
||
**Gotchas:**
|
||
- Default I2C address 0x53 is uncommon in collisions
|
||
- SPI mode is activated by pulling CS low — if CS is floating, chip may not respond on I2C
|
||
- Has configurable tap detection, freefall detection, and activity/inactivity interrupts
|
||
|
||
---
|
||
|
||
### HMC5883L / QMC5883L (Magnetometer/Compass)
|
||
|
||
- Interface:I2C
|
||
- Required Pins:SDA, SCL. Optional: DRDY (data ready interrupt)
|
||
- I2C Address:HMC5883L: 0x1E (fixed). QMC5883L: 0x0D (fixed)
|
||
- Voltage:2.16–3.6V (most breakouts accept 3.3V–5V)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- I2C1 (GPIO2/3)
|
||
- No special overlay
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C
|
||
|
||
**Gotchas:**
|
||
- HMC5883L and QMC5883L have DIFFERENT I2C addresses and DIFFERENT register maps
|
||
- They are NOT interchangeable in software
|
||
- Many cheap "HMC5883L" boards actually contain QMC5883L chips — check chip marking
|
||
- GY-271 boards may have either chip
|
||
- Libraries must match the actual chip
|
||
|
||
---
|
||
|
||
### NEO-6M / NEO-7M / NEO-M8N (GPS Module)
|
||
|
||
- Interface:UART (primary), I2C (some models), SPI (some models)
|
||
- Required Pins:UART: TX, RX. Optional: PPS (pulse-per-second for precision timing)
|
||
- I2C Address:0x42 (when I2C interface is used, some modules only)
|
||
- Voltage:2.7–3.6V (most breakouts accept 3.3V–5V)
|
||
- Pull-ups:N/A for UART
|
||
|
||
**RPi Notes:**
|
||
- UART0/PL011 on GPIO14 (TX) / GPIO15 (RX)
|
||
- On Pi 3/4/Zero2W, Bluetooth uses PL011 — add `dtoverlay=disable-bt` or `dtoverlay=miniuart-bt`
|
||
- On Pi 5, no BT conflict
|
||
- For PPS: `dtoverlay=pps-gpio,gpiopin=N`
|
||
- RPi TX → GPS RX, RPi RX → GPS TX (crossover)
|
||
|
||
**ESP32 Notes:**
|
||
- Use UART1 or UART2 on any GPIO pair via GPIO matrix
|
||
- UART0 is typically USB-serial debug — avoid reassigning
|
||
- PPS to any input-capable GPIO
|
||
|
||
**Gotchas:**
|
||
- Cold start can take 1-5 minutes to get a fix
|
||
- Needs clear sky view for antenna
|
||
- NMEA output at 9600 baud by default
|
||
- PPS signal is critical for NTP servers or precision timing applications
|
||
|
||
---
|
||
|
||
## Category 3: Sensors — Analog/Power
|
||
|
||
### ADS1115 (16-bit ADC, 4-channel)
|
||
|
||
- Interface:I2C
|
||
- Required Pins:SDA, SCL. Optional: ALERT/RDY (interrupt/data-ready)
|
||
- I2C Address:0x48 (ADDR→GND), 0x49 (ADDR→VDD), 0x4A (ADDR→SDA), 0x4B (ADDR→SCL)
|
||
- Voltage:2.0–5.5V
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- I2C1 (GPIO2/3)
|
||
- Essential for RPi projects needing analog inputs — RPi has no built-in ADC
|
||
- Enable with `dtparam=i2c_arm=on`
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C
|
||
- Less commonly needed since ESP32 has built-in 12-bit ADC
|
||
- Useful for higher resolution (16-bit) or to avoid ADC2/WiFi conflicts
|
||
|
||
**Gotchas:**
|
||
- 0x48 address collides with TMP102 temperature sensor
|
||
- Can run 4 devices on one I2C bus (4 addresses) for up to 16 analog channels
|
||
- Programmable gain amplifier (PGA) allows measuring small voltages
|
||
- Max sample rate is 860 SPS
|
||
- ADS1015 is the cheaper 12-bit variant with same pinout and addresses
|
||
|
||
---
|
||
|
||
### INA219 (Current/Voltage/Power Monitor)
|
||
|
||
- Interface:I2C
|
||
- Required Pins:SDA, SCL. Also: VIN+, VIN- (power sense pins, not GPIO)
|
||
- I2C Address:0x40 (A0=GND,A1=GND), 0x41, 0x44, 0x45 (via A0/A1 pins)
|
||
- Voltage:3.0–5.5V (bus voltage measurement up to 26V)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- I2C1 (GPIO2/3)
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C
|
||
|
||
**Gotchas:**
|
||
- ADDRESS COLLISION — 0x40 collides with PCA9685 servo driver
|
||
- 0x44/0x45 collide with SHT31
|
||
- If using INA219 + PCA9685, must configure different addresses via A0/A1 pins
|
||
- Shunt resistor value (typically 0.1Ω) determines current measurement range — must match library calibration
|
||
|
||
---
|
||
|
||
## Category 4: Displays
|
||
|
||
### SSD1306 (OLED Display, 128×64 or 128×32)
|
||
|
||
- Interface:I2C (most common), SPI
|
||
- Required Pins:I2C: SDA, SCL. SPI: MOSI, SCLK, CS, DC, RST (optional)
|
||
- I2C Address:0x3C (common), 0x3D (alternate, set by resistor)
|
||
- Voltage:3.3V–5V (most modules have regulator)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- I2C1 (GPIO2/3) for I2C mode
|
||
- SPI0 for SPI mode
|
||
- I2C mode fine for single display, SPI faster for animations
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C, any pins for SPI
|
||
- SPI recommended for high refresh rate
|
||
|
||
**Gotchas:**
|
||
- 0x3C address collides with SH1106 OLED (similar but different driver)
|
||
- 128×32 variant usually has fixed 0x3C address
|
||
- Some boards labeled "SSD1306" actually use SH1106 — different memory layout (132×64 with offset)
|
||
|
||
---
|
||
|
||
### ST7789 (TFT Color Display, typically 240×240 or 240×320)
|
||
|
||
- Interface:SPI only
|
||
- Required Pins:MOSI, SCLK, CS, DC, RST, BL (backlight)
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V logic. Most modules accept 3.3V–5V power
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- SPI0 (GPIO10 MOSI, GPIO11 SCLK, GPIO8 CE0)
|
||
- DC on any GPIO (commonly GPIO25)
|
||
- RST on any GPIO (commonly GPIO27)
|
||
- BL on PWM-capable GPIO (GPIO12 or GPIO18) for brightness control, or tie to 3.3V
|
||
|
||
**ESP32 Notes:**
|
||
- VSPI or any pins via GPIO matrix
|
||
- SPI clock can run up to 80MHz — good for smooth display updates
|
||
|
||
**Gotchas:**
|
||
- SPI-only, no I2C option
|
||
- ST7735 is the smaller cousin (128×160) — different driver, similar interface
|
||
- Some displays omit CS pin (tied to GND) — prevents sharing SPI bus
|
||
- BL pin may be active-high or active-low depending on module
|
||
|
||
---
|
||
|
||
### HD44780 (Character LCD, 16×2 or 20×4, via PCF8574 I2C Backpack)
|
||
|
||
- Interface:Parallel GPIO (6+ pins), I2C via PCF8574 backpack (recommended)
|
||
- Required Pins:I2C: SDA, SCL. Direct: RS, EN, D4-D7 (4-bit = 6 GPIOs)
|
||
- I2C Address:0x27 (most common), 0x3F (some variants). PCF8574A: 0x38–0x3F
|
||
- Voltage:5V for LCD. I2C backpack tolerates 3.3V I2C signals
|
||
- Pull-ups:Provided on PCF8574 backpack
|
||
|
||
**RPi Notes:**
|
||
- Use I2C backpack to save GPIOs
|
||
- I2C1 (GPIO2/3)
|
||
- RPi's 3.3V I2C usually works with 5V PCF8574 but is out of spec — consider level shifter
|
||
|
||
**ESP32 Notes:**
|
||
- I2C backpack strongly recommended
|
||
- ESP32 is 3.3V only — needs level shifter for direct 5V LCD parallel interface
|
||
|
||
**Gotchas:**
|
||
- PCF8574 address 0x27 collides with MCP23017 (0x20-0x27)
|
||
- Contrast potentiometer must be adjusted or display appears blank — #1 troubleshooting issue
|
||
- Backlight can be controlled via PCF8574 register bit
|
||
|
||
---
|
||
|
||
### e-Paper / e-Ink Display (Waveshare-style)
|
||
|
||
- Interface:SPI
|
||
- Required Pins:MOSI, SCLK, CS, DC, RST, BUSY (output from display)
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V logic and power
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- SPI0 (GPIO10 MOSI, GPIO11 SCLK, GPIO8 CE0)
|
||
- DC, RST, BUSY on any available GPIOs
|
||
- Waveshare HAT uses: RST=GPIO17, DC=GPIO25, CS=GPIO8, BUSY=GPIO24
|
||
|
||
**ESP32 Notes:**
|
||
- Any SPI pins via GPIO matrix
|
||
- BUSY must be on input-capable GPIO
|
||
- Input-only pins (GPIO34-39) are fine for BUSY
|
||
|
||
**Gotchas:**
|
||
- Refresh time is slow (1-15 seconds for full refresh)
|
||
- Partial refresh is faster but causes ghosting over time
|
||
- Do NOT refresh continuously — damages the panel
|
||
- Different Waveshare models (1.54", 2.13", 2.7", 4.2", 7.5") use different drivers — NOT interchangeable in software
|
||
|
||
---
|
||
|
||
## Category 5: Communication
|
||
|
||
### nRF24L01 (2.4GHz Radio Transceiver)
|
||
|
||
- Interface:SPI, GPIO
|
||
- Required Pins:MOSI, MISO, SCLK, CSN (chip select), CE (chip enable). Optional: IRQ
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V ONLY for VCC. SPI data pins are 5V tolerant
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- SPI0 (GPIO10 MOSI, GPIO9 MISO, GPIO11 SCLK, GPIO8 CE0 for CSN)
|
||
- CE on any GPIO (commonly GPIO17 or GPIO22)
|
||
- IRQ on any GPIO
|
||
- Add 10µF + 100nF capacitor across VCC/GND close to module — extremely sensitive to power supply noise
|
||
|
||
**ESP32 Notes:**
|
||
- VSPI or any SPI pins via GPIO matrix
|
||
- CE on any output GPIO
|
||
- Avoid strapping pins for CE
|
||
- Power supply decoupling equally important
|
||
|
||
**Gotchas:**
|
||
- PA+LNA variant draws up to 115mA — cannot be powered from typical breadboard 3.3V regulator
|
||
- Use dedicated 3.3V supply
|
||
- Range: basic module ~100m line of sight, PA+LNA ~1km+
|
||
- CSN is NOT the same as CE — CSN is SPI chip select, CE is nRF24-specific enable pin
|
||
|
||
---
|
||
|
||
### HC-05 / HC-06 (Bluetooth Classic Serial)
|
||
|
||
- Interface:UART
|
||
- Required Pins:TX, RX. Optional: STATE/STATUS, EN/KEY (AT mode on HC-05)
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V logic (module VCC 3.6–6V). Use voltage divider for 5V TX
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- GPIO14 (TX) / GPIO15 (RX)
|
||
- On Pi 3/4/Zero2W, use `dtoverlay=disable-bt` or `dtoverlay=miniuart-bt`
|
||
- Pi 5 has no conflict
|
||
- RPi TX → HC-05/06 RX, RPi RX → HC-05/06 TX (crossover)
|
||
|
||
**ESP32 Notes:**
|
||
- UART1 or UART2 on any GPIO pair
|
||
- Less commonly used since ESP32 has built-in Bluetooth
|
||
- Useful for bridging to Bluetooth Classic devices
|
||
|
||
**Gotchas:**
|
||
- HC-05 is master/slave capable, HC-06 is slave only
|
||
- Default baud rate: 9600 (HC-06), 38400 (HC-05 AT mode)
|
||
- HC-05 enters AT mode by holding EN/KEY HIGH during power-up
|
||
- Bluetooth Classic (not BLE) — not compatible with iOS without MFi
|
||
|
||
---
|
||
|
||
### SX1276 / RFM95W (LoRa Radio)
|
||
|
||
- Interface:SPI, GPIO
|
||
- Required Pins:MOSI, MISO, SCLK, NSS/CS, RST, DIO0 (interrupt). Optional: DIO1-DIO5
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- SPI0 (GPIO10 MOSI, GPIO9 MISO, GPIO11 SCLK, GPIO8 CE0)
|
||
- RST on any GPIO
|
||
- DIO0 on any GPIO (commonly GPIO25)
|
||
- NSS can use GPIO8 (CE0) or any GPIO as software CS
|
||
|
||
**ESP32 Notes:**
|
||
- Any SPI pins via GPIO matrix
|
||
- DIO0 to any input-capable GPIO
|
||
- Input-only pins (GPIO34-39) are fine for DIO0
|
||
|
||
**Gotchas:**
|
||
- LoRa operates in ISM bands (433/868/915 MHz) — use correct frequency for your country
|
||
- Antenna MUST be connected before transmitting or module can be damaged
|
||
- RFM95W is the HopeRF clone of SX1276 — pin-compatible and functionally identical
|
||
|
||
---
|
||
|
||
### MCP2515 (CAN Bus Controller)
|
||
|
||
- Interface:SPI, GPIO
|
||
- Required Pins:MOSI, MISO, SCLK, CS, INT. Needs external CAN transceiver (TJA1050/MCP2551)
|
||
- I2C Address:N/A
|
||
- Voltage:2.7–5.5V. Most modules include transceiver and run at 5V
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- SPI0 with `dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25`
|
||
- Adjust oscillator to match board crystal (8MHz or 16MHz)
|
||
- INT on GPIO (commonly GPIO25)
|
||
- Adds can0 network interface
|
||
- Second bus: `dtoverlay=mcp2515-can1,oscillator=8000000,interrupt=24` on SPI0 CE1
|
||
|
||
**ESP32 Notes:**
|
||
- Any SPI pins
|
||
- INT to any input-capable GPIO
|
||
- ESP32 has built-in CAN (TWAI) — MCP2515 useful for second CAN bus
|
||
- Still needs external transceiver
|
||
|
||
**Gotchas:**
|
||
- Oscillator frequency in overlay MUST match physical crystal — check markings (8MHz or 16MHz common)
|
||
- Wrong oscillator value = CAN bus won't work
|
||
- CAN bus requires 120Ω termination resistors at both ends
|
||
- Some modules include termination resistor — check before adding another
|
||
|
||
---
|
||
|
||
### ENC28J60 (SPI Ethernet Controller)
|
||
|
||
- Interface:SPI, GPIO
|
||
- Required Pins:MOSI, MISO, SCLK, CS, INT. Optional: RST (can tie to VCC)
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- SPI0 with `dtoverlay=enc28j60,int_pin=25,speed=12000000`
|
||
- INT on GPIO (commonly GPIO25)
|
||
- Adds eth1 network interface
|
||
- Max speed is 10 Mbps (10Base-T only)
|
||
|
||
**ESP32 Notes:**
|
||
- Any SPI pins via GPIO matrix
|
||
- Less commonly used since many ESP32 boards have built-in WiFi
|
||
- Useful for wired-only industrial applications
|
||
|
||
**Gotchas:**
|
||
- 10 Mbps only — no 100 Mbps or gigabit
|
||
- Uses significant CPU time due to SPI polling
|
||
- Not suitable for high-bandwidth applications
|
||
- MAC address usually set in software
|
||
- Consider W5500 (100 Mbps, hardware TCP/IP stack) as modern alternative
|
||
|
||
---
|
||
|
||
## Category 6: Motor Control
|
||
|
||
### PCA9685 (16-Channel PWM/Servo Driver)
|
||
|
||
- Interface:I2C
|
||
- Required Pins:SDA, SCL. Optional: OE (output enable, active low)
|
||
- I2C Address:0x40 (default). Configurable 0x40–0x7F via A0–A5 pins (62 addresses)
|
||
- Voltage:VCC 3.3V–5V for logic. Separate V+ for servos (up to 6V)
|
||
- Pull-ups:Provided on most breakouts
|
||
|
||
**RPi Notes:**
|
||
- I2C1 (GPIO2/3)
|
||
- No special overlay needed
|
||
- 12-bit resolution, 24Hz–1526Hz adjustable frequency
|
||
- OE pin to any GPIO if needed
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C
|
||
- Useful for adding PWM channels or servo control
|
||
|
||
**Gotchas:**
|
||
- ADDRESS COLLISION — default 0x40 collides with INA219
|
||
- Must change address via A0-A5 pins if both on same bus
|
||
- PCA9685 is a PWM driver, NOT a motor driver — generates PWM signals but cannot drive motors directly
|
||
- Connect outputs to motor drivers (L298N, DRV8825) or directly to servos
|
||
- All 16 channels share same PWM frequency
|
||
|
||
---
|
||
|
||
### L298N (Dual H-Bridge Motor Driver)
|
||
|
||
- Interface:GPIO (digital + PWM)
|
||
- Required Pins:Per motor: IN1, IN2 (direction), ENA (PWM speed). 2 motors: 6 GPIOs total
|
||
- I2C Address:N/A
|
||
- Voltage:Motor: 5–35V. Logic: 5V (on-board regulator if motor >7V). 3.3V tolerant
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- IN1-IN4 on any GPIO
|
||
- ENA/ENB on PWM-capable GPIO (GPIO12, GPIO13, GPIO18, GPIO19)
|
||
- Use `dtoverlay=pwm` or `dtoverlay=pwm-2chan` for smooth control
|
||
- Software PWM may cause audible motor whine
|
||
|
||
**ESP32 Notes:**
|
||
- IN1-IN4 on any output GPIO
|
||
- ENA/ENB on any GPIO (all support LEDC PWM)
|
||
- Avoid strapping pins
|
||
|
||
**Gotchas:**
|
||
- L298N has ~2V voltage drop across H-bridge — motor sees ~2V less than supply
|
||
- Not efficient for battery-powered projects
|
||
- 5V regulator on board can supply ~500mA for logic
|
||
- TB6612FNG is a more efficient alternative (MOSFET-based, ~0.5V drop)
|
||
|
||
---
|
||
|
||
### DRV8825 / A4988 (Stepper Motor Driver)
|
||
|
||
- Interface:GPIO (digital)
|
||
- Required Pins:STEP, DIR, ENABLE (active low, optional). MS1-MS3 (microstepping)
|
||
- I2C Address:N/A
|
||
- Voltage:DRV8825: 8.2–45V motor, 3.3V logic. A4988: 8–35V motor, 3.3V/5V logic
|
||
- Pull-ups:ENABLE has internal pull-down. STEP/DIR do not need pull-ups
|
||
|
||
**RPi Notes:**
|
||
- STEP on any GPIO (consider hardware PWM on GPIO12/13/18/19 for constant speed)
|
||
- DIR on any GPIO
|
||
- ENABLE on any GPIO
|
||
|
||
**ESP32 Notes:**
|
||
- STEP on any output GPIO
|
||
- Use LEDC PWM or RMT peripheral for consistent step timing
|
||
- Avoid strapping pins
|
||
|
||
**Gotchas:**
|
||
- DRV8825: up to 1/32 microstepping. A4988: up to 1/16
|
||
- Current limit must be set via potentiometer BEFORE connecting motor
|
||
- NEVER disconnect motor while driver is powered — back-EMF can destroy driver
|
||
- A4988 and DRV8825 have same pinout but different microstepping truth tables
|
||
|
||
---
|
||
|
||
## Category 7: Other
|
||
|
||
### MCP23017 (16-Channel GPIO Expander)
|
||
|
||
- Interface:I2C
|
||
- Required Pins:SDA, SCL. Optional: INTA, INTB (interrupts), RST (active-low reset)
|
||
- I2C Address:0x20–0x27 (A0, A1, A2 = 8 configurable addresses)
|
||
- Voltage:1.8–5.5V
|
||
- Pull-ups:Provided on most breakouts. GPIO pins have optional internal pull-ups
|
||
|
||
**RPi Notes:**
|
||
- I2C1 (GPIO2/3)
|
||
- Connect INTA/INTB to RPi GPIOs for interrupt-driven input
|
||
- Up to 8 expanders = 128 additional GPIOs
|
||
|
||
**ESP32 Notes:**
|
||
- Any GPIO pair for I2C
|
||
- Less commonly needed since ESP32 has many GPIOs
|
||
- Useful for projects needing many inputs with interrupt support
|
||
|
||
**Gotchas:**
|
||
- Address range 0x20–0x27 collides with PCF8574 (HD44780 I2C backpacks)
|
||
- If using both, ensure non-overlapping addresses
|
||
- Each output pin can source/sink 25mA (total per port: 125mA)
|
||
- PCF8574 is the 8-channel version with same address range
|
||
|
||
---
|
||
|
||
### WS2812B / NeoPixels (Addressable RGB LEDs)
|
||
|
||
- Interface:Single GPIO (proprietary protocol — NOT Dallas 1-Wire)
|
||
- Required Pins:DIN (1 GPIO). Chain DOUT→DIN between LEDs
|
||
- I2C Address:N/A
|
||
- Voltage:5V power. Data expects 5V logic (min 3.5V for logic high)
|
||
- Pull-ups:N/A. Add 300–500Ω resistor on data line. Add 1000µF capacitor at power
|
||
|
||
**RPi Notes:**
|
||
- USE GPIO18 (PWM0/PCM) or GPIO10 (SPI0 MOSI) or GPIO21 (PCM)
|
||
- rpi_ws281x library requires specific GPIOs (DMA-based timing)
|
||
- GPIO18 most common. GPIO10 requires `dtparam=spi=on`
|
||
- Needs sudo or specific permissions for DMA access
|
||
- RPi outputs 3.3V — use level shifter (3.3V→5V) for reliable operation
|
||
|
||
**ESP32 Notes:**
|
||
- Any output GPIO via RMT peripheral
|
||
- ESP32 outputs 3.3V — same level shifting recommendation
|
||
- RMT peripheral handles timing precisely without CPU intervention
|
||
|
||
**Gotchas:**
|
||
- LEVEL SHIFTER WARNING — 3.3V logic is below WS2812B spec (needs >3.5V)
|
||
- Works unreliably at short distances, fails with longer data lines
|
||
- Use 74AHCT125, 74HCT245, or SN74LV1T34 level shifter
|
||
- Each LED draws up to 60mA at full white — 60 LEDs = 3.6A
|
||
- Inject power every 30-50 LEDs for long strips
|
||
- SK6812 is compatible alternative with RGBW support
|
||
|
||
---
|
||
|
||
### Rotary Encoder (Incremental, with push button)
|
||
|
||
- Interface:GPIO (digital inputs)
|
||
- Required Pins:CLK/A, DT/B (encoder phases), SW (push button, active low)
|
||
- I2C Address:N/A
|
||
- Voltage:3.3V–5V (module dependent)
|
||
- Pull-ups:Most modules have 10kΩ on board. Bare encoder needs pull-ups
|
||
|
||
**RPi Notes:**
|
||
- Use any 3 GPIOs with interrupt support (all RPi GPIOs support edge-triggered interrupts)
|
||
- Enable internal pull-ups via gpiod or RPi.GPIO if bare encoder
|
||
|
||
**ESP32 Notes:**
|
||
- Any 3 input-capable GPIOs
|
||
- Hardware interrupt on all GPIOs
|
||
- Input-only pins (GPIO34-39) work fine
|
||
- Avoid strapping pins
|
||
|
||
**Gotchas:**
|
||
- Mechanical encoders generate switch bounce — need debouncing
|
||
- Hardware: 100nF capacitor across each pin to GND
|
||
- Software: 1-5ms delay
|
||
- Optical encoders don't bounce
|
||
- Reading must use interrupt or high-frequency polling — slow polling misses steps
|
||
- KY-040 is the most common breakout module
|
||
|
||
---
|
||
|
||
### Relay Modules (1/2/4/8 channel)
|
||
|
||
- Interface:GPIO (digital output)
|
||
- Required Pins:IN1 (one GPIO per channel). Multi-channel: IN1, IN2, IN3, IN4, etc.
|
||
- I2C Address:N/A
|
||
- Voltage:Module VCC typically 5V. Most blue relay modules are ACTIVE LOW
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- Any GPIO
|
||
- Check if module is active-low or active-high
|
||
- Most cheap modules are active-low — relay activates when GPIO goes LOW
|
||
- At boot, GPIOs are floating — may cause relay chatter
|
||
- Use pull-up resistor to keep relay OFF during boot
|
||
|
||
**ESP32 Notes:**
|
||
- Any output GPIO
|
||
- Same active-low/high consideration
|
||
- Avoid strapping pins (GPIO0, 2, 5, 12, 15) — boot states could trigger relays
|
||
- Avoid GPIO34-39 (input only)
|
||
|
||
**Gotchas:**
|
||
- Most modules have opto-isolated inputs
|
||
- Remove VCC-JD jumper for true isolation
|
||
- Relay coils cause voltage spikes — modules should have flyback diodes (most do)
|
||
- Never switch mains voltage without proper safety knowledge
|
||
- For DC loads, consider MOSFETs instead
|
||
|
||
---
|
||
|
||
### MAX31855 / MAX6675 (Thermocouple Interface)
|
||
|
||
- Interface:SPI (read-only — no MOSI needed)
|
||
- Required Pins:MISO/SO, SCLK/SCK, CS. No MOSI needed
|
||
- I2C Address:N/A
|
||
- Voltage:MAX31855: 3.0–3.6V. MAX6675: 5V. Most breakouts accept both
|
||
- Pull-ups:N/A
|
||
|
||
**RPi Notes:**
|
||
- SPI0 (GPIO9 MISO, GPIO11 SCLK, GPIO8 CE0)
|
||
- MOSI (GPIO10) unused but SPI0 still claims it
|
||
|
||
**ESP32 Notes:**
|
||
- Any SPI pins via GPIO matrix
|
||
- MOSI unused — can reassign to other functions
|
||
|
||
**Gotchas:**
|
||
- MAX31855 supports K, J, N, S, R, T type thermocouples — different variants for each
|
||
- MAX6675 supports K-type only and is older/less accurate
|
||
- Thermocouple wires are polarity-sensitive — red is always negative
|
||
- Cold-junction compensation is built in
|
||
- Keep chip close to terminal block to minimize cold-junction error
|
||
- MAX31855 has open/short fault detection
|
||
|
||
---
|
||
|
||
## I2C Address Collision Map
|
||
|
||
- 0x76:Devices=BME280, BMP280, MS5611, Resolution=Use alternate 0x77 for one device, or I2C multiplexer
|
||
- 0x77:Devices=BME280 (alt), BMP280 (alt), Resolution=Only one per bus at this address
|
||
- 0x40:Devices=INA219, PCA9685, HDC1080, Resolution=Change address via A0/A1 pins
|
||
- 0x44:Devices=SHT31, INA219 (A1=VDD,A0=GND), Resolution=Change INA219 address via A0/A1
|
||
- 0x45:Devices=SHT31 (alt), INA219 (alt), Resolution=Change INA219 address via A0/A1
|
||
- 0x3C:Devices=SSD1306, SH1106, Resolution=Different drivers, unlikely to use both
|
||
- 0x3D:Devices=SSD1306 (alt), Resolution=Rare collision
|
||
- 0x68:Devices=MPU6050, DS3231 RTC, Resolution=Set MPU6050 to 0x69 (AD0→VDD)
|
||
- 0x69:Devices=MPU6050 (alt), Resolution=Rare collision
|
||
- 0x48–0x4B:Devices=ADS1115 (configurable), TMP102, Resolution=Configure ADS1115 to non-conflicting address
|
||
- 0x20–0x27:Devices=MCP23017 (A0-A2), PCF8574, HD44780 backpack, Resolution=Configure A0-A2 to avoid overlap
|
||
- 0x27:Devices=PCF8574 (HD44780 backpack), MCP23017 (A0-A2 all high), Resolution=Change MCP23017 address
|
||
- 0x42:Devices=NEO-GPS (I2C mode), Resolution=Uncommon, rarely conflicts
|
||
|
||
When address conflicts cannot be resolved via address pins, use a TCA9548A I2C multiplexer. Each TCA9548A has 8 channels and its own configurable address (0x70-0x77), supporting up to 64 separate I2C buses from a single host bus.
|