from machine import Pin, SoftI2C,PWM
from onewire import OneWire
from ds18x20 import DS18X20
import ssd1306
from time import sleep
from utime import sleep, sleep_ms, ticks_ms, ticks_diff
#declare pin for DS18B20 sensor
ds_pin = Pin(21)
#create an object called ds_sensor to interface with DS18B20 sensor
ds_sensor = DS18X20(OneWire(ds_pin))
#scan for DS18B20 sensors and store the addresses in a list
ds_addrs = ds_sensor.scan()
#declare pin on OLED display
i2c_oled = SoftI2C(scl=Pin(22), sda=Pin(21))
led = Pin(19, Pin.OUT)
#BUZZER
buzzer=PWM(Pin(23), Pin.OUT)
#define OLED basic parameter
oled_width = 128 #based on spec
oled_height = 64 #based on spec
#create an object called oled
#remark; object format "library name . class name"
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c_oled)
while True:
ds_sensor.convert_temp() #read temperature data from the DS18B20 sensor
sleep_ms(750)
temp = ds_sensor.read_temp(ds_addrs[0])
print('The temperature is:', temp)
oled.fill(0) #display the temperature on the OLED screen
oled.text('Temperature:', 0,0,1)
oled.text(str(temp), 0,20,1)
oled.text('C', 80,20,1)
oled.show()
if temp>=24:
for i in range(5): #LOOP
led.on() #ON
sleep(0.38)
buzzer.init(freq=1703, duty=400) #pitch of the buzzer
sleep(1)
buzzer.init(freq=1, duty=0) #OFF/no sound/no blinking
sleep(1)
led.off()
sleep(0.43)
else:
led.off() #OFF/no blinking
#sleep(0.5)
buzzer.init(freq=1, duty=0) #OFF/no sound
sleep(1) #wait for a short time before updating the display and checking the sensor again