[ENC28J60] Bài 22: LWIP – Giao thức UDP 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 UDP client và UDP 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 udp server nhé

Các bạn tạo 2 file tên là row_api_udp_server.h và row_api_udp_server.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_udp_server.c

Code cho row_api_udp_server.h

Trong file main.c add thêm thư viện udp server

Mình sẽ khởi chạy dịch vụ udp server ở port 1000 sau khi Ethernet khởi tạo thành công và có IP

Các bạn hãy để ý trong hàm udp_server_receive_callback trong file row_api_udp_server.c đây là nơi chúng ta sẽ nhận dữ liệu. Ở đây mình đã cho server echo mọi data nó nhận được bằng lệnh udp_send(upcb, p);

Nếu các bạn muốn nhận data và xử lí thì hãy xóa lệnh đó và lấy data thông qua con trỏ p->playload và độ dài data thông qua p->len

OK ! Bây giờ nạp chương trình và mở Hercules lên để test thử nhé. Mình sẽ vào tab UDP và kết nối tới server thông qua cổng 1000

UDP Client

Tiếp tục tạo 2 file tên là row_api_udp_client.h và row_api_udp_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_udp_client.c

Trong hàm connect, mình đang để mặc định sẽ kết nối tới udp server máy tính của mình, tức 192.168.1.7:1000, các bạn hãy thay thế nó thành ip máy tính của bạn hoặc custon lại phần này để truyền ip muốn connect vào nhé

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

Add thư viện vào file

Khởi chạy udp client và gửi data lên pc sau mỗi 1s

Các bạn có thể tải source cho bài này 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