[ENC28J60] Bài 17: Giao thức TCP Client – Gửi nhận dữ liệu

Tiếp tục chuỗi tutorial lập trình giao tiếp ENC28J60 với giao thức TCP, trong bài này chúng ta sẽ hoàn thành các hàm gửi nhận data trong giao thức TCP Client. Về cơ bản, cũng tương tự như với TCP server thôi.

Nhận dữ liệu từ server

Giải thích: Sau khi nhận được data từ server mình in ra màn hình, lưu lại các số hiệu gói tin và chả lời lại với ACK hoặc PSH|ACK cũng được

Server gửi dữ liệu sẽ dùng cờ PSH|ACK do vậy trong hàm TCP_read nhánh cờ TCP_PSH|TCP_ACK mình sẽ kiểm tra tcp_client status, nếu đã có kết nối với server thì gọi hàm TCP_readData

Bây giờ mở hercules mode TCP_server, mở thêm tab debug uart và gửi thử dữ liệu đi nào

Gửi dữ liệu lên server

Mình sẽ thêm nhánh maker header FOR_SEND cho hàm TCP_make_herder

Và viết hàm để sendData lên server
Hàm này sẽ nhận vào dữ liệu, độ dài của dữ liệu, và 1 timeout, sau khi gửi dữ liệu đi, server sẽ phản hồi lại cờ ACK, do vậy mình dùng vòng lặp vô tận while(1) để kiểm tra biến status đã nhận được cờ ACK chưa, nếu chưa và quá timout thì thoát và báo gửi lỗi ! Ngoài ra, khi hàm này được gọi mà chưa kết nối server thì mình cũng thoát luôn mà không cần gửi vì điều đó vô nghĩa

tcp_clien1.status = 3 // đang cần check cờ ack

Và giờ trong hàm TCP_read nhánh bắt cờ ACK, mình sẽ thêm đoạn code kiểm tra xem cờ ACK này có phải là ACK của gói tin ta vừa gửi đi không

Thực chất, để đảm bảo chắc chắn cái ACK này là phản hôig của gói tin mình vừa gửi đi, ta phải kiểm tra kĩ hơn số hiệu gói tin nữa

Mình sẽ viết thêm 1 vài hàm nhận data từ UART để tiện cho việc gửi dữ liệu đi. Tức là mình sẽ gõ tin nhắn cần gửi vào Tab UART hercules, truyền xuống cho chip để chip gửi lên server.
Các bạn bật ngắt UART lên

Và nhận từng byte data bằng ngắt UART, đừng quên gọi hàm cho phép nhận

Cuối cùng là trong hàm main, check data gửi tới để gọi hàm send lên server

Tải FULL soure cho bài này tại đây
https://drive.google.com/file/d/1yDZA2OIVuso6ORLCL9TyTu-s6T-ojWJp/view?usp=sharing

 

Từ tác giả:

Nếu có bất kì thắc mắc nào trong bài viết, vui lòng để lại comment dưới mỗi bài ! Mình sẽ không trả lời thắc mắc của các bạn ở facebook hay email !

Nếu trong phần code bạn nhìn thấy nhưng thứ kiểu như &amp; thì đó là lỗi hiển thị, cụ thể 3 kí tự < > & bị biến đổi thành như thế
&amp; là &
&lt;  là <
&gt; là >

Giới thiệu Đào Nguyện 80 bài viết
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT. Rất mong được giao lưu, kết bạn với các bạn cùng đam mê. Địa chỉ Facebook: https://www.facebook.com/nguyendao207