# Importando as bibliotecas necessárias
import machine, onewire, ds18x20, time
from machine import SoftI2C, Pin
from i2c_lcd import I2cLcd
import ssd1306
import mpu6050
# Configurações dos pinos
ds_pin = machine.Pin(13) # Pino para o sensor de temperatura DS18B20
AddressOfLcd = 0x27 # Endereço I2C do LCD
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000) # Configuração do I2C
tla = SoftI2C(scl=Pin(19), sda=Pin(18)) # Configuração do I2C para o OLED
i2c2 = SoftI2C(scl=Pin(2), sda=Pin(5)) # Configuração do I2C para o sensor MPU6050
# Inicializando o sensor de temperatura DS18B20
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()# Escaneando por dispositivos DS18B20
print(f'sensor de temperatura')
print(roms)
# Inicializando o LCD
lcd = I2cLcd(i2c, AddressOfLcd, 2, 16)
# Inicializando o OLED
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, tla)
# Inicializando o sensor MPU6050
mpu = mpu6050.accel(i2c2)
temp = 0#define o valor inicial do sensor
# Função para exibir a temperatura no LCD
def testLcd(temp):
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr(f'{temp}')
lcd.move_to(0, 1)
lcd.putstr(f'Graus Celsius')
while True:
# Convertendo leituras de temperatura do DS18B20
ds_sensor.convert_temp()
time.sleep_ms(750)
# Lendo a temperatura do sensor DS18B20
for rom in roms:
temp = ds_sensor.read_temp(rom)
# Exibindo a temperatura no LCD
testLcd(temp)
time.sleep_ms(500)
time.sleep(2)
# Lendo os valores do sensor MPU6050
temps = mpu.get_values()
# Leituras do giroscópio
xGyroscopio = temps["GyX"]
yGyroscopio = temps["GyY"]
zGyroscopio = temps["GyZ"]
# Convertendo as leituras do giroscópio
conversion = round(xGyroscopio * 250 / 32767, 2)
conversion2 = round(yGyroscopio * 250 / 32767, 2)
conversion3 = round(zGyroscopio * 250 / 32767, 2)
# Leituras do acelerômetro
xacelerometro = temps["AcX"]
yacelerometro = temps["AcY"]
zacelerometro = temps["AcZ"]
# Convertendo as leituras do acelerômetro
conver = round(xacelerometro * 2 / 32767, 2)
conver2 = round(yacelerometro * 2 / 32767, 2)
conver3 = round(zacelerometro * 2 / 32767, 2)
# Exibindo as leituras dos sensores no OLED
oled.fill(1)
oled.text("Gyro X: {}".format(conversion), 0, 0, 0)
oled.text("Gyro Y: {}".format(conversion2), 0, 10, 0)
oled.text("Gyro Z: {}".format(conversion3), 0, 20, 0)
oled.text("Accel X: {}".format(conver), 0, 30, 0)
oled.text("Accel Y: {}".format(conver2), 0, 40, 0)
oled.text("Accel Z: {}".format(conver3), 0, 50, 0)
oled.show()
time.sleep(1) # Delay para estabilidade