Mục lục:

Bảng tin LED IoT RPi: 3 bước (có hình ảnh)
Bảng tin LED IoT RPi: 3 bước (có hình ảnh)

Video: Bảng tin LED IoT RPi: 3 bước (có hình ảnh)

Video: Bảng tin LED IoT RPi: 3 bước (có hình ảnh)
Video: 01-Cài đặt RaspberryPi OS, điều khiển LED 3 đèn giao thông 2024, Tháng mười một
Anonim
Image
Image
Thiết lập phần cứng
Thiết lập phần cứng

Trong Có thể hướng dẫn này, tôi đã tạo một bảng thông báo LED được kết nối wifi bằng Raspberry Pi (RPi). Người dùng sẽ kết nối với máy chủ web của Raspberry Pi bằng trình duyệt của họ để gửi các tin nhắn ngắn sẽ hiển thị trên màn hình LED 8x8. Vì giao tiếp ma trận LED 8x8 với trình điều khiển MAX7219 bằng Python đã được những người khác trên Internet ghi lại đầy đủ tài liệu, nên dự án này tập trung vào việc xây dựng giao diện máy chủ web và sử dụng ZeroMQ Messaging để quản lý các tin nhắn đến.

Cập nhật: Đây là một dự án tiếp theo Bảng vẽ ma trận LED IoT Decimal / Hexadecimal 8x8

(Tôi là người điều hành câu lạc bộ cho Girls Who Code Club và tôi đã đưa ra dự án đơn giản này để dạy sinh viên về thiết kế giao diện web và nhắn tin.)

Bước 1: Thiết lập phần cứng

Thiết lập phần cứng
Thiết lập phần cứng
Thiết lập phần cứng
Thiết lập phần cứng

Dự án này yêu cầu phần cứng sau:

  • Raspberry Pi
  • Nguồn điện USB chẳng hạn như Anker với cáp USB to MicroUSB ngắn
  • Mô-đun ma trận điểm MAX7219 với cáp ruy-băng (Aliexpress với giá dưới 2 đô la)
  • Bao vây (tôi làm một cái từ hộp các tông và phun sơn màu đen)

Thiết lập phần cứng là một phần dễ dàng. Chỉ cần kết nối cáp ruy-băng 5 dây từ ma trận LED đến RPi trên mỗi tài liệu thư viện MAX7219.

LED-> RPi ======== VCC-> Pin GPIO # 2 (5v) GND-> Pin GPIO # 6 (GND) DIN-> Pin GPIO # 19CS -> Pin GPIO # 24CLK-> Pin GPIO # 23

Tôi đã sử dụng băng dính xốp hai mặt để dán đèn LED vào vỏ RPi. Sau đó, tôi tạo một vỏ bọc từ một hộp các tông để chứa cả RPi và pin.

Bước 2: Thiết lập phần mềm

Thiết lập phần mềm
Thiết lập phần mềm
Thiết lập phần mềm
Thiết lập phần mềm
Thiết lập phần mềm
Thiết lập phần mềm
Thiết lập phần mềm
Thiết lập phần mềm

RPi phải có phần mềm sau:

  • Python 3
  • Máy chủ web Apache 2
  • Trình điều khiển Max7219 cho Python
  • Nhắn tin ZeroMQ

Python 3

RPi phải được cài đặt sẵn Python 3. Mặc dù mã của tôi được viết cho Python 3, nhưng Python 2 sẽ hoạt động với một số thay đổi nhỏ.

Apache 2

Thiết lập Apache và kích hoạt tập lệnh Python CGI. Dưới đây là một số tài nguyên tuyệt vời để thiết lập Apache trên RPi nên tôi sẽ không nhắc lại ở đây. Chỉ cần làm theo hướng dẫn bên dưới để thiết lập Apache và CGI. Đảm bảo rằng các tập lệnh *.py có thể thực thi được từ trình duyệt.

  • https://raspberrywebserver.com/cgiscripting/
  • https://www.knight-of-pi.org/apache-web-server-with-cgi-for-python/

Trình điều khiển Max7291

Cài đặt trình điều khiển Max7219 bằng cách làm theo hướng dẫn cài đặt mới nhất:

https://max7219.readthedocs.io/en/latest/install.html

Sau khi cài đặt, hãy chạy mã ví dụ, matrix_test.py, cho mỗi hướng dẫn cài đặt để hiển thị "Hello World" trên Ma trận LED. Điều này phải hoạt động trước khi chuyển sang bước tiếp theo.

Nhắn tin ZeroMQ

Tại sao chúng ta cần Nhắn tin? Hãy thử chạy mã ví dụ trên, matrix_test.py, trên hai màn hình đầu cuối đồng thời. Hệ thống sẽ cho phép nhiều mã chạy đồng thời nhưng bạn sẽ thấy các thông báo bị chồng chéo, điều không mong muốn. Trong môi trường người dùng đơn lẻ, đây có thể không phải là vấn đề vì bạn có thể đảm bảo rằng chỉ một chương trình có thể chạy tại một thời điểm. Trong môi trường nhiều người dùng như web, hệ thống phải tạo hàng đợi FIFO (First-In-First-Out) để đảm bảo chỉ một người có thể thực thi mã trong khi những người khác chờ đợi. Mặc dù có thể có các giải pháp khác để đạt được điều này, nhưng tôi quyết định sử dụng ZeroMQ để quản lý hàng đợi FIFO. Mã máy chủ ZeroMQ chứa lệnh gọi chức năng thực tế để hiển thị lần lượt một thông báo trên ma trận LED trong khi máy chủ web hoạt động như một máy khách ZeroMQ để hỏi và gửi thông báo đến máy chủ ZeroMQ. Bằng cách này, trong khi nhiều người dùng có thể gửi thông báo qua một trang web đồng thời, máy chủ ZeroMQ sẽ chỉ hiển thị một thông báo tại một thời điểm.

Đối với dự án này, chúng tôi sẽ chỉ cài đặt gói Python pyzmq chứ không phải toàn bộ gói ZeroMQ.

chạy:

sudo pip3 cài đặt pyzmq

Đọc hướng dẫn ZeroMQ trên https://zguide.zeromq.org và thử ví dụ về máy chủ và ứng dụng khách hello world bằng Python. Sao chép mã ví dụ Python cho cả máy chủ và máy khách sang RPi và đảm bảo chúng hoạt động trước khi chuyển sang bước tiếp theo.

Bước 3: Thiết lập trang web

Trong trang web, tôi đã sử dụng khung bootstrap css / js để làm cho trang trông đẹp mắt. Điều này là hoàn toàn tùy chọn.

Tải xuống tệp led_msg.tar.gz đính kèm vào thư mục gốc hoặc thư mục con của Apache. Để bỏ mở tệp tar của gzip'd, hãy chạy:

tar -xzvf led_msg.tar.gz

Điều này tạo ra các tệp sau:

msg.py (chương trình chính)

template / xen kẽ.html (mẫu html) / send_msg.html (html template) static / img / led_150x150.jpg (jpg được sử dụng trong html template)

Theo tùy chọn, cài đặt khung bootstrap css / js trong thư mục tĩnh.

Nhập URL cho msg.py trình duyệt của bạn và đảm bảo trang web xuất hiện. Chưa gửi tin nhắn !!!

Trước khi có thể gửi thư, máy chủ ZeroMQ phải được khởi động để chấp nhận thư từ máy khách trang web và hiển thị chúng trên ma trận LED. Không có gì sẽ hiển thị trên màn hình nếu máy chủ ZeroMQ không chạy.

Tải xuống mã max7219_server.py đính kèm vào thư mục chính của bạn, không phải trong thư mục gốc của Apache nơi mã này có thể được thực thi bởi người dùng web. Chạy nó dưới dạng root:

sudo python max7219_server.py

Bây giờ máy chủ ZeroMQ đã sẵn sàng để nhận tin nhắn từ trang web. Nhập và gửi một tin nhắn đơn giản từ trang web. Nếu mọi thứ được thiết lập chính xác, bạn sẽ thấy thông báo đó trên màn hình máy chủ ZeroMQ cũng như trên Ma trận LED.

Nếu bạn muốn tắt máy chủ, chỉ cần thực hiện Control-C để thoát khỏi màn hình máy chủ.

Đó là nó. Hy vọng bạn sẽ thích dự án này nhiều như tôi đã làm.

Một cải tiến mà bạn có thể thực hiện là làm cho giao tiếp ZeroMQ giữa máy chủ và máy khách không đồng bộ để trang web không đợi trong khi các thông báo khác đang được hiển thị. Ngoài ra, bạn có thể gắn thêm ma trận LED ở chế độ xếp tầng. Tôi sẽ để điều đó cho bạn.

Đề xuất: