Biến màn hình cảm ứng ESP32 thành đàn piano – Không cần tệp âm thanh
Phím nổi, hợp âm thật và âm thanh được tạo ra trên chip
Một cây đàn piano có thể chơi được trên màn hình cảm ứng. Các phím trông nổi lên và lõm xuống khi bạn chạm vào, bảng cảm ứng theo dõi năm ngón tay để bạn có thể chơi hợp âm, và mọi nốt nhạc đều được bộ xử lý tổng hợp - không có tệp âm thanh và không liên quan đến thẻ SD.
922-Đây là Bài viết AI Music dự án ở đây.
923-Cây đàn Piano (đây là bài viết hiện tại)
Nó hoàn toàn ngoại tuyến. Nạp chương trình và chơi.
Robojax_Makerfab khi thanh toán trên trang sản phẩm MaTouch AI ESP32-S3. Bạn không mất gì khi sử dụng, và nó giúp hỗ trợ mã và hướng dẫn miễn phí ở đây.Hai bố cục và lý do cả hai đều tồn tại
Bản phác thảo này có hai bàn phím hoàn toàn khác nhau, và một nút LAYOUT ở góc trên bên trái để chuyển đổi giữa chúng. Nhãn trên nút đó cho bạn biết bạn đang ở bố cục nào, vì vậy nó đồng thời là chỉ báo - chạm vào nó và nó sẽ thay đổi.
KEYS - một cây đàn piano thực thụ
Bảy phím trắng trải dài toàn bộ chiều rộng với năm phím đen nằm trên, giống hệt bàn phím thật. Đây là chế độ khởi động của bo mạch. Vì chỉ vừa một quãng tám, các nút - và + bên cạnh LAYOUT giúp bạn di chuyển lên xuống; chỉ số màu lục lam giữa chúng hiển thị vị trí của bạn, từ C3 đến C6.
GRID - bốn quãng tám, không có nốt sai

Bốn hàng bảy, 28 phím cùng lúc. Mỗi hàng là một quãng tám, thấp nhất ở dưới cùng; mỗi cột là một nốt - C, D, E, F, G, A, B. Không có nốt thăng, không có nốt giáng, vì vậy toàn bộ bàn phím là cung Đô trưởng và không có nốt sai. Bạn có thể đưa nó cho người chưa từng chơi nhạc cụ nào, để họ bấm ngẫu nhiên, và nó vẫn nghe như âm nhạc.
Tại sao chỉ một quãng tám vừa với bàn phím thật
Đây là phép tính định hình toàn bộ dự án. Màn hình rộng 320 pixel nhưng chỉ khoảng 2,2 inch, vì vậy một đầu ngón tay bao phủ khoảng 45 pixel.
- Một quãng tám - bảy phím trắng khoảng 45 pixel mỗi phím. Thoải mái.
- Hai quãng tám - mười bốn phím trắng khoảng 22 pixel mỗi phím. Nửa đầu ngón tay. Không thể chơi được.
Vì vậy, bố cục piano đúng chuẩn chỉ có thể hiển thị một quãng tám ở đây, đó là lý do các nút quãng tám tồn tại - và lý do lưới tồn tại như một lựa chọn thay thế khi bạn muốn phạm vi rộng và độ tin cậy thay vì tính chân thực.
Thay đổi bố cục trong mã
Ba cài đặt gần đầu bản phác thảo kiểm soát tất cả điều này:
| Cài đặt | Chức năng |
|---|---|
BOOT_LAYOUT |
Bàn phím nào xuất hiện khi bật nguồn. LAYOUT_KEYS cho piano, LAYOUT_GRID cho lưới. |
ROWS |
Số quãng tám mà GRID hiển thị. Mặc định là 4. |
COLS |
Số nốt mỗi hàng trong GRID. Mặc định là 7, bảy nốt tự nhiên. |
BASE_OCTAVE |
Quãng tám mà hàng dưới cùng của GRID bắt đầu. Mặc định là 3. |
ROWS và COLS chỉ ảnh hưởng đến GRID. Bố cục KEYS xây dựng quãng tám của nó từ các bảng riêng và bỏ qua chúng, vì vậy thay đổi các số đó sẽ không thêm phím đen hoặc thay đổi piano.Cách tạo hiệu ứng nổi
Một viền sáng dọc theo cạnh trên và trái của mỗi phím, và một viền tối dọc theo cạnh dưới và phải, khiến mắt nhìn thấy vật gì đó nhô ra. Nhấn một phím sẽ hoán đổi chúng và làm tối bề mặt, tạo cảm giác bị lõm xuống. Chỉ là hai dòng mã cho mỗi cạnh và hiệu quả rất thuyết phục.
Cách âm thanh được tạo ra
Không có bản ghi âm nào trên bo mạch này. Không có mẫu âm thanh, không có gì trên thẻ nhớ. Mỗi nốt là một bộ tích lũy pha bước qua bảng sin 512 mục - bước nhanh qua nó cho nốt cao, chậm cho nốt thấp - vì vậy không có phép lượng giác nào được tính cho mỗi mẫu. Ba hài âm được trộn để tạo độ ấm.
Mỗi nốt cũng có một đường bao tấn công và phân rã ngắn, khoảng sáu mili giây vào và bảy mươi ra. Nếu không có nó, bạn sẽ nghe thấy tiếng tách mỗi khi nốt bắt đầu hoặc dừng, vì bạn đang bật một dạng sóng ở biên độ tối đa. Đường bao đó là sự khác biệt giữa một nhạc cụ và một cái còi bíp.
Tối đa năm nốt được trộn lẫn với nhau, khớp với năm điểm chạm mà bảng cảm ứng báo cáo. i2s_write() chặn khi bộ đệm âm thanh đầy, điều này thuận tiện giúp toàn bộ chương trình chạy theo thời gian thực - không cần bộ định thời hay ngắt.
Các nút bấm
- LAYOUT chuyển đổi giữa KEYS và GRID. Nhãn hiển thị bạn đang ở chế độ nào.
- - và + di chuyển quãng tám. Chỉ áp dụng cho bố cục KEYS.
- VOL mở bảng điều chỉnh âm lượng phủ lên bàn phím - kéo thanh trượt để đặt mức âm lượng. Chạm VOL lần nữa để đóng.
- DEMO tự phát một giai điệu, thắp sáng từng phím khi chạy.
- WAVE xoay vòng âm sắc giữa SOFT, ORGAN và BRIGHT. Ban đầu ở ORGAN, phù hợp nhất với loa nhỏ này, nhưng hãy thử cả ba.
Điều chỉnh âm lượng
Bộ khuếch đại trên bo mạch này thực sự rất to - 3.2 W vào loa 4 Ω - vì vậy việc có thể giảm âm lượng là quan trọng. Chạm VOL sẽ trượt một bảng điều khiển lên bàn phím với thanh trượt lớn có thể kéo; mức hiện tại cũng được hiển thị vĩnh viễn trên thanh trên cùng.
Khi bảng điều khiển mở, nó cố tình nuốt mọi chạm bên dưới thanh trên cùng, vì vậy bạn không thể vô tình kích hoạt nốt qua nó. Cài đặt được áp dụng như một phép nhân duy nhất khi âm thanh trộn được chia tỷ lệ xuống 16-bit, không tốn chi phí khi chạy và ảnh hưởng đến giai điệu demo như nhau. Điều chỉnh VOL_STEPS trong sketch nếu bạn muốn các bước mịn hơn hoặc thô hơn mức mặc định là mười.
Không WiFi, không tài khoản, không cần thiết lập gì
Đáng nói rõ ràng, vì mọi dự án khác trong loạt bài này đều cần một tài khoản ở đâu đó: dự án này thì không. Không có secrets.h để điền, không có khóa API, không có mạng. Nạp chương trình và chơi. Trong số mọi thứ được xây dựng cho bo mạch này, đây là cái nên đưa cho người mới bắt đầu.
Thử một hợp âm
Nhấn ba hoặc bốn phím cùng lúc. Bộ điều khiển cảm ứng theo dõi năm ngón tay, vì vậy tất cả đều phát ra cùng nhau - đó là khoảnh khắc nó không còn cảm giác như một chiếc còi mà bắt đầu cảm giác như một nhạc cụ.
Về bo mạch MaTouch AI ESP32-S3 2.8"
Mọi dự án trên trang này chạy trên MaTouch AI ESP32-S3 2.8" TFT ST7789V từ Makerfabs. Đây là một bo mạch tất cả-trong-một: màn hình cảm ứng màu, camera 3 megapixel, hai micro và một bộ khuếch đại loa thực sự, tất cả được điều khiển bởi ESP32-S3 với 8 MB PSRAM. Sự kết hợp đó là điều làm cho các dự án AI này khả thi trên một bo mạch duy nhất mà không cần gì khác kèm theo.
8 MB PSRAM quan trọng hơn bất kỳ con số nào khác ở đây. Nó cho phép bo mạch giữ một khung hình camera, vài giây âm thanh ghi âm, hoặc một bức ảnh mã hóa base64 trong bộ nhớ cùng lúc - không cái nào trong số đó vừa với RAM thông thường của ESP32’s.
Tài liệu của nhà sản xuất: Trang wiki Makerfabs.
Mọi dự án khác cho bo mạch này - camera, nhận diện khuôn mặt ngoại tuyến, trợ lý giọng nói AI, thị giác AI và dự án vẽ - đều có hướng dẫn riêng. Liên kết đến tất cả chúng nằm bên dưới bài viết này.
Thông số kỹ thuật chính
- Bộ xử lý: ESP32-S3, lõi kép 240 MHz, WiFi 2.4 GHz + Bluetooth 5.0
- Bộ nhớ: 16 MB flash, 8 MB PSRAM (gần như bắt buộc cho mọi dự án ở đây)
- Màn hình: 2.8" IPS, 320×240, driver ST7789V, SPI
- Cảm ứng: GT911 điện dung, theo dõi 5 ngón tay cùng lúc
- Camera: OV3660, 3 megapixel, lên đến 2048×1536
- Micro: hai micro kỹ thuật số I2S INMP441 (một cặp stereo thực sự)
- Loa: bộ khuếch đại class-D MAX98357A, 3.2 W vào 4 Ω
- Lưu trữ: khe thẻ microSD (chế độ SPI)
- Nguồn: USB-C, đầu nối pin JST, bộ sạc TP4056, công tắc nguồn
- Cũng trên bo mạch: đèn LED RGB WS2812B, đồng hồ thời gian thực PCF8563T có pin dự phòng, và bộ đo pin MAX17048 mà không được liệt kê trong thông số chính thức
USB CDC On Boot thành Disabled. Dùng sai cổng sẽ khiến âm thanh hoạt động sai hoặc tải lên thất bại.Đang cấp nguồn từ pin? Hai ổ cắm USB-C, bộ sạc TP4056 và công tắc nguồn được giải thích đầy đủ, kèm sơ đồ mạch, trong bài kiểm tra bo mạch — bao gồm ổ cắm nào sạc và công tắc nên bật hay tắt.
Cài đặt Arduino IDE
Những cài đặt này quan trọng. Hầu hết các vấn đề mọi người báo cáo với bo mạch này là một trong những cài đặt này sai, và chúng đặt lại khi bạn thay đổi phiên bản lõi, vì vậy hãy kiểm tra lại sau bất kỳ thay đổi nào.
| Cài đặt | Giá trị |
|---|---|
| Board | ESP32S3 Dev Module |
| Phiên bản lõi ESP32 | 2.0.17 |
| PSRAM | OPI PSRAM |
| Dung lượng Flash | 16MB (128Mb) |
| Sơ đồ phân vùng | 16M Flash (3MB APP/9.9MB FATFS) |
| USB CDC On Boot | Đã tắt |
| Tốc độ tải lên | 921600 |
| Xóa toàn bộ Flash trước khi tải lên | Đã tắt |
| Cổng | Cổng USB-C CH340K |
Nếu tải lên thất bại: đưa board vào chế độ tải xuống bằng tay
Hầu hết thời gian bạn chỉ cần nhấn Upload và nó hoạt động. Đôi khi nó không hoạt động - IDE dừng ở Connecting...... và sau đó bỏ cuộc với Failed to connect to ESP32-S3: No serial data received.
Điều đó xảy ra vì IO0 đảm nhận ba công việc cùng lúc trên board này: nó là nút BOOT, là đường tự động đặt lại từ CH340K, và là đường dữ liệu cho đèn LED RGB. Khi sketch đang chạy trên board điều khiển đèn LED đó, nó có thể xung đột với quá trình tự động đặt lại, vì vậy chip khởi động lại vào sketch cũ của bạn thay vì vào bootloader.
Cách khắc phục chỉ mất năm giây. Tự đưa nó vào chế độ tải xuống:
- Nhấn và giữ nút BOOT.
- Trong khi vẫn giữ BOOT, nhấn RESET và thả RESET ra.
- Bây giờ thả BOOT ra. Màn hình chuyển sang trắng - đó là bootloader đang chờ.
- Nhấp vào Upload.
- Khi hoàn tất, nhấn RESET một lần để chạy sketch mới.
Nếu vẫn không kết nối được, hãy giảm Upload Speed xuống 115200 và thử lại. Và kiểm tra công tắc nguồn của board đã bật chưa - CH340K vẫn liệt kê và cung cấp cổng COM ngay cả khi board đã tắt nguồn, điều này dễ đánh lừa mọi người.
Thư viện bắt buộc
Dự án này cần mọi thư viện trong bảng dưới đây - không hơn, không kém. Hầu hết cài đặt trực tiếp từ Tools → Manage Libraries trong Arduino IDE, nhưng GFX Library for Arduino phải được cài đặt từ tệp ZIP. Số phiên bản rất quan trọng, vì vậy vui lòng sử dụng chính xác các phiên bản được liệt kê.
| Thư viện | Phiên bản | Tác giả | Cài đặt từ |
|---|---|---|---|
| GFX Library for Arduino | 1.5.6 | moononournation | Tệp ZIP - xem bên dưới |
| bb_captouch | 1.3.1 | Larry Bank | Library Manager |
| Adafruit NeoPixel | bất kỳ bản mới nào | Adafruit | Library Manager |
Cài đặt thư viện GFX từ tệp ZIP
- Tải xuống tệp ZIP. Nó được bao gồm trong bản tải xuống của dự án này, hoặc bạn có thể lấy từ kho lưu trữ Arduino_GFX - nhấp vào nút Code màu xanh lá cây, sau đó Download ZIP.
- Lưu nó ở nơi bạn có thể tìm lại được. Không giải nén nó.
- Trong Arduino IDE, nhấp vào Sketch → Include Library → Add .ZIP Library.
- Duyệt đến tệp ZIP bạn đã tải xuống và nhấp vào Open.
- IDE sẽ cài đặt nó và xác nhận ở cuối cửa sổ. Nếu bạn đã cài đặt phiên bản 1.6, hãy xóa thư mục đó khỏi
Documents/Arduino/librariestrước, nếu không hai phiên bản sẽ xung đột.
Xử lý sự cố
| Triệu chứng | Nguyên nhân và cách khắc phục |
|---|---|
| Màn hình vẫn đen | Sai phiên bản thư viện GFX (sử dụng 1.5.6) hoặc sai cài đặt board. |
PSRAM alloc failed |
Tools → PSRAM chưa được đặt thành OPI PSRAM. |
| Không tải lên được / không có cổng COM | Sai cổng USB-C, hoặc trình điều khiển CH340 chưa được cài đặt. |
Tài nguyên & tài liệu tham khảo
Chưa có tài nguyên nào.
Tập tin📁
Không có tệp nào khả dụng.