import network
import ujson
from machine import Pin, I2C
import ssd1306
from time import sleep
from umqtt.simple import MQTTClient
# Khởi tạo giao diện I2C cho màn hình OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
#Kích thước màn hình OLED
oled_width = 128 #Chiều rộng
oled_height = 64 #Chiều cao
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# Xóa màn hình và hiển thị thông điệp khởi động
oled.fill(0) # Xóa màn hình
oled.text('Hello, Wokwi!', 10, 10) # Hiển thị thông điệp
oled.show() # Cập nhật màn hình
sleep(2) # Dừng 2 giây
oled.fill(0) # Xóa màn hình
# Hàm xử lý tin nhắn MQTT
def mqtt_message(topic, msg): #topic : chủ đề của tin nhắn , msg: nội dung tn
print("Incoming message:", msg) # In ra tin nhắn nhận được
try:
msg = ujson.loads(msg) # Giải mã tin nhắn JSON
oled.text(msg, 10, 10) # Hiển thị tin nhắn trên màn hình
oled.show() # Cập nhật màn hình
sleep(2) # Dừng 2 giây
oled.fill(0) # Xóa màn hình
except Exception as e:
print("Error:", e) # In ra lỗi nếu có
print("Đang bắt đầu khởi động các kết nối!")
# Kết nối Wi-Fi
print("Đang kết nối WiFi...", end="")
wifi = network.WLAN(network.STA_IF) # Khởi tạo chế độ STA (Client)
wifi.active(True) # Bật Wi-Fi
wifi.connect("Wokwi-GUEST", "") # Kết nối đến mạng Wi-Fi
while not wifi.isconnected(): # Chờ cho đến khi kết nối thành công
sleep(0.5)
print(".", end="") # In dấu "." để chỉ trạng thái kết nối
print("kết nối thành công✔")
# Kết nối đến máy chủ MQTT
print("Đang kết nối MQTT...")
client = MQTTClient("wokwi1", "broker.hivemq.com") # Khởi tạo client MQTT
client.set_callback(mqtt_message) # Đặt hàm xử lý tin nhắn
try:
client.connect() # Kết nối đến broker MQTT
client.subscribe("wokwi1") # Đăng ký theo dõi chủ đề "wokwi1"
print("Kết nối thành công ✔")
except Exception as e:
print("Kết nối thất bại:", e) # In ra lỗi nếu kết nối thất bại
while True:
client.wait_msg() # Chờ tin nhắn đến và xử lý