Mục lục:

Trung tâm tự động hóa tại nhà Raspberry Pi-Arduino-SignalR: 11 bước (có hình ảnh)
Trung tâm tự động hóa tại nhà Raspberry Pi-Arduino-SignalR: 11 bước (có hình ảnh)

Video: Trung tâm tự động hóa tại nhà Raspberry Pi-Arduino-SignalR: 11 bước (có hình ảnh)

Video: Trung tâm tự động hóa tại nhà Raspberry Pi-Arduino-SignalR: 11 bước (có hình ảnh)
Video: Getting Started with IoT on the Raspberry Pi 2024, Tháng mười một
Anonim
Trung tâm tự động hóa tại nhà Raspberry Pi-Arduino-SignalR
Trung tâm tự động hóa tại nhà Raspberry Pi-Arduino-SignalR

Sau một vài IBLE mở đầu của tôi được xuất bản ở đây và ở đây, dự án này thực hiện bước đầu tiên hướng tới việc xây dựng phiên bản cơ bản của Trung tâm tự động hóa gia đình chức năng.

Tôi đã sử dụng một số công nghệ khác nhau với nỗ lực tìm hiểu cách tôi có thể sử dụng tất cả những điều tôi đã học được trong quá khứ và những điều mới mà tôi tiếp tục học được theo ngày tháng.

Do đó, Trung tâm tự động hóa này bao gồm các thành phần sau:

Cơ sở dữ liệu SQL Server 2012:

  • lưu trữ danh sách các mã Hồng ngoại (IR) được xác định trước trong một bảng cùng với một "khóa mã" duy nhất
  • các khóa mã được đặt tên trực quan (bởi người dùng) để xác định mục đích của các mã IR liên kết của chúng

Ứng dụng Web ASP. NET SignalR Hub thời gian thực:

  • chờ và nhận "khóa mã" dưới dạng lệnh từ người dùng đối mặt với ứng dụng khách HTML
  • khi nhận được, kết nối với cơ sở dữ liệu SQL và truy xuất Mã IR bằng khóa mã được cung cấp
  • chuyển tiếp mã IR đã truy xuất tới máy khách Python SignalR

Người dùng đối mặt với ứng dụng khách Bảng điều khiển HTML SignalR rằng:

  • giao tiếp khóa mã duy nhất với Trung tâm thông qua API ứng dụng khách jQuery SignalR
  • mỗi nút trên Trang tổng quan sẽ đại diện cho một khóa mã duy nhất được ghi trong bảng cơ sở dữ liệu SQL

Một ứng dụng dịch vụ nền Python SignalR chạy trên Raspberry Pi 2.0:

  • nhận mã IR dưới dạng lệnh từ Trung tâm
  • tìm kiếm các dấu phân cách trong Mã IR và chia đoạn mã rất dài thành các đoạn
  • giao tiếp qua cổng nối tiếp với Arduino và ghi ra từng phân đoạn liên tiếp

Một bộ phát IR Arduino Phác thảo rằng:

  • chờ và nhận từng đoạn mã IR qua cổng Nối tiếp
  • tập hợp các đoạn mã thành một mảng bộ đệm Mã IR
  • gói bộ đệm thành một lệnh Truyền IR bằng thư viện IRLib Arduino

Nếu thiết bị mục tiêu ở gần Bộ phát hồng ngoại, thì thiết bị (có thể) phản ứng với tín hiệu hồng ngoại do Arduino truyền

GHI CHÚ

Mặc dù, thiết bị mục tiêu mà tôi sử dụng trong phần trình diễn này không phản ứng với tín hiệu IR, bạn có thể muốn đọc phần này của IBLE khác của tôi để biết lý do tại sao tôi nói rằng thiết bị (có thể) phản ứng với tín hiệu IR.

Thời gian để cuộn.

Bước 1: Những gì bạn cần, trước khi những gì bạn cần

Những gì bạn cần, trước khi những gì bạn cần
Những gì bạn cần, trước khi những gì bạn cần
Những gì bạn cần, trước khi những gì bạn cần
Những gì bạn cần, trước khi những gì bạn cần
Những gì bạn cần, trước khi những gì bạn cần
Những gì bạn cần, trước khi những gì bạn cần

Hướng dẫn này bắt đầu với một số công việc đã thực hiện trước đó cũng dẫn đến IBLE cuối cùng của tôi.

Vì vậy, trước khi chúng ta bước vào những gì chúng ta cần cho IBLE này, bạn nên đọc hướng dẫn này để biết một số thông tin cơ bản về cách:

  1. Thư viện hồng ngoại Arduino IRLib đã được thiết lập
  2. Cách mã IR được sử dụng trong IBLE này được ghi lại bằng Bộ thu IR
  3. Cách sử dụng các mã IR thu được để điều khiển thiết bị mục tiêu thông qua Bộ phát IR

Sau khi hoàn thành IBLE này, tôi đã triển khai ứng dụng web ASP. NET IR Code Recorder sẽ:

  • Chấp nhận Mã IR đã thu thập cùng với khóa mã được đặt tên trực quan làm đầu vào thông qua biểu mẫu web
  • Ngắt mã IR rất dài thành các đoạn dài dưới 64 ký tự để ở dưới giới hạn bộ đệm nối tiếp của Arduino Uno
  • Đoạn mã cuối cùng sẽ được sửa trước bằng chữ "E" cho biết với Arduino rằng nó đã nhận được đoạn mã cuối cùng
  • Mỗi đoạn sẽ được phân tách bằng dấu phân cách ống trước khi được tập hợp lại thành một chuỗi dài
  • Cuối cùng, Mã IR được phân đoạn cùng với khóa mã của nó đã được lưu trữ vào cơ sở dữ liệu SQL Server 2012

Cơ sở dữ liệu SQL này tạo thành một trong những thành phần của Home Automation Hub được trình bày kỹ lưỡng trong IBLE này.

GHI CHÚ

Ứng dụng Web IR Code Recorder không tham gia thảo luận tại đây vì những lý do sau:

  • Bạn có thể nắm bắt các mã theo cách thủ công bằng cách sử dụng Arduino Sketch, chia chúng thành các phần được phân tách bằng dấu sổ và lưu trữ chúng trong cơ sở dữ liệu mà không cần phải xây dựng một Ứng dụng web phức tạp
  • Không giống như IBLE này, IR Recorder tập trung vào giao tiếp ngược từ Arduino đến Raspberry Pi

Do đó, chi tiết về dự án này sẽ là một chủ đề cho IBLE khác

Bước 2: Những gì bạn cần - Phần cứng

Những gì bạn cần - Phần cứng
Những gì bạn cần - Phần cứng
Những gì bạn cần - Phần cứng
Những gì bạn cần - Phần cứng

Raspberry Pi 2.0 đang hoạt động - Tôi khuyên bạn nên cài đặt Ubuntu Mate vì nó có một bộ tính năng phong phú hơn bao gồm OpenLibre Office, nhân tiện không thể thiếu trong tài liệu hướng dẫn này, ngay tại đó trên Raspberry Pi.

Ngoài ra, Pi, bạn sẽ cần các yếu tố bên ngoài sau:

  • Nền tảng tạo mẫu Arduino Uno hoặc một bản sao
  • Đèn LED phát hồng ngoại - Tôi đã sử dụng thương hiệu có tên Three Legs từ Amazon.com
  • Điện trở 330 hoặc 220 Ohm - Tôi đã sử dụng 220 (mã màu Đỏ-Đỏ-Nâu) vì tôi có một số tiện dụng
  • Bảng mạch bánh mì, đầu nối và PC thông thường có cài đặt Môi trường Arduino
  • Một ứng cử viên thử nghiệm - chẳng hạn như Màn hình LED Samsung phổ biến có điều khiển từ xa

Bước 3: Những gì bạn cần - Phần mềm

Để kết hợp tất cả các phần lại với nhau, bạn sẽ phải cài đặt và chạy thiết lập phần mềm sau:

Trên Raspberry Pi, bạn sẽ cần cài đặt những thứ sau:

  • Arduino IDE - được sử dụng để xây dựng Sketch và flash nó vào UNO
  • Mô-đun Python cho Arduino - để giao tiếp nối tiếp giữa UNO và Pi
  • Thư viện máy khách Python SignalR - Bạn có thể tham khảo hướng dẫn đính kèm tại đây

Máy Windows được cài đặt môi trường phát triển sau:

  • Phiên bản miễn phí của Microsoft Visual Studio Express 2013 để xây dựng Trung tâm SignalR và ứng dụng khách Web
  • Phiên bản miễn phí của SQL Server 2012 Express để thiết kế và xây dựng cơ sở dữ liệu back-end

Môi trường lưu trữ Máy chủ Thông tin Internet Windows (IIS):

  • Sau khi Trung tâm SignalR và máy khách Web được xây dựng và thử nghiệm, nó sẽ cần được triển khai tới Máy chủ IIS cục bộ
  • Trong trường hợp của tôi, tôi định sử dụng một máy tính xách tay cũ chạy Windows 7 với IIS trên mạng gia đình của mình

GHI CHÚ

Tất cả các hướng dẫn đều có thể áp dụng cho phiên bản Python 2.7.x. Phiên bản 3.0 có thể yêu cầu viết lại

Bước 4: Cơ sở dữ liệu SQL Server

Cơ sở dữ liệu SQL Server
Cơ sở dữ liệu SQL Server

Sơ đồ đính kèm cho thấy cấu trúc của cơ sở dữ liệu SQL Server cơ bản được sử dụng trong ứng dụng này và chỉ chứa hai bảng.

Bảng AutoHubCode

Hai cột quan trọng trong bảng này là:

AutoCodeKey - lưu trữ tên thân thiện với người dùng của khóa Mã

Mỗi khóa mã được truyền bởi một ứng dụng khách tự động - trong trường hợp của chúng tôi, một nút HTML từ một trang Web

AutoCodeVal - lưu trữ chuỗi Mã IR thô

Đây là mã IR thực được Trung tâm SignalR truyền lại cho khách hàng

Trong trường hợp này, một ứng dụng khách Python trong giao tiếp liên tục với Trung tâm nhận chuỗi mã IR và truyền nó qua Cổng nối tiếp tới Arduino UNO

Bảng AutoHubLog

  • Ghi mã do ứng dụng tự động yêu cầu.
  • Đây là một biện pháp để theo dõi ai và khi nào đã sử dụng hệ thống và mã nào được yêu cầu

Như đã đề cập, tôi đã sử dụng SQL Server 2012 làm nền tảng cơ sở dữ liệu mà tôi lựa chọn. Bạn có thể tạo lại thiết kế đơn giản này trên một nền tảng cơ sở dữ liệu khác như MySQL, Oracle, v.v.

Tuy nhiên, SQL Script để tạo cơ sở dữ liệu này đã được đính kèm ở đây

GHI CHÚ

  1. Mã cho SignalR Hub được thiết kế để kết nối với cơ sở dữ liệu SQL Server 2012
  2. Làm việc với một cơ sở dữ liệu khác có nghĩa là phải thay đổi Hub để sử dụng một trình điều khiển cơ sở dữ liệu khác

Bước 5: Ứng dụng Web ASP. NET SignalR Hub

Ứng dụng Web ASP. NET SignalR Hub
Ứng dụng Web ASP. NET SignalR Hub
Ứng dụng Web ASP. NET SignalR Hub
Ứng dụng Web ASP. NET SignalR Hub

Ứng dụng Web ASP. NET SignalR Hub cùng bao gồm các thành phần sau như được chỉ ra trong sơ đồ đính kèm:

Phần 1 - Trung tâm SignalR nhận yêu cầu từ và trả lời khách hàng

Phần 2, 4 - Trang web khách hàng HTML và biểu định kiểu của nó tạo thành giao diện người dùng chung của hệ thống Tự động hóa và đưa ra các lệnh cho Trung tâm Tự động hóa

Phần 3 - Các API jQuery SignalR được ứng dụng khách HTML sử dụng để giao tiếp với Trung tâm tự động hóa

Phần 5 - Trung tâm SignalR không trực tiếp giao tiếp với cơ sở dữ liệu. Nó làm như vậy thông qua các lớp trung gian được tạo bằng Entity Framework

Các lớp này trừu tượng hóa chi tiết cơ sở dữ liệu từ ứng dụng giao diện người dùng

Phần 6 - Lớp dịch vụ cơ sở dữ liệu giúp thực hiện các thao tác Đọc-Ghi trên Cơ sở dữ liệu SQL (được mô tả trước đó) bằng cách sử dụng các lớp Entity Framework

ASP. NET và SignalR là công nghệ của Microsoft và hướng dẫn này sẽ hướng dẫn bạn cách xây dựng và triển khai một ứng dụng SignalR đơn giản.

Những gì tôi đã xây dựng ở đây dựa trên những điều cơ bản có được từ hướng dẫn này. Khi được triển khai, ứng dụng sẽ trông giống với trang web được hiển thị trong hình thứ hai

LƯU Ý VỀ MÃ

Tệp ZIP có chứa phiên bản rút gọn của mã đã được đính kèm

Cấu trúc thư mục như được hiển thị trong hình ảnh - tuy nhiên, tất cả các lớp khung và tập lệnh jQuery đã bị loại bỏ để giảm kích thước của tệp đính kèm

Khuyến nghị là mã này được sử dụng làm hướng dẫn vì khi bạn tạo một ứng dụng Web SignalR mới bằng cách làm theo liên kết hướng dẫn ở trên, các thư viện jQuery mới nhất và các lớp khung ASP. NET sẽ tự động được thêm vào

Ngoài ra, các tham chiếu đến tập lệnh jQuery trong trang index.html sẽ phải được thay đổi để phản ánh phiên bản mới nhất của thư viện khách hàng jQuery SignalR sẽ tự động được thêm vào khi bạn xây dựng ứng dụng Web của mình.

Cuối cùng, chuỗi kết nối sẽ phải được thay đổi để phù hợp với cơ sở dữ liệu của bạn trong các tệp có tên như Web.config *

Bước 6: Ứng dụng khách dịch vụ Python SignalR

Ứng dụng khách dịch vụ Python SignalR
Ứng dụng khách dịch vụ Python SignalR

Trong khi Máy khách HTML SignalR là Giao diện người dùng mặt trước, Máy khách Python là một ứng dụng dịch vụ mặt sau có chức năng chính là nhận Mã IR do Trung tâm truyền và định tuyến nó đến Arduino UNO qua giao tiếp nối tiếp.

Mã đính kèm là tự giải thích và đủ tài liệu để mô tả chức năng của nó

Như được hiển thị trong ảnh chụp màn hình tổng hợp, Ứng dụng khách HTML và Ứng dụng khách Dịch vụ Python giao tiếp thông qua Trung tâm SignalR như sau:

  1. Người sử dụng hệ thống tự động hóa đưa ra lệnh tới Trung tâm thông qua một lần nhấp vào nút
  2. Mỗi nút được liên kết với mã Khóa IR và khi được nhấp vào, mã này được truyền đến Trung tâm
  3. Trung tâm nhận mã này, kết nối với cơ sở dữ liệu và truy xuất mã Tín hiệu IR thô và truyền lại cho tất cả các máy khách được kết nối

    Đồng thời, Hub ghi lại một mục nhập trong bảng cơ sở dữ liệu AutoHubLog ghi lại mã và ngày giờ nó được yêu cầu bởi các máy khách từ xa

  4. Máy khách dịch vụ Python nhận Mã IR và chuyển tiếp nó tới Arduino UNO để xử lý thêm

Bước 7: Phác thảo và mã truyền tải IR Arduino UNO

Mã và phác thảo truyền IR của Arduino UNO
Mã và phác thảo truyền IR của Arduino UNO
Mã và phác thảo truyền IR của Arduino UNO
Mã và phác thảo truyền IR của Arduino UNO
Mã và phác thảo truyền IR của Arduino UNO
Mã và phác thảo truyền IR của Arduino UNO

Mạch Arduino như trong hình khá đơn giản cho hệ thống này và do đó được mô tả ngắn gọn:

  • Đèn LED hồng ngoại không màu phải được nối với mã PIN kỹ thuật số 3 trên UNO - đây là yêu cầu của thư viện IRLib Arduino
  • Các lý do được mô tả trong IBLE trước đó của tôi về việc sao chép điều khiển từ xa trong phần liên quan đến thư viện IRLib
  • Đèn LED màu xanh lá cây được kết nối với mã PIN kỹ thuật số 4 là một chỉ báo trực quan sáng lên khi UNO đã nhận được tất cả các phần của Mã IR từ ứng dụng khách Python đang chạy trên Raspberry Pi.
  • Việc đèn LED này sáng lên sẽ xác nhận rằng giao tiếp nối tiếp giữa Raspberry Pi và UNO đang hoạt động
  • Để bật giao tiếp nối tiếp, UNO được kết nối với Raspberry Pi qua cổng USB
  • Bản phác thảo Arduino đính kèm được nhận xét đủ để mô tả chức năng của nó
  • Các nhận xét ở đầu mã cũng mô tả cách mạch cần được nối dây

GHI CHÚ

Trong thực tế, Arduino và Pi có thể được kết nối chung với một trung tâm USB được cấp nguồn đủ mạnh để điều khiển Pi, Arduino và cũng truyền tín hiệu mạnh qua đèn LED hồng ngoại

Bước 8: Thiết lập và kiểm tra hệ thống

Kết nối và kiểm tra hệ thống
Kết nối và kiểm tra hệ thống
Kết nối và kiểm tra hệ thống
Kết nối và kiểm tra hệ thống
Kết nối và kiểm tra hệ thống
Kết nối và kiểm tra hệ thống
  1. Xây dựng và triển khai ASP. NET SignalR Hub, máy khách HTML cùng với cơ sở dữ liệu SQL Server 2012 tới Máy chủ thông tin Internet (IIS) trên mạng gia đình cục bộ của bạn
  2. Truy cập ứng dụng web bằng cách mở ứng dụng khách HTML SignalR qua

    URL đến trang này thường sẽ là https:// yourComputer: port_number /

  3. Nhấp vào một nút trên bảng điều khiển và nếu ứng dụng đã được triển khai chính xác, Trung tâm sẽ phản hồi bằng cách trả lại Mã IR và hiển thị nó trong bảng màu Xám bên cạnh bảng điều khiển

    Nhớ lại! Bạn sẽ phải tải các mã vào cơ sở dữ liệu của mình bằng cách thiết lập thư viện bộ thu IR và chụp các mã như được mô tả trong IBLE trước của tôi

  4. Kết nối Arduino với Raspberry Pi qua USB - mở Arduino IDE trên Pi và đảm bảo rằng UNO có thể thiết lập kết nối với Pi

    các bài viết hướng dẫn Arduino này sẽ giúp bạn thực hiện điều này khá nhanh chóng

  5. Mở mã Python và thực hiện các thay đổi sau nếu có thể áp dụng cho môi trường của bạn

    • địa chỉ Cổng nối tiếp của UNO của bạn như có được từ Bước 4
    • URL của trung tâm SignalR khớp với URL cục bộ của bạn từ Bước 2 - trong ví dụ này, nó sẽ là https:// yourComputer: port_number / signalr
  6. Cuối cùng, mở Arduino Sketch trong Arduino IDE trên Raspberry Pi và flash nó vào UNO
  7. Đặt bảng mạch bánh mì giữ mạch gần với thiết bị được điều khiển - đèn LED hồng ngoại phải có tầm nhìn rõ ràng với cổng thu IR của thiết bị
  8. Khởi động chương trình Python trên Raspberry Pi bằng cách nhấn nút F5 trên thanh công cụ Python IDLE
  9. Quay lại Bảng điều khiển trên chương trình khách HTML (Bước 2) và nhấp vào nút (chẳng hạn như Bật nguồn hoặc Tăng âm lượng)

Nếu hệ thống đã được thiết lập chính xác, thì bạn sẽ có thể hiển thị trang ứng dụng khách HTML trên điện thoại hoặc máy tính bảng của mình và điều khiển công cụ của bạn bằng các nút trên trang ứng dụng khách HTML của bạn.

Bước 9: Hệ thống đang hoạt động

Hệ thống đang hoạt động
Hệ thống đang hoạt động
Hệ thống đang hoạt động
Hệ thống đang hoạt động
Hệ thống đang hoạt động
Hệ thống đang hoạt động
Hệ thống đang hoạt động
Hệ thống đang hoạt động

Hình ảnh bên trên cho thấy Hệ thống tự động hóa gia đình đang hoạt động sau khi thiết lập.

Kể từ khi xuất bản IBLE này, tôi đã mở rộng giao diện bằng cách chụp một vài Mã IR từ TV LED VIZIO của mình

Như được hiển thị bên cạnh Điều khiển TV của nhà sản xuất trong hình ảnh đầu tiên, một số chức năng thiết yếu của điều khiển từ xa này đã được tích hợp vào Giao diện người dùng web được truy cập thông qua máy tính bảng của tôi

Các hình ảnh tiếp theo cho thấy máy tính bảng ở phía trước với TV ở phía sau phản hồi các lệnh được đưa ra từ giao diện Web:

  1. Lệnh TẮT nguồn - TV tắt
  2. Lệnh BẬT nguồn - TV bật và logo "V" xuất hiện khi màn hình bật nguồn
  3. Lệnh tắt tiếng BẬT - Một thanh ngang xuất hiện với loa bị tắt tiếng

Trong tất cả các thử nghiệm, vùng Màu xám dọc theo bảng điều khiển trên màn hình máy tính bảng hiển thị lệnh do khách hàng đưa ra và phản hồi được gửi lại bởi Trung tâm SignalR từ xa

Bước 10: Nâng cao hệ thống tự động hóa và các bản sửa lỗi liên quan

Hệ thống này có thể được mở rộng bằng cách thêm nhiều mã được lấy từ các hệ thống khác nhau. Trong khi phần này rất dễ, có hai yếu tố khác mà bạn sẽ phải xem xét.

Cải tiến 1 (Nhanh chóng): Làm việc với các Tín hiệu IR có độ dài khác nhau

  1. Mã IR của các hệ thống khác nhau có độ dài khác nhau, ngay cả giữa hai sản phẩm của cùng một nhà sản xuất.

    Ví dụ: trong trường hợp này, độ dài mảng mã IR cho TV LED là 67 trong khi độ dài của Samsung Sound Bar là khoảng 87

  2. Có nghĩa là, nếu tôi bật Sound Bar trước, mảng IR Buffer trong bản phác thảo Arduino sẽ được lấp đầy bằng một chuỗi IR Code chứa 87 mã
  3. Sau đó, nếu tôi bật TV LED, nó sẽ lấp đầy mảng IR Buffer chỉ với 67 mã, nhưng 20 mã còn lại từ thao tác trước đó sẽ vẫn còn

Kết quả? TV LED không bật vì Bộ đệm mã IR đã bị hỏng do 20 mã bổ sung chưa được dọn sạch từ thao tác trước!

Khắc phục 1 (cách dễ dàng, không được khuyến nghị)

Thay đổi Phác thảo Arduino như sau:

Thay đổi các lệnh gọi hàm sau trong hàm loop () {}

mã truyền ();

để truyền Mã sốIRCode (c);

Thực hiện các thay đổi đối với chữ ký của hàm trên:

void transferIRCode (int codeLen) {// Hằng số RAWBUF được thay thế bằng codeLen IRTransmitter. IRSendRaw:: send (IRCodeBuffer, codeLen, 38); }

Mặc dù điều này dễ dàng, nhưng mảng không bao giờ thực sự được xóa hoàn toàn và do đó đây không phải là một giải pháp sạch sẽ

Khắc phục 2 (Không khó, được khuyến nghị)

Khai báo một biến bổ sung ở đầu Arduino Sketch, sau phần nhận xét:

unsigned int EMPTY_INT_VALUE;

Thêm cái này vào đầu hàm setup ():

// Chụp trạng thái tự nhiên của một biến số nguyên không dấu trốngEMPTY_INT_VALUE = IRCodeBuffer [0];

Cuộn xuống và thêm một chức năng mới vào bản phác thảo ngay sau chức năng TransitIRCode ():

void clearIRCodeBuffer (int codeLen) {// Xóa tất cả các mã khỏi mảng // LƯU Ý: đặt các phần tử của mảng thành 0 không phải là giải pháp! for (int i = 1; i <= codeLen; i ++) {IRCodeBuffer [i-1] = EMPTY_INT_VALUE;}}

Cuối cùng, gọi hàm mới ở trên tại vị trí sau trong hàm loop ():

// Đặt lại - Tiếp tục đọc Serial PortclearIRCodeBuffer (c);…

Đây là một cách tiếp cận rõ ràng hơn vì nó thực sự đặt lại tất cả các vị trí trong mảng Bộ đệm IR đã được điền bởi tín hiệu Mã IR gần đây nhất mà không để lại bất kỳ điều gì có thể xảy ra.

Cải tiến 2 (Liên quan nhiều hơn): Truyền tín hiệu IR lặp lại cho một số thiết bị nhất định

Một số thiết bị yêu cầu cùng một tín hiệu được truyền nhiều lần để phản hồi Ví dụ: Trong trường hợp này, Samsung Sound Bar yêu cầu cùng một mã được gửi hai lần với khoảng cách là 1 giây

Bản sửa lỗi trong khái niệm đã được thảo luận ở đây vì nó liên quan nhiều hơn một chút và sẽ cần thử nghiệm

Thêm chức năng lặp lại vào Ardunio Sketch sẽ có nghĩa là bạn sẽ phải flash Sketch mỗi khi bạn thêm một thiết bị mới vào Hệ thống tự động hóa gia đình của mình

Thay vào đó, việc thêm bản sửa lỗi này vào máy khách HTML SignalR và ứng dụng Dịch vụ Python SignalR làm cho giải pháp linh hoạt hơn rất nhiều. Và điều này có thể đạt được về nguyên tắc như sau:

Sửa đổi ứng dụng khách SignalR HTML để truyền thông tin lặp lại đến Trung tâm

Mở index.html và nhúng giá trị lặp lại vào nút HTML như sau:

value = "SMSNG-SB-PWR-ON" sẽ trở thành value = "SMSNG-SB-PWR-ON_2_1000"

Trong đó, 2 là giá trị lặp lại và 1000 là giá trị trễ tính bằng mili giây giữa hai tín hiệu lặp lại

Khi bạn nhấp vào nút này, trung tâm SignalR sẽ nhận được Mã khóa + Lặp lại_Spec

Sửa đổi các phương pháp phía Máy chủ SignalR để chỉ phân tích cú pháp Mã khóa:

  • Sử dụng Mã khóa để lấy Mã IR từ cơ sở dữ liệu như bình thường
  • Truyền Mã khóa + Lặp lại_Spec và Mã IRC cho Khách hàng SingalR như bình thường

Sửa đổi Ứng dụng dịch vụ Python SignalR để truyền tín hiệu bằng cách sử dụng các giá trị Lặp lại:

Mở ứng dụng Python và sửa đổi hai chức năng sau:

def print_command_from_hub (buttonId, cmdSrc):

# phân tích cú pháp mã lặp lại từ giá trị buttonId

def transferToArduino (IRSignalCode, delim, endPrefix):

# thiết lập vòng lặp while hoặc for để truyền tín hiệu ở tần số mong muốn

  • Bằng cách này, Arduino không phải nhấp nháy liên tục
  • Bất kỳ số lượng tần số lặp lại nào cũng có thể được tích hợp vào hệ thống này
  • Bên cạnh đó, nếu bạn đang sử dụng UNO, có một giới hạn về kích thước mà Sketch của bạn có thể phát triển!

Bước 11: Các vấn đề đã biết & Mối quan tâm về bảo mật

Giống như trường hợp của các hệ thống được xây dựng lần đầu tiên, hệ thống này có một vài vấn đề xuất hiện trong quá trình thử nghiệm.

Sự cố 1: Việc kích hoạt các lệnh liên tiếp nhanh chóng với độ trễ chưa đến một giây giữa các lần nhấp vào nút khiến hệ thống không phản hồi sau khi phản hồi một vài lần đầu tiên.

  • Khởi động lại máy khách Python SignalR khôi phục hệ thống trở lại hoạt động bình thường
  • Các giải pháp trước mắt có thể là loại bỏ các đầu ra Gỡ lỗi không mong muốn trong cả hai, Python SignalR Client và Arduino Sketch và lặp lại các thử nghiệm này
  • Một nơi khác cần xem xét là bản thân giao tiếp Serial - liệu có thể thêm mã để làm sạch bộ đệm nhanh chóng không?

Điều đó nói rằng, tôi nhận thấy rằng TV của tôi không phản hồi tốt với điều khiển từ xa của nhà máy - do đó, bản chất của giao tiếp IR của TV của tôi cũng có thể là một yếu tố góp phần.

Sự cố 2: Màn hình HTML ngừng phản hồi các lần nhấp vào nút sau một thời gian dài không hoạt động

Thông thường, việc làm mới trang sẽ giải quyết được hành vi này - tuy nhiên, nguyên nhân của hành vi này vẫn chưa rõ ràng

QUAN TÂM VỀ BẢO MẬT

Hệ thống này được thiết kế chỉ để sử dụng mạng cục bộ (gia đình) và không có các biện pháp bảo vệ an toàn cần thiết để sử dụng qua internet

Do đó, bạn nên triển khai SignalR Hub tới một máy cục bộ trên mạng nội bộ / gia đình của bạn

Cảm ơn đã đọc IBLE của tôi và tôi hy vọng bạn vui vẻ!

Đề xuất: