# =============================
# Program: DS18B20 + MPU6050 + LCD I2C (Raspberry Pi Pico)
# =============================
from machine import Pin, I2C
import time
import onewire, ds18x20
# =============================
# Setup DS18B20
# =============================
ds_pin = Pin(15) # pastikan sesuai rangkaianmu
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
# =============================
# Setup MPU6050
# =============================
class MPU6050:
def __init__(self, i2c, addr=0x68):
self.i2c = i2c
self.addr = addr
self.i2c.writeto_mem(self.addr, 0x6B, b'\x00') # wake up
def read_raw(self, reg):
data = self.i2c.readfrom_mem(self.addr, reg, 2)
value = data[0] << 8 | data[1]
if value > 32767:
value -= 65536
return value
def accel(self):
ax = self.read_raw(0x3B) / 16384.0
ay = self.read_raw(0x3D) / 16384.0
az = self.read_raw(0x3F) / 16384.0
return ax, ay, az
# =============================
# Setup I2C for LCD and MPU6050
# =============================
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=400000)
mpu = MPU6050(i2c)
# =============================
# Library LCD I2C
# =============================
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
I2C_ADDR = 0x27 # alamat modul I2C LCD (umum 0x27 atau 0x3F)
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
lcd.clear()
lcd.putstr("Sistem Mulai...")
time.sleep(1)
# =============================
# LOOP UTAMA
# =============================
while True:
# Baca suhu
ds_sensor.convert_temp()
time.sleep_ms(750)
temp = ds_sensor.read_temp(roms[0])
# Baca MPU6050
ax, ay, az = mpu.accel()
vibration = abs(ax) + abs(ay) + abs(az)
# Tampilkan ke LCD
lcd.clear()
lcd.putstr("Suhu: {:.2f}C".format(temp))
lcd.move_to(0, 1)
lcd.putstr("Getar:{:.2f}".format(vibration))
time.sleep(0.5)