**1. Reading Analog Sensors (ADC Required)**
Since [Raspberry Pi](https://www.ampheo.com/c/raspberry-pi/raspberry-pi-boards) lacks analog pins, use an [MCP3008](https://www.onzuu.com/search/MCP3008) ADC (Analog-to-Digital Converter) for [sensors](https://www.ampheo.com/c/sensors) like:
* [Potentiometers](https://www.onzuu.com/category/potentiometers)
* Light-dependent resistors (LDRs)
* [Temperature sensors](https://www.onzuu.com/category/temperature-sensors) ([LM35](https://www.ampheo.com/search/LM35_page6))

**Wiring**

**Python Code (analog_read.py)**
```
python
import busio
import digitalio
import adafruit_mcp3xxx.mcp3008 as MCP
from adafruit_mcp3xxx.analog_in import AnalogIn
import board
# SPI setup
spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)
cs = digitalio.DigitalInOut(board.D8)
mcp = MCP.MCP3008(spi, cs)
# Analog input on CH0
chan = AnalogIn(mcp, MCP.P0)
print(f"Raw ADC Value: {chan.value}") # 0-1023
print(f"Voltage: {chan.voltage:.2f}V") # 0-3.3V
```
**2. Driving Motors**
**A. DC Motor (with H-Bridge [L298N](https://www.onzuu.com/product/stmicroelectronics-l298n-3217273))**
```
python
from gpiozero import Motor
motor = Motor(forward=17, backward=27)
motor.forward(speed=0.5) # 50% speed
motor.backward(speed=0.3) # 30% speed
motor.stop()
```
**B. Stepper Motor ([ULN2003](https://www.onzuu.com/search/ULN2003) Driver)**
```
python
from gpiozero import PhaseEnableStepperMotor
stepper = PhaseEnableStepperMotor(phase=19, enable=26, steps_per_rev=200)
stepper.forward(speed=0.02, steps=100) # 100 steps clockwise
stepper.backward(speed=0.01, steps=50) # 50 steps counter-clockwise
```
**3. Hardware Interrupts (Event-Driven Programming)**
Avoid polling loops with interrupts for instant response:
**Button Interrupt Example**
```
python
from gpiozero import Button
from signal import pause
def button_pressed():
print("Interrupt triggered!")
button = Button(2, pull_up=True)
button.when_pressed = button_pressed # Attach interrupt handler
pause() # Keep program running
```
**4. Multiprocessing for Real-Time Control**
Run GPIO tasks in parallel:
```
python
from gpiozero import LED, Button
from multiprocessing import Process
def led_blink():
led = LED(17)
while True:
led.toggle()
sleep(1)
def button_monitor():
button = Button(2)
while True:
if button.is_pressed:
print("Button pressed!")
Process(target=led_blink).start()
Process(target=button_monitor).start()
```
**5. Remote GPIO Control (Over Network)**
Access GPIO from another device:
```
python
# Server (Raspberry Pi)
from gpiozero import LED
from gpiozero.pins.pigpio import PiGPIOFactory
from time import sleep
factory = PiGPIOFactory(host='192.168.1.100') # Pi's IP
led = LED(17, pin_factory=factory)
while True:
led.toggle()
sleep(1)
```
**6. Essential Debugging Tools**
**1. Check GPIO state:**
```
bash
gpio readall # Requires wiringPi
```
**2. Monitor system resources:**
```
bash
sudo apt install htop
htop
```
**3. Logic analyzer:** Use PulseView with an FTDI dongle.
**7. Pro Tips**
🔥 Minimize latency: Use pigpio instead of RPi.GPIO for <10μs accuracy.
🔥 Prevent damage: Always use:
* [Resistors](https://www.onzuu.com/category/resistors) for LEDs
* Flyback [diodes](https://www.onzuu.com/category/diodes) for motors
* [Optoisolators](https://www.onzuu.com/category/optoisolators) for high-voltage circuits