Trong Module NodeMCU con ESP8266 chíp nạp CP có xây dựng sẵn 2 đèn LED. Một con được kết nối với chân GPIO2 và con LED kia kết nối với chân GPIO16.
Đặc điểm là cực Anode(+) của con LED kết nối với cực dương của nguồn điện, cực còn lại Cathode kết nối với chân GPIO, nên khi chân bật mức HIGH thì LED tắt còn, mức LOW thì LED sáng.
Trong bài hướng dẫn này, chúng ta sẽ đi điều khiển con 2 con LED này qua mạng bằng cách sử dụng Websever bằng cách kết nối Wifi mạng nội bộ.
Bạn có thể Copy đoạn Code sau đây và lưu vào ESP của bạn, rồi chạy nó.
Lưu ý là đổi tên mạng wifi và mật khẩu. Sau khi chạy, nếu kết nối thành công nó sẽ hiện địa chỉ ip dạng 192.168.x.x bạn copy địa chỉ này và dán vào trình duyệt web để truy cập, rồi click chuột vào nút tắt hoặc mở.
#Khai báo các thư viện cần nhập vào
import socket, esp, network, gc, time
from machine import Pin
#Tắt gỡ lỗi của hệ điều hành hệ thống
esp.osdebug(None)
#Chạy trình thu dọn gác, góp phần quản lý làm trống bộ nhớ
gc.collect()
#Tạo biến Socket để kết nối
bienSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#Chỉ định ip của server và cổng kết nối mặc định 80, chuỗi rỗng '' có nghĩa là local ip của server ESP.
bienSocket.bind(('', 80))
#Số lượng các kết nối tối đa được phép, maximum là 5
bienSocket.listen(5)
#Khai báo tên Wifi và mật khẩu
tenWifi = 'Tên mạng Wifi của bạn'
matKhau = 'Đánh mật khẩu vào đây'
#Đặt tên biến trạm kết nối là ESP_Wifi và thực hiện kết nối.
ESP_Wifi = network.WLAN(network.STA_IF)
ESP_Wifi.active(True)
ESP_Wifi.connect(tenWifi, matKhau)
time.sleep(1)
while ESP_Wifi.isconnected() == False:
print('Kết nối CHƯA thành công')
pass
print('Kết nối thành công')
print(ESP_Wifi.ifconfig())
#Module ESP8266 chíp nạp CP có 2 đèn led. 1 con kết nối với GPIO2 và 1 con kết nối với GPIO16.
led = Pin(2, Pin.OUT) #Led này báo hiệu Wifi kết nối thành công hay chưa
led16 = Pin(16, Pin.OUT)
#Xây dựng hàm Trang Web
def TrangWeb():
#Đầu tiên kiểm tra xem chân GPIO 16 đang tắt hay mở. ESP8266 có LED kết nối với cực dương, nên LOW là led sáng, HIGH là LED tắt.
if led16.value() == 1:
gpio_state="Tắt"
else:
gpio_state="Mở"
#Xây dựng mã HTML, để hiểu mã và chỉnh cho nó đẹp, các bạn cần học về lập trình web HTML
html = """
<html>
<head>
<title>Điều khiển đèn Led qua trang WEB</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Điều khiển LED qua mạng</h1>
<p>Trạng thái chân GPIO: <b>""" + gpio_state + """</b></p>
<p><a href="/?led=Mo"><button> Mở LED </button></a></p>
<p><a href="/?led=Tat"><button> Tắt LED </button></a></p>
</body>
</html>"""
return html
#Vào chương trình chính
while True:
ketNoi, diaChiIp = bienSocket.accept()
print('Đã kết nối từ máy có ip: %s' % str(diaChiIp[0]))
request = ketNoi.recv(1024)
request = str(request)
#print(request)
led_on = request.find('/?led=Mo')
led_off = request.find('/?led=Tat')
if led_on == 6:
print('LED ON: ')
led16.value(0)
if led_off == 6:
print('LED OFF:')
led16.value(1)
response = TrangWeb()
ketNoi.sendall(response)
ketNoi.close()
Sau khi chạy lên và truy cập vào trình duyệt web bạn sẽ thấy thế này
Không có nhận xét nào:
Đăng nhận xét