from machine import I2C, ADC, SPI
from umqtt.simple import MQTTClient
import json
import math
from usemqttclient import main
import usemqttclient
# from parse import Parse
# import config as C
display_seq = 5
# 핀 번호
I2C_SDA = 8
I2C_SCL = 9
LDR_ADC_PIN = 1
MQ2_PIN = 2
PIR_PIN = 3
LED_PIN = 7
brightness = 0
gas = 0
# I2C
i2c = I2C(0, scl=I2C_SCL, sda=I2C_SDA)
# LDR
ldr = ADC(LDR_ADC_PIN)
try:
ldr.atten(ADC.ATTN_11DB)
except:
pass
R_FIXED = 10_000
VCC = 3.3
GAMMA = 0.7
RL10 = 50_000
from ssd1306 import SSD1306_I2C
WIDTH = 128
HEIGHT = 64
oled = SSD1306_I2C(WIDTH, HEIGHT, i2c)
# MQTT
# MQTT Server Parameters
MQTT_CLIENT_ID = "test"
MQTT_SERVER = "broker.mqttdashboard.com"
MQTT_PORT = 1883
MQTT_USER = ""
MQTT_PASS = ""
MQTT_TOPIC = "tele/ESP32-WOKWI/2305001"
DEVICE = "ESP32C3-WOKWI"
SSID = "Wokwi-GUEST"
SSID_PASS = ""
client = MQTTClient(
MQTT_CLIENT_ID,
MQTT_SERVER,
port=MQTT_PORT,
user=MQTT_USER,
password=MQTT_PASS,
keepalive=60
)
def callback(in_topic, in_msg):
topic = in_topic.decode()
msg = in_msg.decode()
print(f'RCV>{topic}, |{msg}|')
# 예: TELEPERIOD 변경
try:
if topic == f'cmnd/{DEVICE}/2305001/TELEPERIOD':
sensor_timer.set(period=int(msg) * 1000)
tele_msg = {'TELEPERIOD': int(msg)}
mqtt.publish(f'stat/{DEVICE}/2305001/TELEPERIOD', msg, retain=True)
mqtt.publish(f'tele/{DEVICE}/2305001/INFO', tele_msg, retain=True)
print(f'TELEPERIOD가 {msg}초로 변경되었습니다.')
except ValueError:
print('msg가 숫자가 아님.')
def on_connect():
print('on_connect() called')
msg = {'TELEPERIOD': 10}
mqtt.publish(f'tele/{DEVICE}/2305001/INFO', msg, retain=True)
# mqtt = UseMQTTClient(client, DEVICE, SSID, SSID_PASS, callback, on_connect)
def display_oled():
global display_seq, brightness
display_seq += 1
display_seq = display_seq % 2
if display_seq == 0:
oled.fill(0)
try:
from hangul import draw_hangul
draw_hangul(oled, '조도', 0, 0)
except:
oled.text("LUX", 0, 0)
oled.text('{} lx'.format(brightness), 0, 20)
oled.text("1", 0, 40)
oled.show()
else:
oled.show()
def callback_more(topic:str,msg:str):
if topic ==f'cmnd/{C.DEVICE}/RELAY':
relay.set_on_off_str(msg)
mqtt.publish(f'stat/{C.DEVICE}/RELAY', relay.on_off())
def read_sensors_more():
ldr_analog = ldr.read()
# print(ldr_analog)
if ldr_analog <= 0:
ldr_analog = 1
voltage = ldr_analog / 4095.0 * VCC
try:
r_ldr = R_FIXED * (VCC / voltage - 1.0)
if r_ldr <= 0:
r_ldr = 1
except ZeroDivisionError:
r_ldr = 1
try:
lux = pow(10, (math.log10(r_ldr / RL10) / -GAMMA))
except ValueError:
lux = 0
return lux
# def main():
# global brightness
# while True:
# brightness = read_sensors_more()
# display_oled()
# mqtt.main()
if __name__ == '__main__':
main()Loading
esp32-c3-devkitm-1
esp32-c3-devkitm-1