# Example0: Higher Level API
# from machine import Pin
# from utime import sleep
# print("Hello, ESP32!")
# led = Pin(15, Pin.OUT)
# while True:
# led.on()
# sleep(0.5)
# led.off()
# sleep(0.5)
# Example 1: Lower Level API Access
from machine import mem32
import time
# ESP32 GPIO Register Base Address
GPIO_BASE_ADDR = 0x3FF44000
# Offsets from base
GPIO_OUT_OFFSET = 0x04 # Read output level
GPIO_OUT_W1TS_OFFSET = 0x08 # Set output (1 = HIGH)
GPIO_OUT_W1TC_OFFSET = 0x0C # Clear output (1 = LOW)
GPIO_ENABLE_OFFSET = 0x20 # Output enable
# Functionality register address
GPIO_OUT_REG = GPIO_BASE_ADDR + GPIO_OUT_OFFSET
GPIO_OUT_W1TS_REG = GPIO_BASE_ADDR + GPIO_OUT_W1TS_OFFSET
GPIO_OUT_W1TC_REG = GPIO_BASE_ADDR + GPIO_OUT_W1TC_OFFSET
GPIO_ENABLE_REG = GPIO_BASE_ADDR + GPIO_ENABLE_OFFSET
# Choose the GPIO pin
GPIO_NUM = 15
PIN_MASK = 1 << GPIO_NUM #0b1 << GPIO_NUM = 0b1000...00 , numbers of zeros depende on the GPIO Num
# Set GPIO2 as output
mem32[GPIO_ENABLE_REG] |= PIN_MASK
# Blink loop
# while True:
# print(f"Before ON: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# mem32[GPIO_OUT_W1TS_REG] = PIN_MASK # LED ON
# print(f"After ON: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# time.sleep(0.5)
# print(f"Before OFF: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# mem32[GPIO_OUT_W1TC_REG] = PIN_MASK # LED OFF
# print(f"After OFF: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# time.sleep(0.5)
# print(f"Before ON: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# mem32[GPIO_OUT_W1TS_REG] = PIN_MASK # LED ON
# print(f"After ON: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# time.sleep(0.5)
# print(f"Before OFF: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# mem32[GPIO_OUT_W1TC_REG] = PIN_MASK # LED OFF
# print(f"After OFF: GPIO_OUT = {bin(mem32[GPIO_OUT_REG])}")
# time.sleep(0.5)