Bài này mình sẽ xây dựng 1 ứng dụng demo nho nhỏ để điều khiển led qua internet bằng tập lệnh AT – mode Station. Nguyên lí hoạt động khá đơn giản. ESP8266 sẽ gửi 1 truy vấn (request) tới 1 trang web, trang web này sẽ trả về reponse có chưa từ khóa mô tả trạng thái ON hay OFF của đèn LED.

Các bạn đọc kĩ hơn về tập lệnh at esp8266 tại bài trước

Hmm… thế trang web này mình sẽ lấy ở đâu ra ? Bình thường se phải đi thuê từ các nhà cung cấp dịch vụ như Mắt Bão, Supper host, Zcom…. như blog này của mình cũng đi thuê nên mình có thể dùng được luôn. Nhưng mình sẽ hướng dẫn các bạn sử dụng dịch vụ cung cấp website free để làm demo này. Có 2 trang web cung cấp web free khá phổ biến mà mình biết đó là:

  • https://www.000webhost.com
  • https://infinityfree.net/

Mình sẽ sử dụng dịch vụ của 000WEB cho project này này !

Đăng kí tài khoản và đăng nhập

Đăng nhập hoặc đăng kí tài khoản nếu chưa có
Các bạn Click vô đây để tạo 1 Web site mới nhé
Nhập tên web và password của bạn để vào trang admin của web
Website của mình vừa được tạo

Sau đó click CREATE để tiến hành tạo website. Như thế là xong. Mình đã có 1 web tên là https://iot47.000webhostapp.com/ cho riêng mình. Các bạn có thể gõ vào trình duyệt để test thử !

Khi vừa mới tạo chưa code gì thì vào nó sẽ như này

Thiết kế giao diện

Click vào Quản lí web để vào trang admin
Có 4 tùy chọn để dựng web, do mình sẽ code tay nên chọn vào cái Upload Website nhé

Click chuột phải và tạo 1 file mới có tên là index.php

OK. Đã vào được trang quản lí thư mục
Click New file và tạo file index.php nhé ! Nếu có bắt đăng nhập thì các bạn điền tên web và pass admin lúc nãy đã tạo nhé

index.php chính là file đầu tiền mà trình duyệt sẽ chạy vào để load mã code khi người dùng vào web mình. Nó cũng chính là file để chúng tạo code giao diện web, xử lí các sự kiện ấn nút của người dùng

Click chuột phải và Open file index.php lên. Copy đoạn mã HTML này vào và truy cập vào WEB thử nhé !

Truy cập vào web của mình thử nào

Đã có giao diện điều khiển. Bây giờ mình sẽ tạo tiếp 1 file trangthaiLED.txt

OK. Bây nguyên tắc hoạt động của web mình sẽ như sau:
Khi truy cập vào web sẽ không có dữ liệu nào được nạp nên màn hình chỉ hiển ra nội dung của mã html
Khi ấn nút tắt trên WEB sẽ gọi tới file index.php và truyền thêm biến tat để sửa nội dung file trangthaiLED.txt thành tat
Ngược lại: Khi ấn nút Bật trên WEB sẽ gọi tới file index.php để sửa nội dung file txt thành bat

Giờ hãy thử ấn nút Bật và Tắt sau đó kiểm tra nội dung file trangthaiLED.txt xem có giống như mình nói không nhé. mình có thể thây file trangthaiLED.txt giống như 1 con IC eeprom vậy

OK, bây giờ còn 1 nhiệm vụ nữa trước khi kết thúc phần thiết kế server. Đó là ta phải tạo ra 1 đường dẫn để esp truy cập vào và đọc thông tin có trong file text

Hãy tạo 1 file tên là kiemtra.php

Nội dung của file kiemtra.php như sau

OK. Giờ hãy gõ đường link có dang http://iot47.000webhostapp.com/kiemtra.php
Lưu ý: iot47 là tên miền của mình, bạn phải thay bằng tên miền của bạn nhé

Và đây là kết quả. Nội dung của file txt đã hiện ra màn hình. Hãy thử vào trang chính ấn nút Tắt và load lại trang kiểm tra xem nội dung có thay đổi không nhé !

Vậy là xong ! Bạn đã có 1 server mọi lúc mọi nơi và FREE cho riêng mình rồi đó !
Giờ tới phần ESP cho nó truy cập vào địa chỉ iot47.000webhostapp.com/kiemtra.php để lấy nội dung trạng thái bat tat về.

ESP8266 kiểm tra trạng thái LED và bật tắt LED

1.Test thử bằng máy tính với Hecurles và module chuyển đổi USB-UART

Trước khi làm việc với vi điều khiển, mình sẽ lại test thử bằng cách gửi lệnh bằng tay trước nhé

giao tiep at esp8266

Mình đã chuẩn bị module PL2303 và một pcb ra chân cho esp8266 để kết nối cho dễ. Các bạn cứ kết nối theo sơ đồ này là được.

ESP8266 PL2303
VCC + CH_PD 3.3V
GND GND
TX RX
RX TX

Bây giờ cắm PL2303 vào máy tính, bật Hercules lên và gửi lệnh thử nào

Chú ý, sau mỗi truy vấn các bạn gửi CIPCLOSE để đóng kết nối thì k bị lỗi nhé như mình ở trên video nhé ! Khi gửi lệnh kết nối tới server thì phải chờ nó trả vê CONNECT OK đã rồi mởi send truy vấn đi !
Sau mỗi truy vấn, chuỗi reponse sẽ trả về các herder(thứ mà ta không quan tâm lắm) và dưới cùng chính là nội dung của file txt ( bat or tat). mình sẽ bắt chuỗi này để đưa ra trạng thái điều khiển LED tương ứng !

Demo giao tiếp với vi điều khiển PIC16F877A điều khiển LED

mình đã test gửi thử với lệnh AT bằng máy tính xong. Giờ mình sẽ giao tiếp bằng video khiển. Do hơi ngại làm mạch thật nên mình sẽ sử dụng phần mềm mô phư Proteus, đương nhiên trong proteus không có module wifi cho mình mô phư nên con PIC ảo sẽ giao tiếp với ESP8266 thật của cổng COMPIM của proteus

Các bạn chuẩn bị

  • Phần mềm mô phư mạch điện tử Proteus
  • Phần mềm lập trình CCS PIC
  • Module pl2303 và esp8266 (hàng thật :v)

Chú ý, proteus 7.3 mình dùng thì thấy nó không hỗ trợ tốc độ baud 115200 nên tốt nhất hãy chuyển tốc độ baud của ESP8266 về 9600 cho chắc chắn nhé. Sử dụng phần mềm hecurles và gửi lệnh
AT+UART_DEF=9600,8,1,0,0$0D$0A để chuyển baudrate về 9600

Mạch nguyên lí trên mô phư

giao tiep at esp8266

Mạch mô phư đơn giản như thế thôi nhé, các bạn nhớ click chuột phải vào công COMPIM để cài tốc độ baud 115200 và chọn cổng COM của PL2303 (nếu không biết COM mấy thì vào Devicer Manager ở trong (chuột phải)My Computer nhé !
Mình có thêm 2 cái teminal để DUBUG dữ liệu gửi nhận UART

Click phải vào COMPIM để cài baud

Chương trình điều khiển cho PIC trên phần mềm CCS qua tập lệnh at esp8266

Các bạn khởi tạo project với thạch anh 20Mhz
Cấu hình UART như sau

Cấu hình các thông số của bạn nhé

Hàm khởi tạo ESP8266

Hàm bắt chuỗi bat hoặc tat để điều khiển LED tương ứng

Tiếp theo xây dựng hàm để gửi request liên tục lên server của bạn và reponse có kèm trạng thái LED về.Mình sẽ đặt hàm này vào trong while(1) của main

Và TEST nào !

Kết luận

Với phương pháp này và sử dụng tập lệnh at esp8266, mình có ưu điểm là thực hiện nhanh chóng, dễ dàng, điều khiển mọi lúc mọi nơi miễn là có internet. Tuy nhiên, tốc độ đáp ứng rất chậm do phải thiết lập các kết nối liên tục, ESP8266 sẽ nhanh nóng, cũng như hao tốn tài nguyên WEB của bạn nếu như có quá nhiều esp8266 truy vấn vào.
Các bạn có thời gian có thể làm mạch thực để test nhé. Nhưng chi demo hay làm đồ án thôi chứ không nên xài vì cách này không tối ưu lắm và cái server FREE chả biết khi nào nó ngỏm . Hehe
Ở các bài tiếp theo mình sẽ hướng dẫn các bạn biến ESP8266 thành 1 cái server WEB thay vì phải đi thuê web hay xài web free như trên !

DOWNLOAD

Toàn bộ file code, mô phư các bạn có thể tải về TẠI ĐÂY

Đọc thêm các bài về tập lệnh at esp8266

  • http://iot47.com/bai-1-lam-quen-voi-module-wifi-esp8266/
  • http://iot47.com/iot-bai-2-giao-tiep-voi-module-wifi-esp8266-bang-tap-lenh-at/
  • http://iot47.com/iot-bai-4-gioi-thieu-ngon-ngu-html-va-mo-hinh-http-resquest-reponse/

Hello there. I discovered your website by way of Google whilst searching for a comparable subject, your website came up. It appears to be good. I have bookmarked it in my google bookmarks to come back then.

Hi admin,
Em làm theo hướng dẫn đến bước cuối cùng khi GET thì bị gặp lỗi:

GET /kiemtra.php HTTP/1.1Host: zzz.000webhostapp.combusy s…
busy s…

SEND OK
CLOSED

“zzz là tên trang web”
rất mong được admin giúp đỡ.
Thanks.

bạn nên có kí tự kết thúc dùng nr ở cuối mỗi câu lệnh

…….

Hướng dẫn chi tiết quá, thanks admin

Hi admin,
Khi em làm đến bước GET /kiemtra.php HTTP/1.1$0D$0AHost: ZZZZ.000webhostapp.com$0D$0A$0D$0A thì phần mềm báo busy sau đó tự ngắt kết nối luôn. Ad giúp em khắc phục được không ạ?
Thanks ad

kiểm tra xem đã gửi đúng độ dài của data ở lệnh AT+CIPSEND=X chưa nhé

Chào admin.
Em đang làm về đề tài tương tự như thế này, em đang có rắc rối là khi mô phư trên proteus thì chạy bình thường nhưng khi cắm breadboard thì web không thấy dữ liệu ạ.
Mong admin giúp em khắc phục.
Cảm ơn ạ.

mua thêm module pl2303 cắm chân RX vào để debug dữ liệu gửi nhận nha b

dùng 2 module pl2303 ( sử dụng chân RX thôi, kết nối vào chân TX, RX của vi điều khiển debug dữ liệu qua lại, hoặc bạn có thể mua logic của saleae để debug)

bạn giúp mình với, mình cũng bị lỗi khi truyền tới lệnh GET /kiemtra.php HTTP/1.1$0D$0AHost: ZZZZ.000webhostapp.com$0D$0A$0D$0A thì bị báo busy xong r nó cũng close. Cảm ơn

kiểm tra xem đã gửi đúng độ dài của data ở lệnh AT+CIPSEND=X chưa nhé
X ở đây là độ dài tính theo byte mà bạn sắp sửa gửi. mình chắc chắn bạn đã tính sai độ dài rồi nhé.

mình làm được rồi, cảm ơn nhá

a ơi cho e hỏi. nếu bật tắt nhiều led thì làm thế nào ạ

Anh ơi cho em hỏi, giả sử em muốn lấy dữ liệu từ web xuống vi điều khiển, ví dụ như :”09:03″, thì làm sao hã anh, em cảm ơn

Bạn cho mình hỏi làm sao để tính độ dài Byte

Bạn ơi cho mình hỏi cái độ dài Byte làm sao vậy ạ

cho mình hỏi lúc mình giao tiếp với esp dùng phần mềm hecules thì hecules nó cứ nhảy dấu chấm liên tục vậy cho mình hỏi là bị lỗi gì ạ?

a cho e hỏi sao em làm tới lên GET… thì nó báo SEND OK nhưng chỉ trả về CLOSE chứ k hiện bat hay tat ạ

TRUNG TÂM SỬA CHỮA ĐIỆN TỬ QUẢNG BÌNH
MR. XÔ - 0901.679.359 - 80 Võ Thị Sáu, Phường Quảng Thuận, tx Ba Đồn, tỉnh Quảng Bình
Sửa điện tử tại Quảng Bình

sao của e nó nhận lại là chuỗi html chứ ko phải chuỗi ký tự bat tat như trong demo của anh nhỉ

chuỗi html như nào thế bạn

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

84 − 79 =