Mục lục:
- Bước 1: Phần cứng cho BLE-LED-Stick
- Bước 2: Lắp ráp điện tử
- Bước 3: Làm thế nào để tạo phông chữ?
- Bước 4: Phần mềm điều khiển BLE
- Bước 5: Thử nghiệm đầu tiên
- Bước 6: Chọn Ảnh động
- Bước 7: Điều khiển RGB
- Bước 8: Dịch vụ Text_Animation và Dịch vụ lưu trữ liên tục
- Bước 9: Khởi động ứng dụng Android
- Bước 10: Viết tin nhắn bằng hình ảnh
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Tài liệu hướng dẫn này chỉ cho bạn cách chế tạo một cây bút viết đèn với đèn LED RGB có thể điều khiển thông qua BLE từ điện thoại của bạn!
Bây giờ mùa đen bắt đầu và bạn cần chụp những bức ảnh phơi sáng lâu: Với chiếc gậy này, bạn có thể viết chữ ký của mình vào ảnh, hoặc một câu nói động lực, hoặc một lời tuyên bố về tình yêu, một mã QR, một địa chỉ web, hoặc nhiều những thứ khác…
Nó bao gồm một số chủ đề phát triển:
- xây dựng phần cứng
- lập trình chipset Cypress BLE với C
- tạo ứng dụng của riêng bạn để kiểm soát nó.
Bước 1: Phần cứng cho BLE-LED-Stick
Đối với cây gậy, bạn cần những thứ sau:
- Một mô-đun BLE cây bách (CY8C4247LQI-BL583)
- một WS2812b RGB-LED-Strip (64LED từ dải 144Led trên mỗi mét)
- pin Li-Ion có giá đỡ phù hợp (18650)
- một nút bấm
- một miếng breadboard
Bản thân phần cứng của chiếc gậy này khá đơn giản.
Mô-đun Cypress BLE được gắn trên một miếng breadboard và các đèn LED, nút và nguồn điện chỉ được kết nối với breadboard này.
Mọi thứ được gắn, dán hoặc vặn vào một mảnh gỗ nhỏ, bản thân nó được đưa một phần vào một ống polyacryl trong. Nhưng đây không phải là điều bắt buộc. Tôi muốn gắn mọi thứ vào bên trong một ống, nhưng tôi không tìm thấy mô-đun BLE phù hợp và pin khá lớn so với đèn LED. Đối với lần chụp đầu tiên, bạn không cần ống acryl.
Bước 2: Lắp ráp điện tử
Bước này cho bạn biết cách gắn kết mô-đun BLE và các chân nào được sử dụng cho mục đích nào.
Như trong một số Tài liệu hướng dẫn của tôi, tôi đã sử dụng Bộ công cụ phát triển Cypress BLE. Hướng dẫn Bắt đầu Nhanh CY8CKIT-042-BLE
Nếu bạn muốn mô-đun tự vận hành, tất cả những gì bạn cần kết nối là nguồn điện và các chân đã sử dụng.
Đối với dự án của chúng tôi, chúng tôi chỉ sử dụng chân 3.5 để điều khiển dải LED. Nhưng tất nhiên bạn có thể thay đổi điều đó với PSoC Creator.
Như bạn có thể thấy trong hình của PCB, tôi đã thêm các đầu pin ở tất cả các góc của chip nhưng tôi đã bỏ qua chân VREF.
Bằng cách này, mô-đun được gắn đúng cách và không thể kết nối sai mô-đun.
Bước 3: Làm thế nào để tạo phông chữ?
Chà, tôi nghĩ đây là một trong những vấn đề thú vị nhất mà tôi đã giải quyết được trong suốt dự án này.
Tất nhiên người ta có thể chỉ cần thiết kế một phông chữ mới và viết nó trong một mảng, nhưng đó thực sự là một công việc rất nhiều!
Vậy tôi đã làm gì?
Tôi biết rằng tôi cần một số loại chuyển đổi ASCII sang hex-bitmap. Và tôi đã may mắn, vì tôi không phải là người đầu tiên gặp vấn đề này!:-)
Phần mềm "GLCD Font Generator" đã làm đúng như vậy:
Vì tôi muốn tận dụng tối đa LED-stick, tôi đã nhập phông chữ ở kích thước khá lớn (~ 32pixel). Nếu bạn chỉ sử dụng chữ in hoa, bạn không cần quan tâm đến dấu thăng, điều này sẽ làm tăng kích thước phông chữ có thể nhìn thấy của bạn thêm một vài pixel. Nhưng tôi đã chọn sử dụng cả viết hoa và các chữ cái nhỏ. (https://en.wikipedia.org/wiki/Ascender_%28typography%29)
Khi bạn nhập phông chữ vào trình tạo phông chữ GLCD, bạn có thể chọn xuất nó ở các định dạng khác nhau.
Tôi đã cố gắng xuất nó trực tiếp thành các tiêu đề tốt, nhưng không hoàn hảo. Kết quả xuất là một mảng ngắn (16 bit) với các giá trị byte-hex cho các cột cho mỗi ký tự của ký tự 128-ascii đầu tiên. Không hoàn toàn là những gì tôi muốn hoặc cần…
Vì vậy, tôi đã nhập mảng vào một trang tính calc văn phòng mở. Sau đó, tôi loại bỏ "0x" trên ba trong bốn giá trị và nối chúng thành một giá trị dài 32 bit. Tôi cũng đã sửa lỗi nội dung sai của từng byte riêng lẻ.
Mảng kết quả là một mảng N * M gồm các giá trị 32 bit. M là ký tự tương ứng và N là các cột tạo nên sự hiển thị của ký tự này. Trong bản nháp đầu tiên này, tất cả các ký tự có cùng số cột, có nghĩa là tất cả các chữ cái đều có chiều rộng như nhau, giống như trong phông chữ Courier nổi tiếng. Các ký tự nhỏ như "i" hoặc "t" trông như bị lạc trong không gian.
Do đó, tôi đã thêm một tham số mới vào đầu mỗi ký tự để cho biết ký tự này có bao nhiêu cột hoặc ký tự này rộng bao nhiêu. Điều này giúp tiết kiệm bộ nhớ và làm cho văn bản trông đẹp hơn!
Bước 4: Phần mềm điều khiển BLE
Nguyên tắc của phần mềm BLE rất dễ dàng:
- Lúc đầu nó chỉ không làm gì cả.
- Thông qua BLE, bạn có thể đặt các hoạt ảnh hoặc văn bản khác nhau được hiển thị.
- Khi bạn nhấn nút, các cột riêng lẻ của hoạt ảnh hoặc văn bản sẽ được hiển thị.
- Sau khi văn bản được hiển thị, nó tiếp tục chờ một lần nữa.
Chỉ cần nhập dự án bách khoa vào PSoC-Creator của bạn và sửa đổi nó nếu bạn muốn.
PSoC-4 không có nhiều RAM và đèn flash để có thể chứa các hình ảnh phông chữ RGB hoàn chỉnh. Do đó, tôi cần một cách để tạo nội dung LED động từ văn bản. Điều đó khá đơn giản, không có gì đặc biệt cho đến nay. Từ một văn bản có nhiều chữ cái, thuật toán sẽ lấy một chữ cái và chuyển nó thành mảng bitmap đen-trắng. Sau đó, nó lấy từng cột của bitmap một chữ cái này và thay vì màu trắng, nó ghi màu RGB hiện tại vào mảng LED. Bằng cách này, bạn có thể tạo văn bản một màu hoặc bằng một chức năng bổ sung thay đổi màu sau mỗi cột, mỗi chữ cái hoặc thậm chí sau mỗi pixel.
Một "chữ cái" có thể được lưu trữ trong một biến byte duy nhất trong khi một bitmap đen trắng cần được lưu trữ trong một số loại mảng.
Cấu trúc dữ liệu là:
String: newtext = "Xin chào";
Phông chữ: uint32 ký tự = {FirstCharacter_ColumnCount, FirstCharacter_FirstColumn, FirstCharacter_SecondColumn,… SecondCharacter_ColumnCount, SecondCharacter_FirstColumn,…… LastCharacter_ColumnCount,… LastCharacter_LastColumn}; Màu: uint32 rgbcolor = 0xHHBBGGRR; // Độ sáng, Xanh lam, Xanh lục, Đỏ mỗi giá trị 8bit
Để chuyển đổi một chuỗi để hiển thị, chúng tôi thực hiện như sau:
getCharacter (): H (8bit)
getColumn (int i): column (32bit) (i bắt đầu bằng cột đầu tiên, chạy đến cuối cùng.) if (bit trong cột là 1) Đèn LED trong Strip được đặt thành màu. LED-Strip Array là 64 đèn LED với mỗi màu 32bit!
Và nếu cột này được hiển thị, chúng ta tiếp tục với cột tiếp theo.
Nó là điều này dễ dàng.
Bước 5: Thử nghiệm đầu tiên
Bây giờ phần mềm đã chạy, chúng tôi đã sẵn sàng cho các thử nghiệm đầu tiên.
Cách dễ nhất để kiểm tra chức năng nhúng là sử dụng ứng dụng kiểm tra năng lượng thấp của Bluetooth. Giống như Ứng dụng Bắc Âu hoặc Cypress.
Bắc Âu: nRF Connect dành cho điện thoại di động
Cypress: CySmart
Khởi động Pov-Stick và quan sát cách hiển thị chuỗi demo. Khi quá trình này hoàn tất, đã đến lúc khởi động ứng dụng. Tìm kiếm thiết bị Povstick và nhấp vào kết nối.
Sau khi kết nối được thiết lập, ứng dụng sẽ tự động khám phá tất cả các dịch vụ và đặc điểm đã xác định.
Tìm kiếm dịch vụ đầu tiên (nên bắt đầu bằng 0000ccce…). Nhấp vào nó để mở nó và hiển thị đặc điểm đầu tiên (bắt đầu bằng 0000ccc1). Sau đó nhấn nút ghi (hoặc tải lên) và viết số 01 cho đặc điểm này.
Sau khi bạn nhấn send, POVstick sẽ bắt đầu hoạt ảnh Color-Knight-rider hay còn gọi là Máy quét Larson với các màu sắc thay đổi.
Xin chúc mừng bạn đã gửi giá trị đầu tiên của mình qua BLE!
Bước 6: Chọn Ảnh động
Trong phần mềm, chúng tôi đã xác định một enum "e_Animation" với các giá trị sau:
typedef enum {Knightrider = 0, ColorKnightRider, Rainbowswirl, Valueswirl, WS_CandyCane, WS_CandyCane_2, WS_CandyCane_3, WS_Twinkle, WS_Icicle, WS_ColorWheel, RGB_Control, TextAnimation, Animation_Max
Đây là những giá trị hợp lệ cho đặc tính ccc1. Nếu bạn muốn xem CandyCane-Animation, bạn phải viết 4, 5 hoặc 6 cho đặc điểm này. Chúng khác nhau về màu sắc.
Hai hoạt ảnh đặc biệt là RGB_Control và TextAnimation. Nếu bạn đã chọn kích hoạt những thứ này, thì rõ ràng lúc đầu cây gậy sẽ không hiển thị gì. Nhưng nó cung cấp cho bạn các tùy chọn bổ sung để kiểm soát thanh với các dịch vụ khác.
Bước 7: Điều khiển RGB
Có thể dễ dàng kiểm tra RGB-Control bằng Ứng dụng CySmart vì tôi đã sử dụng cùng một UUID cho đặc tính này như trong Cypress Demo.
Khởi động ứng dụng CySmart và kết nối với Povstick. Đầu tiên, bạn phải viết "0x0A" cho đặc tính ccc1.
0x0A là giá trị hex cho 10, là hoạt ảnh RGB-Control trong enum.
Sau đó, bạn có thể chuyển sang Bảng điều khiển RGB-LED trong Ứng dụng CySmart. Có thể bạn phải khởi động lại ứng dụng để đến màn hình này. Sau đó, bạn có thể kiểm soát màu sắc của tất cả các đèn LED với sơ đồ RGB này.
Tất nhiên bạn cũng có thể viết các giá trị trực tiếp vào đặc tính.
Bước 8: Dịch vụ Text_Animation và Dịch vụ lưu trữ liên tục
Các dịch vụ này không dễ thử nghiệm.
Về mặt kỹ thuật, bạn cũng có thể sử dụng ứng dụng nordic cho việc này, nhưng bạn cần biết những giá trị nào để ghi vào đặc tính nào.
Vì vậy, nếu bạn muốn kiểm tra những điều này, bạn nên xem dự án PSoC, đặc tính nào có UUID nào.
Một điều quan trọng là đặc tính "Set-Speed". Với đặc điểm này, bạn có thể kiểm soát tốc độ của các hoạt ảnh.
Với đặc tính "Set_Animation" của PersualityStorageService, bạn có thể kiểm soát phông chữ và màu sắc của chuỗi văn bản. Các giá trị hợp lệ được xác định trong "povanimation.h", hai phông chữ "mono" và "serif" và một màu và bảy sắc cầu vồng. Các giá trị 0 và 1 hiển thị văn bản với màu cố định, có thể điều khiển được thông qua đặc tính RGB_Control. Giá trị 2 và 3 thay đổi màu sắc cho mỗi cột và cung cấp cho chuỗi một cầu vồng đẹp.
"Write_Text_Service" thì khác. Bạn có thể ghi một chuỗi mới vào thiết bị bằng cách viết các ký tự riêng lẻ vào đặc tính "Set_Character". Trên mỗi lần ghi, bạn sẽ nhận được thông báo về độ dài hiện tại của chuỗi.
Để bắt đầu một chuỗi mới, hãy viết "true" thành "Clear_String".
Đây không phải là cách triển khai tốt nhất, nhưng nó hoạt động với bất kỳ chuỗi nào có tối đa 250 ký tự mà không thay đổi kích thước MTU.
Hiển thị một chuỗi mới có bắt đầu khi nhấn nút trên Povstick.
Bước 9: Khởi động ứng dụng Android
Đây là một bước quan trọng, nhưng vượt ra ngoài phạm vi của hướng dẫn này. Xin lỗi vì chuyện đó!
Có lẽ tôi có thể tải ứng dụng thử nghiệm của mình lên cửa hàng Play, nhưng nó vẫn chưa hoàn thành hoặc không thể tải xuống được.
Bước 10: Viết tin nhắn bằng hình ảnh
Chà, đây là lý do tại sao tôi xây dựng chiếc povstick này ngay từ đầu: Để viết tin nhắn bằng hình ảnh.
Bạn cần một chân máy, một máy ảnh có chức năng phơi sáng lâu và một số vị trí tốt.
Thiết lập máy ảnh và điều chỉnh thời gian phơi sáng thành 10 giây cho lần kiểm tra đầu tiên.
Kích hoạt bản phát hành và bắt đầu xem qua hình ảnh, bắt đầu hiển thị văn bản trên thanh.
Et Thì đấy, chúng tôi đang ở đó!
Với sự kết hợp phù hợp giữa độ sáng đèn LED, khẩu độ và thời gian phơi sáng, bạn thậm chí có thể chụp ảnh vào lúc bình minh.
Ba hình ảnh trong bước này cho thấy toàn bộ các khả năng.
Đầu tiên, đèn LED bị phơi sáng quá mức và tạo ra ánh sáng huyền ảo. Nhưng đó là lý do tại sao phản xạ trên mặt đất có thể nhìn thấy được và nền khá tốt.
Hình ảnh thứ hai được hiển thị cho các đèn LED, nhưng điều đó khiến nền hoàn toàn đen.
Và cái thứ ba hiển thị đèn LED khá mờ ngay sau khi mặt trời lặn. Các đèn LED sáng như trong các bức ảnh khác, nhưng môi trường quá sáng nên tôi phải sử dụng độ nhạy sáng thấp và ISO thấp để đèn LED có vẻ khá tối.
Giải nhì cuộc thi Make it Glow 2018