Site icon TAPIT

Porting LWIP cho vi điều khiển STM32 (P3)

LWIP – Light weight IP là một bộ thư viện mã nguồn mở được thiết kế dành cho những hệ thống có tài nguyên tương đối hạn chế, phù hợp với các hệ thống nhúng. Hỗ trợ tương đối đầy đủ các giao thức mạng trên nền TCP/IP. Có thể hỗ trợ giao tiếp với vi điều khiển thông qua Serial hoặc Ethernet. TAPIT chia sẻ đến các bạn chuỗi bài viết hướng dẫn về lý thuyết thư viện, porting các function, kết nối MQTT, kết nối HTTP trên nền tảng LWIP và tối ưu chương trình trên vi điều khiển STM32.

Phần 1, mình đã giới thiệu đến các bạn bộ thư viện LWIP, hướng dẫn cách add thư viện, cách để port các file và port các function khi sử dụng LWIP. Xem tại đây.

Phần 2, mình đưa ra hướng dẫn thiết kế chương trình hàm main, các hàm chức năng và một số Demo. Xem tại đây.

Tại phần này, mình sẽ thử nghiệm thực hiện kết nối HTTP và MQTT trên nền tảng LWIP.

1. Kết nối HTTP

Mình sẽ thử nghiệm thực hiện 1 lệnh HTTP Get đến đường dẫn http://httpbin.org/get

1.1. Thiết kế chương trình

Ý tưởng của mình như sau:

1.2. Lưu đồ thuật toán

http_connection_t proxy_addr Địa chỉ của server, có kiểu số nguyên dương 32 bit
proxy_port HTTP port (80,443…)
use_proxy 1 hoặc 0
httpc_result_fn Hàm nhận dữ liệu trả về của http
httpc_headers_done_fn Hàm callback khi socket nhận đủ dữ liệu của header
http_state_t Chưa toàn bộ internal state-machine, timeout, bộ đệm… của HTTP

Vậy là các hàm callback xử lí dữ liệu đã xong, chúng ta khởi tạo tham số và tiến hành kết nối. Giả sử bạn cần kết nối đến “http://httpbin.org/get” thì các tham số truyền vào httpc_get_file_dns như sau:

1.3. Kết quả thử nghiệm

2. Kết nối MQTT

Design state machine – Thiết kế máy trạng thái

– Ý tưởng của mình như sau

– Các hàm callback của MQTT

– Hàm callback phân giải DNS (thành công hoặc thất bại), với kết quả nằm tại con trỏ “ipaddr”. Trong trường hợp con trỏ “ipaddr” khác null thì thiết bị đã phân giải DNS thành công.

– Hàm subcribe 1 topic, với các tham số chính truyền vào là topic name, QoS và callback

– Hàm publish data lên MQTT broker và callback

– Hàm nhận dữ liệu từ MQTT broker

3. Source code

Ở demo này, mình sử dụng 2 thiết bị là 1 kit STM32L083 và 1 kit STM32F4. Các bạn có thể tham khảo ở repository sau: https://github.com/huybk213/lwip_porting

Vậy là kết thúc chuỗi bài viết giới thiệu và hướng dẫn thực hành về LWIP. Tổng kết lại toàn bộ nội dung, mình đã giới thiệu đến các bạn:

Chúc các bạn thành công!

Cố vấn tại Cộng đồng Kỹ thuật TAPIT

Trần Văn Huy

Tìm hiểu thêm:
Tổng hợp hướng dẫn Internet of Things với NodeMCU ESP8266 và ESP32
Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32
[HỌC ONLINE: LẬP TRÌNH C CHO HỆ THỐNG NHÚNG VÀ CÁC THIẾT BỊ IOTS]
[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX–M]
Fanpage Cộng đồng Kỹ thuật TAPIT: TAPIT – Learning, Research and Sharing Community