from machine import Pin
from time import sleep
#===================================================================================
'''# Hardware-Level Simultaneous (Register Access)
from machine import Pin, mem32
# ESP32 GPIO register addresses
GPIO_OUT_REG = 0x3FF44004 # GPIO_OUT_REG for pins 0-31
GPIO_OUT_W1TS_REG = 0x3FF44008 # Set bits
GPIO_OUT_W1TC_REG = 0x3FF4400C # Clear bits
# Define which pins you want to control (as bit mask)
PIN_MASK = (1 << 6) | (1 << 7) | (1 << 8) | (1 << 15) # Pins 6, 7, 8, 15
# Initialize pins as outputs first
pins = [Pin(6, Pin.OUT), Pin(7, Pin.OUT), Pin(8, Pin.OUT), Pin(15, Pin.OUT)]
# Set all pins HIGH simultaneously (hardware level)
mem32[GPIO_OUT_W1TS_REG] = PIN_MASK
# Set all pins LOW simultaneously (hardware level)
mem32[GPIO_OUT_W1TC_REG] = PIN_MASK
# Set specific pattern (some HIGH, some LOW)
# First clear all, then set desired ones
mem32[GPIO_OUT_W1TC_REG] = PIN_MASK # Clear all
desired_high = (1 << 6) | (1 << 15) # Only pins 6 and 15 HIGH
mem32[GPIO_OUT_W1TS_REG] = desired_high'''
from machine import Pin, mem32
import time
class SimultaneousGPIO:
def __init__(self, pin_numbers):
self.pins = [Pin(num, Pin.OUT) for num in pin_numbers]
self.pin_mask = 0
for num in pin_numbers:
self.pin_mask |= (1 << num)
# ESP32 GPIO registers
self.GPIO_OUT_W1TS_REG = 0x3FF44008 # Set register
self.GPIO_OUT_W1TC_REG = 0x3FF4400C # Clear register
def set_all_high(self):
"""Set all pins HIGH simultaneously"""
mem32[self.GPIO_OUT_W1TS_REG] = self.pin_mask
def set_all_low(self):
"""Set all pins LOW simultaneously"""
mem32[self.GPIO_OUT_W1TC_REG] = self.pin_mask
def set_pattern(self, pattern_mask):
"""Set specific pattern - pattern_mask should have bits set for desired HIGH pins"""
# First clear all pins
mem32[self.GPIO_OUT_W1TC_REG] = self.pin_mask
# Then set desired pins
mem32[self.GPIO_OUT_W1TS_REG] = pattern_mask & self.pin_mask
# Example usage
gpio_controller = SimultaneousGPIO([6, 7, 8, 15])
while True:
# Specific pattern (pins 2 and 18 HIGH, others LOW)
pattern = (1 << 6) | (1 << 15)
gpio_controller.set_pattern(pattern)
time.sleep(0.5)
pattern = (1 << 7) | (1 << 8)
gpio_controller.set_pattern(pattern)
time.sleep(0.5)