Ví dụ tham chiếu máy chủ web nhúng IoT


Đỗ Phương Quang
8 tháng trước
Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 4980

Gần đây chúng tôi đã cam kết Máy chủ HTTP và WebSocket nhúng của chúng tôi cho GitHub . Máy chủ HTTP và WebSocket nhúng, được gọi là Máy chủ Minnow, được thiết kế riêng cho các bộ vi điều khiển nhỏ với nguồn lực hạn chế.

Đây là phần thú vị

Chúng tôi cũng bao gồm một ví dụ tham khảo cho thấy cách xây dựng giao diện người dùng web thời gian thực hiện đại để quản lý thiết bị. Ứng dụng web này được gọi là Ứng dụng một trang (SPA). SPA ban đầu được tải vào trình duyệt bằng cách sử dụng một yêu cầu HTTP GET. Từ thời điểm này, giao thức WebSocket được sử dụng riêng cho tất cả các tương tác. Các thông điệp được trao đổi dưới dạng JSON và thông điệp nhị phân. 

Ví dụ tham chiếu bao gồm các bản cập nhật thời gian thực của đèn LED và thước đo nhiệt và nó cho thấy cách thực hiện tải lên chương trình cơ sở qua WebSockets. Nhưng đó không phải là tất cả. Ví dụ cũng có thể được kích hoạt IoT; chúng ta sẽ tìm hiểu thêm về cách thức hoạt động sau này ...

Vậy thỏa thuận lớn nào?

Trong bài viết trước của tôi, Xem xét lại Quản lý thiết bị dựa trên web , tôi đã giải thích cách người ta có thể sử dụng một khung như  Vue.jsWebSockets làm cơ sở để tạo một ứng dụng quản lý thiết bị phản ứng hiện đại. Tuy nhiên, một vi điều khiển bị hạn chế tài nguyên đơn giản là không có không gian để lưu trữ một ứng dụng web dựa trên một khung như Vue.js. Bộ nhớ flash cho vi điều khiển thông thường, chẳng hạn như ARM Cortex M3, cung cấp không đủ dung lượng cho ứng dụng web hiện đại điển hình.

Bây giờ chúng tôi đã thiết kế một ví dụ tham chiếu SPA có thể tái sử dụng thân thiện với vi điều khiển đòi hỏi rất ít không gian lưu trữ trong thiết bị. Toàn bộ SPA, bao gồm tất cả các tài nguyên như hình ảnh, CSS và JavaScript, khi được nén bằng dịch vụ bộ trộn HTML trực tuyến của chúng tôi , chỉ cần 41 Kbyte dung lượng bộ nhớ flash !!!

Được thiết kế để giúp bạn đứng dậy và chạy nhanh ...

Ví dụ tham chiếu, được thiết kế cho mục đích giáo dục, bao gồm các môi trường xây dựng sẵn sàng sử dụng cho Windows và Linux. Trên Linux, bạn có thể xây dựng một máy chủ web sẵn sàng để sử dụng như sau:

make packwww minnow


Lệnh trên tạo ra sự hợp nhất và nén tất cả các tài nguyên HTML trước khi biên dịch tất cả mã. Các tài nguyên HTML được nhúng bên trong tệp thực thi, do đó, sau khi bắt đầu thực thi, chỉ cần điều hướng đến http: // localhost.

Bây giờ, đây là quan trọng

Ứng dụng Trang đơn (SPA) đã được thiết kế để có thể dễ dàng sử dụng lại cho ứng dụng quản lý thiết bị nhúng của riêng bạn. Các khối xây dựng CSS và HTML5 trong ứng dụng này đã được thiết kế để sử dụng lại. Ngoài ra, thư viện JavaScript giao tiếp WebSocket trong ví dụ này là chung chung và có thể dễ dàng được sử dụng lại trong các ứng dụng khác.

Ví dụ tham khảo SPA tái sử dụng

Ví dụ tham chiếu Ứng dụng Trang đơn bao gồm một số trang web, nhưng không giống như một ứng dụng web truyền thống, không có trang nào được tải khi nhấp vào một liên kết trong menu điều hướng. Thay vào đó, tất cả các trang nằm trong một tệp HTML và JavaScript được sử dụng để ẩn và hiển thị các thành phần DIV (các trang) khi điều hướng menu.

Chúng tôi cũng có một số hộp thoại phương thức. Hộp thoại phương thức đầu tiên được hiển thị ngay sau khi SPA được tải vào trình duyệt.

Hình 1: Hộp thoại đăng nhập phương thức

Một thiết bị không đầu (một thiết bị không có màn hình gốc) yêu cầu thông tin đăng nhập mặc định. Thông tin đăng nhập mặc định được mã hóa cứng là "root" và "password". Đề xuất là thiết lập môi trường sản xuất thiết bị có thể cung cấp thông tin đăng nhập mặc định duy nhất cho từng thiết bị được sản xuất và cũng buộc người dùng phải đặt thông tin đăng nhập mới ở lần đăng nhập đầu tiên.

Một tính năng thú vị:

Từ Hình 1, bạn có thể thấy rằng chúng tôi sử dụng giao tiếp không được mã hóa. Máy chủ Minnow có thể được sử dụng có hoặc không có TLS. Một tính năng thú vị mà chúng tôi đã thêm là đăng nhập an toàn ngay cả khi được sử dụng mà không cần TLS. Mật khẩu được băm với giá trị hạt giống được cung cấp bởi máy chủ, cái gọi là nonce, trước khi gửi đến máy chủ. Chi tiết về xác thực dựa trên hàm băm an toàn có thể được tìm thấy trong Đặc tả nền tảng tham chiếu máy chủ Minnow .

Trang sau được trình bày sau khi đăng nhập:

Hình 2: Máy tính hỗ trợ AJAX

Bạn có thể tự hỏi tại sao chúng ta có một máy tính trong một thiết kế tham chiếu quản lý thiết bị. Trước đây chúng tôi đã xuất bản một bài viết về cách chạy AJAX qua WebSockets và ví dụ được cung cấp dịch vụ AJAX toán học. Tuy nhiên, các dịch vụ phụ trợ toán học AJAX không được thiết kế cho mã Minnow Server và C. Chúng tôi muốn bao gồm các dịch vụ toán học AJAX trong thiết kế này vì ...

WebSockets so với AJAX

WebSockets có thể xử lý nhiều tin nhắn hai chiều giữa trình duyệt và máy chủ. Không có mối tương quan giữa các tin nhắn được gửi theo một trong hai hướng. Tùy thuộc vào ứng dụng để giải thích và quản lý các tin nhắn này. Tuy nhiên, rất hữu ích khi sử dụng mẫu thiết kế yêu cầu / phản hồi trong các ứng dụng web, trong đó một cuộc gọi lại JavaScript được gọi khi phản hồi được trả về từ máy chủ. Nhiều nhà phát triển web đã quen với AJAX và máy tính chỉ ra cách sử dụng AJAX trong JavaScript và trong mã C. Các hoạt động toán học được thực hiện ở phía máy chủ và mỗi yêu cầu hoạt động toán học được gửi đến máy chủ được theo sau bởi một phản ứng toán học được gửi đến trình duyệt. Kết quả được hiển thị trong máy tính khi phản hồi trả về. AJAX cũng bao gồm khái niệm thành công / lỗi (thử / bắt). Hãy thử chia một số cho số 0 và xem điều gì sẽ xảy ra.

Vì vậy, bây giờ, bạn thấy lý do tại sao chúng tôi muốn bao gồm AJAX. Chúng tôi khuyên bạn nên đọc bài viết trước AJAX qua WebSockets , để bạn có được bức tranh đầy đủ về cách AJAX qua giao thức WebSocket hoạt động. Lưu ý rằng AJAX bao gồm thư viện JavaScript WebSockets cung cấp API Promise .

Hình 3: Trang quản lý thiết bị LED

Hầu hết các thiết bị bao gồm đèn LED; do đó, logic LED máy chủ có thể dễ dàng được chuyển đến hầu hết các thiết bị. Nhấp vào nút LED sẽ gửi một sự kiện thời gian thực tới máy chủ, nơi đặt đèn LED. Sau đó, máy chủ sẽ gửi một thông báo LED cập nhật tới trình duyệt.

Đó là tất cả thời gian thực và không đồng bộ ...

Trong Hình 3, chúng tôi chạy máy chủ trong cửa sổ giao diện điều khiển Windows. Trạng thái LED được in ra bàn điều khiển. Bạn cũng có thể đặt trạng thái LED trong bảng điều khiển (ở phía máy chủ) bằng cách sử dụng các chữ cái bàn phím B đến E. Sau đó, máy chủ sẽ gửi thông báo cập nhật theo thời gian thực tới trình duyệt.

Hình 4: Thiết bị chuyển sang dữ liệu thời gian thực của trình duyệt

Mặc dù trang LED hiển thị cách gửi dữ liệu thời gian thực từ máy chủ đến trình duyệt, bộ điều chỉnh nhiệt được đưa vào như một ví dụ sự kiện thời gian thực bổ sung. Các phím mũi tên lên và xuống bàn phím điều khiển nhiệt độ.

Tiện ích HTML5 / canvas thời gian thực, nhưng chỉ có một vấn đề

Chúng tôi sử dụng một thư viện widget đo có sẵn miễn phí cho bố trí nhiệt kế. Bạn có thể gửi dữ liệu thời gian thực từ máy chủ đến trình duyệt bằng cách nhấn phím mũi tên lên hoặc xuống. Các sự kiện bàn phím được gửi trong thời gian thực tới trình duyệt, do đó, cập nhật tiện ích nhiệt kế. Tuy nhiên, điều trớ trêu là tiện ích nhiệt kế không thể xử lý một lượng lớn dữ liệu đến. Bài học rút ra từ điều này là không phải tất cả các thư viện widget miễn phí đều có thể xử lý lượng lớn dữ liệu.

Hình 5: Kéo và thả firmware tải lên

Trang tải lên chương trình cơ sở cho thấy cách tạo trang tải lên và kéo xuống HTML 5 và cách gửi tệp đã tải lên đến máy chủ thông qua kết nối WebSocket.

Nhị phân hoặc JSON ...

Tất cả các tin nhắn được gửi qua kết nối WebSocket được gửi dưới dạng tin nhắn văn bản JSON ngoại trừ việc tải lên, được gửi dưới dạng dữ liệu nhị phân. JavaScript hiện đại có thể dễ dàng quản lý dữ liệu nhị phân và giao thức WebSocket hỗ trợ cả khung nhị phân và khung văn bản.

Hình 6: Đặt thông tin đăng nhập mới

Trang thông tin đăng nhập cho phép người dùng cập nhật thông tin đăng nhập của mình. Không giống như trang đăng nhập an toàn, việc đặt thông tin đăng nhập mới không an toàn trừ khi sử dụng TLS. Đơn giản là không thể bảo vệ thông tin đăng nhập khỏi bị nghe trộm mà không sử dụng TLS. Điều tốt là Máy chủ Minnow có thể được kích hoạt TLS.

IoT Kích hoạt ví dụ tham chiếu SPA

Các thiết bị có máy chủ web nhúng thường được cài đặt và vận hành trên các mạng riêng phía sau tường lửa của công ty và / hoặc bộ định tuyến. Các thiết bị được triển khai đằng sau các mạng riêng được tự động bảo vệ khỏi việc sử dụng và lạm dụng bên ngoài. Tuy nhiên, việc triển khai như vậy cũng ngăn chặn việc sử dụng từ xa hợp pháp.

Truy cập bên ngoài dễ dàng và an toàn:

Đôi khi, các thiết bị nhúng cần được vận hành từ một địa điểm từ xa thông qua Internet và cách an toàn nhất để thực hiện việc này là bật IoT cho thiết bị và cho thiết bị kết nối với máy chủ trên Internet. Hình dưới đây mô tả một thiết lập như vậy.

Hình 7: Truy cập thiết bị nhúng cục bộ hoặc qua Internet

Ví dụ tham chiếu Máy chủ Minnow bao gồm một thành phần IoT tùy chọn có thể được bật tại thời điểm biên dịch. Lưu ý rằng thành phần này bị tắt theo mặc định.

Nhà môi giới tin nhắn trực tuyến:

Một máy chủ trực tuyến hoạt động như một proxy giữa người dùng và thiết bị từ xa. Khi thiết bị đang chạy ở chế độ IoT, thiết bị sẽ hoạt động như một máy khách mạng. Như bạn có thể đã biết, các máy khách mạng thường không cần bất kỳ cấu hình mạng nào để kết nối với các dịch vụ trên Internet.

Giải pháp môi giới DIY trực tuyến dễ dàng:

Máy chủ trực tuyến chưa sẵn sàng để sử dụng dịch vụ và thay vào đó được thiết lập như một máy chủ IoT riêng. Nền tảng tham chiếu Máy chủ Minnow cũng bao gồm mã máy chủ IoT cần thiết và hướng dẫn để thiết lập máy chủ trực tuyến riêng. Lợi ích với máy chủ IoT thuộc sở hữu tư nhân là bạn không phụ thuộc vào bất kỳ nhà cung cấp dịch vụ IoT cụ thể nào. Bạn sẽ ngạc nhiên khi thấy việc vận hành một máy chủ IoT riêng tư dễ dàng và hợp lý như thế nào.

Máy chủ web nhúng hỗ trợ TLS

Trong tất cả các ví dụ trên, chúng tôi đã chạy Minnow Server ở chế độ không bảo mật. Điều đó có nghĩa là một kẻ nghe trộm có thể rình mò tất cả lưu lượng trao đổi giữa trình duyệt và máy chủ. Để ngăn chặn việc nghe lén và bảo mật "Đặt trang thông tin đăng nhập mới" (Hình 6), phải sử dụng TLS.

Ổ cắm web an toàn (CÓ), HTTPS (NO)

Máy chủ Minnow có thể được bật TLS và đây là nơi máy chủ WebSocket tỏa sáng so với sử dụng máy chủ web tiêu chuẩn. Bạn có thể đã sử dụng máy chủ web nhúng trong thiết bị hỗ trợ vi điều khiển của mình, nhưng TLS cho phép máy chủ web chuẩn cho thiết bị bị hạn chế tài nguyên thường kết thúc trong thảm họa. Để hiểu lý do tại sao TLS tạo ra một vấn đề như vậy đối với công nghệ máy chủ web tiêu chuẩn, hãy xem hướng dẫn của chúng tôi Khi không nhúng máy chủ web vào thiết bị .

ESP8266, FreeRTOS và lwIP

Máy chủ Minnow và nền tảng tham chiếu có thể được biên dịch cho bất kỳ vi điều khiển nào. Máy chủ Minnow bao gồm các lớp chuyển cho nhiều ngăn xếp RTOS và TCP / IP.

Mã ví dụ GitHub bao gồm môi trường xây dựng ESP8266 sẵn sàng để chạy. Chip WiFi ESP8266 giá rẻ rất phù hợp cho mục đích học tập. Video sau đây cho thấy cách sử dụng IDE dựa trên web đã sẵn sàng để biên dịch và tải chương trình cơ sở lên ESP8266. Video cũng cho thấy cách thiết lập cầu IoT.


Hạn chế

Máy chủ Minnow được thiết kế chủ yếu cho các hệ thống bị hạn chế tài nguyên nhỏ. Mặc dù Máy chủ Minnow có thể được thiết lập để quản lý một số kết nối, ví dụ tham chiếu được thiết kế để bảo tồn bộ nhớ RAM và được thiết lập để quản lý một kết nối tại một thời điểm. Cố gắng kết nối một cửa sổ trình duyệt mới trong khi một cửa sổ trình duyệt khác đang sử dụng một và chỉ kết nối WebSocket sẽ không hoạt động. Nếu bạn là nhà phát triển nhúng không bị giới hạn bởi giải pháp vi điều khiển bị hạn chế tài nguyên, hãy xem xét sử dụng máy chủ web nhúng mạnh hơn như Máy chủ ứng dụng Barracuda , cũng bao gồm WebSockets.

Hữu ích 4 Chia sẻ Viết bình luận 0
Đã xem 4980