Trong phần này mình sẽ đi sâu hơn vào giao tiếp với module WiFi ESP8266 bằng tập lệnh AT. Khi mua module này thì nhà sản xuất đã nạp sẵn firmwave AT command với tốc độ baud là 115200. Tuy nhiên trong 1 số trường hợp module của bạn bị mất firmwave này, chúng ta sẽ phải nạp lại cho nó.
Nạp firmwave AT command cho ESP8266
Trước tiên các bạn chuẩn bị 1 số công cụ, phần mềm
- Mạch chuyển đổi USB-UART PL2303
- Laptop/PC đã cài Driver cho PL2303
- Phần mềm nạp firmwave cho ESP8266
Lưu ý: Chân GPIO0 của esp8266 phải được kết nối với GND trước khi esp8266 được cấp nguồn để esp vào chệ độ flash
Tiến hành mở phần mềm nạp tên là NODEMCU FIRMWAVE PROGRAMER
Chọn cổng COM tương ứng với module chuyển đổi USB-UART ( thường thì phần mềm tự động lấy cổng, nhưng các bạn cũng nên kiểm tra lại trong My Coputer(chuột phải) -> Manage -> Device Manage -> Port (COM & LPT)
Chọn Config -> Ấn vào icon răng cưa để mở hộp thoại chọn file Firmwave
Chọn bất kì 1 trong 2 file firmwave rồi ấn OK (chữ 9600 – 115200 chính là baudrate mà các bạn sẽ chọn để giao tiếp sau này). Nên dùng bản 115200 vì tốc độ sẽ nhanh hơn
Tiếp tục sang tab Advanced và chọn như trên
Quay về tab Operation và ấn Start để bắt đầu nạp firmwave. Trong quá trình nạp các bạn có thể chuyển sang tab Log để xem thông báo nhé
Giao tiếp với module ESP8266 bằng các lệnh AT
Nhóm lệnh cấu hình hệ thống
Chúng ta sẽ chỉ cần quan tâm các lệnh cơ bản sau: ( Chú ý <CR><LF> chính là 2 byte 0x0D 0x0A mà các bạn cần phải nhét vài sau mỗi lệnh AT để ESP8266 hiểu là kết thúc lệnh ( sau đó nó mới phản hồi)
AT<CR><LF>
Phản hồi: OK (lệnh này để test)
ATE0<CR><LF>
Phản hồi: OK (lệnh này để tắt chế độ phản hồi , tức là bạn gửi gì thì nó trả về y hệt sau đó mới phản hồi, các bạn nên dùng lệnh này nhé)
AT+RST<CR><LF>
Phản hồi: OK (reset lại module)
AT&W<CR><LF>
Phản hồi: OK (Lưu cài đặt)
Nhóm lệnh giao tiếp
Trước khi đi vào các lệnh dưới thì mình sẽ giải thích qua 1 chút. ESP8266 có các chế độ hoạt động sau: AP, Station, AP+Station
Station : ESP sẽ đóng vai trò như 1 thiết bị mạng ( giống như điện thoại của bạn). Nó phải truy cập vài WIFI nhà bạn. Các bạn có thể cho nó ping tới 1 trang web, hay truy cập vào 1 trang web như google chẳng hạn để tải toàn bộ mã HTML của nó về. Với chế độ này, các bạn có thể thuê 1 server (trang web) ở nhà cung cấp dịch vụ hay ở trang web cung cấp web free, sau đó cho ESP8266 truy cập vào để tải mã html có chứa trạng thái ON OFF của đèn led. Với cách này chúng ta có thể nhanh chóng tạo 1 ứng dụng điều khiển led đơn giản.
AP (Asset Point – Điểm truy cập) ESP có thể tự tạo ra 1 webserver (1 trang web) cho riêng nó để các thiết bị như điện thoại – laptop – hay 1 esp khác truy cập vào.
Nếu bạn dùng chế độ này khi ESP8266 phát WIFI, thì chỉ có thiết bị nào kết nối tới WIFI của esp mới truy cập vào được.
Nhưng nếu dùng chế độ này khi ESP sử dụng wifi nhà (WIFI do modem mạng phát ra) thì nó sẽ tạo ra 1 mạng có địa chỉ IP dạng 192.169.1.xxx (trong đó xxx là địa chỉ IP do modem cấp cho esp8266). Tạm thời nó cũng mới chỉ hoạt động cục bộ trong mạng LAN được thôi. Nhưng chúng ta có thể NAT PORT để đưa server do esp tạo ra ra ngoài mạng internet. Lúc này các bạn có thể truy cập vào esp8266 ở bất kì đâu.
Ngoài ra ESP8266 còn có thể hoạt động cùng lúc cả 2 mode Station và Asset Point
AT+CWJAP=”IOT47″,”12345678″<CR><LF>
Phản hồi: WIFI CONNECTED
WIFI GOT IP
OK
(lệnh kết nồi vào wifi IOT47 – mật khẩu 12345678. Các bạn tùy chỉnh 2 thông số này nhé)
Chế độ Station/Client
AT+CWMODE=1<CR><LF>
Phản hồi: OK (lệnh yêu cầu module hoạt động ở chế độ Station/Client)
Bây giờ thử cho ESP8266 upload dữ liệu nhiệt độ lên Server Thingspeak nhé !
AT+CIPMUX=0<CR><LF>
Phản hồi: OK ( chế độ đơn kênh – nếu dùng mode Station thì cứ kích hoạt mode này cho đơn giản nhé)
AT+CIPSTART=”TCP”,”thingspeak.com”,80<CR><LF>
Phản hồi: CONNECT OK (khởi tạo giao thức TCP IP đến trang web thingspeak.com, cổng mặc định là 80)
AT+CIPSEND=X<CR><LF>
Phản hồi: > (Chuẩn bị gửi dữ liệu đi, trong đó X chính là độ dài tính theo byte của đoạn dữ liệu sắp gửi)
GET /update?api_key=0JH8D4CLZMDXZ6MM&field1=55 HTTP/1.1<CR><LF> Host: api.thingspeak.com<CR><LF>Connection: keep-alive<CR><LF><CR><LF>
Đây chính là dữ liệu mà ESP gửi lên cho thingspeak. Các bạn có thể thấy khóa API Key, và số 55 chính là dữ liệu nhiệt độ mà mình gửi lên. Đây gọi là truy vấn http (bản tin http hay Request HTTP) các bạn có thể tự tìm hiểu cấu trúc của nó trên mạng hoặc mình sẽ nói trong các bài sắp tới. ( Hãy chắc chắn tính đúng độ dài của truy vấn để gửi đi trong lệnh CIPSEND nhé)
Phản hồi: SEND OK và chuỗi Reponse HTTP ( các bạn có thể tham khảo chuỗi Reponse ở dưới ảnh)
Các bạn có thể truy cập https://thingspeak.com/ đăng kí tài khoản và lấy khóa API thay thể vào chuỗi truy vấn trên của mình để test thử nhé. Nếu test trên Hecurles thì thay <CR><LF> bằng $0D$0A nhé !
Cuối cùng là đóng kết nối, kết thúc 1 lần giao tiếp
AT+CIPCLOSE<CR><LF>
Chế độ Asset Point – Điểm truy cập
Bây giờ thử cho ESP8266 phát WiFi để điện thoại kết nối đến và cho ESP8266 tự tạo ra server web nhé !
AT+CWSAP=”IOT47″,”12345678″,5,3<CR><LF>
Phản hồi: OK ( yêu cầu esp8266 phát WiFi tên là IOT47 và Pass là 12345678)
AT+CWMODE=2<CR><LF>
Phản hồi: OK (ESP8266 hoạt động ở chế độ AP)
AT+CIPSERVER=1<CR><LF>
Phản hồi: SERVER START ( khởi động server, lúc này ta có 1 server hoạt động ở địa chỉ 192.168.4.1, bất kì thiết bị nào cùng mạng LAN đều có thể truy cập)
Lúc này, bạn có thể mở trình duyệt trên laptop hoặc điện thoại, gõ 192.168.4.1 (Enter). Trình duyệt sẽ gửi tới cho esp8266 1 truy vấn. Nó có dạng như này
Hmm… Nhìn cái đống này khó chịu nhỉ. Thôi cứ tạm kệ nó đi nhé! Giờ hãy gõ lại vào chrome với địa chỉ như sau: 192.168.4.1/LEDON
Hãy nhìn vào phần mình khoanh đỏ. Từ khóa LEDON đã được gửi tới ESP8266. Bây giờ các bạn có thể bắt từ khóa này để bật led. Tương tự với việc tắt LED đi.
Quay lại trình duyệt web, nếu tính ý các bạn sẽ thấy trình duyệt vẫn đang loadding, bởi vì nó đang đợi server trả lời. Lúc này hãy trả lời lại cho trình duyệt bằng lệnh AT+CIPSEND
AT+CIPSEND=X<CR><LF> (trong đó X là độ dài chuỗi mà bạn sẽ trả lời)
Ví dụ: AT+CIPSEND=10<CR><LF>
Phản hồi: >
Bây giờ gửi nội dung cần gửi:
Da tat led
Phản hồi: SEND OK
Sau đó có thể đóng kết nối: AT+CIPCLOSE<CR><LF>
Trình duyệt lúc này sẽ ngường loadding và trên màn hình hiện:
@@ Tks bác nhiều. e đg tìm tài liệu học mà đọc được cái này. Bác chỉ tận tình, chi tiết quá
Hello to every , because I am actually eager of reading this weblog’s
Rất hay ạ. Cảm ơn anh