**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
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.