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:
- Port thành công LWIP cho vi điều khiển qua giao tiếp PPP overserial
- Lấy được IPV4 của thiết bị
- Thực hiện 1 lệnh đồng bộ thời gian qua Internet
1. Thiết kế chương trình
Về cơ bản chu trình sẽ như sau
- Khởi tạo phần cứng
- Khởi tạo GSM, đăng kí cho module SIM register được vào nhà mạng Viettel
- Active kết nối

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.
- Vòng lặp quét các trạng thái GSM
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
- Khi khởi tạo PPP connection, cần lưu ý cấp phát PPP control block
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ị
- Kết quả thử nghiệm, thiết bị đã kết nối thành công vào internet và lấy được IPv4
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”
- Xử lí callback data của dịch vụ SNTP
- Kết quả:
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:
- Port LWIP cho vi điều khiển qua giao tiếp PPP overserial
- Lấy IPV4 của thiết bị
- Thực hiện lệnh đồng bộ thời gian qua Internet
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