from machine import Pin, I2C
import ssd1306
from MPU6050 import MPU6050
from time import sleep_ms
# ESP32 Pin assignment
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# Screen Pages
page = 0
pButton = Pin(2,Pin.IN, Pin.PULL_UP)
# Init MPU6050
mpu = MPU6050()
# Draw rectangle in the screen
def drawRectangle(xs,xe,ys,ye):
for x in range(xs,xe):
# Top line
oled.pixel(x,ys,1);
# Bottom Line
oled.pixel(x,ye,1);
for y in range(ys,ye):
# Left Line
oled.pixel(xs,y,1);
# Right Line
oled.pixel(xe,y,1);
def drawField(x,y,lenght,text,selected):
drawRectangle(x,x+lenght,y,y+10)
oled.text(text, x+2, y+2)
oled.invert(0)
def drawAccelerometerWindow():
drawRectangle(0,127,0,63)
drawField(0,0, 127, "Accelerometer", False)
accel = mpu.read_accel_data()
aX = accel["x"]
aY = accel["y"]
aZ = accel["z"]
oled.text("X: " + str(round(aX,3)) + " m/s^2", 10, 20)
oled.text("Y: " + str(round(aY,3)) + " m/s^2", 10, 35)
oled.text("Z: " + str(round(aZ,3)) + " m/s^2", 10, 50)
def drawGyroWindow():
drawRectangle(0,127,0,63)
drawField(0,0, 127, "Gyro:", False)
gyro = mpu.read_gyro_data()
gX = gyro["x"]
gY = gyro["y"]
gZ = gyro["z"]
oled.text("X: " + str(round(gX,3)) + " o/seg", 10, 20)
oled.text("Y: " + str(round(gY,3)) + " o/seg", 10, 35)
oled.text("Z: " + str(round(gZ,3)) + " o/seg", 10, 50)
def drawTemperatureWindow():
drawRectangle(0,127,0,63)
drawField(0,0, 127, "Temperature", False)
temp = mpu.read_temperature()
oled.text("Temp: " + str(round(temp,1)) + " C", 10, 35)
def drawInfoWindow():
drawRectangle(0,127,0,63)
drawField(0,0, 127, "Info", False)
oled.text("Celso Silvestre", 5, 20)
oled.text("clsoft.silvestre", 1, 35)
oled.text("@gmail.com", 15, 50)
# Main loop
while True:
oled.fill(0)
if pButton.value() == False and page <3:
page+=1
elif pButton.value() == False and page >=3:
page = 0
# Accelerometer page
if page == 0:
drawAccelerometerWindow()
# Temperature page
if page == 1:
drawTemperatureWindow()
# Gyro page
if page == 2:
drawGyroWindow()
# Gyro page
if page == 3:
drawInfoWindow()
oled.text("P" + str(page), 110, 2)
oled.show()
sleep_ms(100)