from machine import Pin, I2C
# from machine import Pin, ADC, PWM
from time import sleep
from utime import sleep_ms


relay1 = Pin(33, Pin.OUT)
relay2 = Pin(25, Pin.OUT)
relay3 = Pin(26, Pin.OUT)
relay4 = Pin(27, Pin.OUT)

import ssd1306

import framebuf
from images import (logo, yomin)

import oled_img_repo

# https://github.com/stlehmann/micropython-ssd1306/blob/master/ssd1306.py
# https://randomnerdtutorials.com/micropython-oled-display-esp32-esp8266/
# 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)

# ----------------------------
buffer = bytearray(logo)
fb = framebuf.FrameBuffer(buffer,oled_width,oled_height,framebuf.MONO_HLSB)
    

# Complete project details at https://RandomNerdTutorials.com
import machine, onewire, ds18x20, time
ds_pin = machine.Pin(4)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
print('Found DS devices: ', roms)

# Complete project details at https://RandomNerdTutorials.com
from machine import Pin
from time import sleep
import dht 
sensor = dht.DHT22(Pin(15))
#sensor = dht.DHT11(Pin(15))



def ds18b20():
    temp = None
    ds_sensor.convert_temp()
    time.sleep_ms(750)
    for rom in roms:
        temp = ds_sensor.read_temp(rom)
  
    return temp



def dht11():
    try:
        sensor.measure()
        temp = sensor.temperature()
        hum = sensor.humidity()
        temp_f = temp * (9/5) + 32.0
        # print('Temperature: %3.1f C' %temp)
        # print('Temperature: %3.1f F' %temp_f)
        # print('Humidity: %3.1f %%' %hum)
    except OSError as e:
        print('Failed to read sensor.')

    return hum
  


while True:
    relay1.value(True)
    relay2.value(True)
    relay3.value(False)
    relay4.value(False)
    time.sleep(1)
    relay1.value(False)
    relay2.value(False)
    relay3.value(True)
    relay4.value(True)

    oled.fill(0)
    # oled.pixel(0, 0, 1)
    # oled.invert(True)
    oled.text(f"temp: {str(ds18b20())}", 10, 10)      
    oled.text(f"hum: {str(dht11())}", 10, 20)    
    oled.show()
    time.sleep(1)


    #Image
    oled.fill(0)
    oled.blit(fb,0,0)
    oled.show()
    sleep_ms(500)
    oled.fill(0)

    buffer = bytearray(yomin)
    fb2 = framebuf.FrameBuffer(buffer,oled_width,oled_height,framebuf.MONO_HLSB)
    #Image
    oled.fill(0)
    oled.blit(fb2,0,0)
    oled.show()
    sleep_ms(500)
    oled.fill(0)

    for image in oled_img_repo.images_list:
        buffer = image

        fb = framebuf.FrameBuffer(buffer, 128, 64, framebuf.MONO_HLSB)
        oled.fill(0)
        oled.blit(fb, 8, 0)

        oled.show()
        sleep_ms(2000)

    
    
    
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
temp1:GND
temp1:DQ
temp1:VCC
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C