[ENC28J60] Bài 21: LWIP – Giao thức TCP với raw api

stm32-lwip-enc28j60
stm32-lwip-enc28j60

Trong bài này, mình sẽ hướng dẫn các bạn sử dụng TCP client và TCP server thông qua các api của lwip

Có 3 cách cơ bản để sử dụng lwip

  • RAW / API gốc – một giao diện được sử dụng mà không cần hệ điều hành. Nó có một số nhược điểm, nhưng cũng có một số ưu điểm, chẳng hạn như cung cấp quyền tự do hành động, điều thường thiếu ở các api cao cấp hơn
  • Netconn API là API nối tiếp cấp cao yêu cầu hệ điều hành thời gian thực (RTOS). Netconn API cho phép hoạt động đa luồng.
  • BSD Socket API – Một API tương tự như Berkeley-Socket (được phát triển dựa trên API của Netconn)

Bây giờ chúng ta sẽ làm việc với giao diện RAW để gửi nhận tcp client nhé

Các bạn tạo 2 file tên là row_api_tcp_client.h row_api_tcp_client.c Có thể lưu nó trong Inc và Src. Sau đó add source file vào cây thư mục của project

Copy các hàm mình đã viết vào thư viện row_api_tcp_client

Code cho row_api_tcp_client.c

Trong file này có khai báo ipaddr_dest = 192.168.1.7 là IP của máy tính, mình sẽ cho máy tính của mình làm TCP server để test. Các bạn hay sửa thành IP máy tính của các bạn nhé. Có thể gõ lệnh ipconfig vào cmd của windonw để lấy ip máy tính

Code cho row_api_tcp_client.h

Trong file main.c mình sẽ khai báo 2 biến toàn cục

và thêm mã để in IP ra cổng uart và gửi data lên TCP Server sau mỗi 1s vào trong vòng lặp chính của main

Biên dịch và nạp chương trình, bây giờ hãy sử dụng phần mềm Hercules để tạo 1 TCP server, bạn cũng mở thêm 1 màn Serial ở in dữ liệu debug lên nhé

Như vậy TCP Server đã nhận được dữ liệu gửi lên từ STM32

Viết chương trình TCP Server

Tương tự, chúng ta tạo 2 file row_api_tcp_server.hrow_api_tcp_server.c

Source file

Header File

Add source vào cây project

Include thư viện row_api_tcp_server.h vào main.c

Add tcp_server_init(); vào dưới hàm tcp_client_connect(); trong vòng lặp chính

Biên dịch và nạp chương trình, bây giờ mở Hercules lên và vào tab TCP CLient trên máy tính, các bạn gửi gì thì Chip stm32 sẽ nhận được và gửi lên màn Serial

Các bạn hãy vận dụng kiến thức đã được học ở các bài trước để tự tìm hiểu sorce code được viết trong thư viện raw tcp để có thể chính sửa theo ý muốn nhé. Chúc các bạn thành công !

Tải toàn bộ sorce cho bài này tại đây

Đón xem toàn bộ khóa học ethernet tại đây

 

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

1 bình luận

  1. void tcp_server_sendstring(char* buf_str)
    {
    tcp_sent(ss->pcb, tcp_server_sent);
    tcp_write(ss->pcb, (void*)buf_str, strlen(buf_str), 1);
    tcp_recved(ss->pcb, strlen(buf_str));
    }

    Anh giải thích rõ hơn phần này được ko

Đã đóng bình luận.