Site icon TAPIT

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

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. Tại bài viết này, mình tiếp tục hướng dẫn các bạn thiết kế chương trình hàm main, các hàm chức năng và thực hiện Demo: 

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

Về cơ bản chu trình sẽ như sau

Nguồn: XMind

1.1 Main

Mình sẽ khởi tạo LWIP và DNS qua hàm “dns_initialize()” và “lwip_init()”. Trong đó dns_initialize dành để phân giả tên miền ra thành địa chỉ IP, lwip_init() dùng để khởi tạo core của LWIP.

1.2  Các hàm ứng dụng

Sau khi khởi tạo xong module 4G chúng ta cần chuyển chế độ hoạt động của module từ “command mode” sang “data mode” bằng cách gọi hàm “open_ppp_stack”, lệnh cần quan tâm chính để đưa vào chế độ data mode là “ATD*99***1#\r\n” và chờ phản hồi “CONNECT” từ module SIM. Về cơ bản tập lệnh này giống như giữ các nhà sản xuất module SIM.

a. open_ppp_stack

b. ppp_link_status_cb

Dùng để nhận các trạng thái status, pha của PPP

Trong trường hợp kết nối thành công, status của PPP callback sẽ nhảy vào trạng thái “PPPERR_NONE”, đến bước này bạn đã kết nối thành công và sẵn sàng kết nối internet.

c. ppp_phase_callback

Nhận về pha của PPP và xử lí các trạng thái reconnect

2. Thử nghiệm và ứng dụng

2.1 Lấy IPv4 của thiết bị

2.2 Thử nghiệm đồng bộ thời gian từ internet

Khởi tạo dịch vụ đồng bộ thời gian, ở đây mình sẽ lấy internet từ NTP server “pool.ntp.org

Khai báo hàm callback đồng bộ thời gian trong file “lwipopts.h

3. Phần tiếp theo

Vậy là tại phần này, mình đã giới thiệu đến các bạn thiết kế chương trình hàm main, các hàm chức năng và thực hiện Demo: 

Các bạn cùng đón chờ các nội dung tiếp theo của chuỗi bài viết:

Phần 3: Kết nối MQTT trên nền tảng LWIP

Phần 4: Kết nối HTTP trên nền tảng LWIP

Phần 5: Tối ưu các tham số cho vi điều khiển – Optimize memory (ram, flash, speed)

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

Tài liệu tham khảo: https://github.com/huybk213/lwip_porting

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