Ubah Lampu Dinding LED OBEGRÄNSAD Anda menjadi kanvas gambar hidup
Perangkat lunak ini masih dalam tahap awal dan merupakan perangkat lunak pertama saya. Jika Anda memiliki sesuatu untuk ditingkatkan, saya akan sangat senang jika ada PR atau masalah :)
Gunakan kode dan instruksi ini dengan risiko Anda sendiri! Perangkat bisa rusak!
Anda dapat mengontrol lampu dengan GUI web yang disediakan. Anda bisa mendapatkan IP melalui output serial atau Anda dapat mencarinya di pengaturan router Anda.
Pertama. Perangkat lunak ini ditulis untuk Papan Pengembang ESP32, tetapi juga dapat digunakan dengan papan Arduino lainnya. Anda hanya perlu menghapus kode terkait WiFi, OTA, dan server web.
ESP32 yang saya gunakan:
Diverifikasi untuk bekerja dengan TTGO LoRa32 V2.1 (T3_V1.6.1). Catatan: Pada esp8266 kecerahan per piksel hanya berfungsi ketika penyimpanan dan kecerahan global (analogWrite) dinonaktifkan.
Saya minta maaf untuk mengatakan ini, tetapi Anda harus membuka bagian belakang Lampu Anda, karena IKEA tidak memasang sekrup biasa di sini. Saya mengangkat bagian belakang dengan obeng di antara sekrup dan membukanya dengan benda kedua, tetapi Anda juga dapat mengebor paku keling untuk menghindari pecahnya panel belakang.
Setelah Anda membuka bagian belakangnya, Anda akan melihat 4 piring identik. Masing-masing dilengkapi dengan 64 LED di 4 bidang. Kami hanya tertarik pada yang terendah. Di sini Anda akan menemukan 6 konektor di tepi bawah, yang kami sambungkan ke papan kami. Di atas adalah mikrokontroler. Anda harus menghapusnya, karena berisi program standar.
Variabel dapat ditemukan di dalam include/constants.h
.
include/secrets.h
# pragma once
# define WIFI_HOSTNAME " "
# ifdef ESP8266
# define WIFI_SSID " "
# define WIFI_PASSWORD " "
# endif
# define OTA_USERNAME " "
# define OTA_PASSWORD " "
atur juga nama pengguna dan kata sandi di dalam upload.py
, jika Anda ingin menggunakan Pembaruan OTA.
Catatan: Manajer WiFi hanya berfungsi di ESP32. Untuk ESP8266, WIFI_SSID
dan WIFI_PASSWORD
perlu disediakan di secrets.h
.
Proyek ini menggunakan WiFiManager tzapu. Setelah boot, perangkat akan mencoba menyambung ke titik akses yang dikenal. Jika tidak ada titik akses yang diketahui tersedia, perangkat akan membuat jaringan yang disebut Ikea Display Setup WiFi
. Hubungkan ke jaringan ini di perangkat apa pun. Portal captive akan muncul dan membawa Anda melalui proses konfigurasi. Setelah koneksi berhasil, perangkat akan reboot dan siap digunakan.
Nama jaringan yang dibuat dapat diubah dengan memodifikasi WIFI_MANAGER_SSID
di include/constants.h
.
Hubungkan mereka seperti ini dan ingat untuk mengaturnya di include/constants.h
sesuai dengan papan Anda.
LCD | ESP32 | TTGO LoRa32 | NodeMCUv2 | Lolin D32 (Pro) |
---|---|---|---|---|
GND | GND | GND | GND | GND |
VCC | 5V | 5V | VIN | USB |
EN (PIN_ENABLE) | GPIO26 | IO22 | GPIO16 D0 | GPIO26 |
DALAM (PIN_DATA) | GPIO27 | IO23 | GPIO13 D7 | GPIO27 |
CLK (PIN_CLOCK) | GPIO14 | IO02 | GPIO14 D5 | GPIO14 |
PKB (PIN_LATCH) | GPIO12 | IO15 | GPIO0 D3 | GPIO12 |
TOMBOL salah satu ujungnya | GPIO16 | IO21 | GPIO2 D4 | GPIO25 |
TOMBOL ujung lainnya | GND | GND | GND | GND |
Terima kasih kepada RBEGamer yang dalam edisi ini menunjukkan cara menggunakan kabel tombol asli. Dengan solusi ini Anda tidak memerlukan penyolderan "BUTTON one end" dan "BUTTON other end" dari tabel di atas.
src
berisi kode arduino.
platformio.ini
jika Anda mau. Ganti IP dengan IP perangkat Anda. frontend
berisi kode web.
npm i
.env
npm run dev
npm run build
. Perintah ini membuat webgui.cpp
untuk Anda. Bangun frontend menggunakan Docker
docker compose run node
plugin/MyPlugin.h
# pragma once
# include " PluginManager.h "
class MyPlugin : public Plugin {
public:
MyPlugin ();
~MyPlugin () override ;
void setup () override ;
void loop () override ;
const char * getName () const override ;
void teardown () override ; // optional
void websocketHook (DynamicJsonDocument &request) override ; // optional
};
plugin/MyPlugin.cpp
# include " plugins/MyPlugin.h "
MyPlugin::MyPlugin () {
// Constructor logic, if needed
}
void MyPlugin::setup () {
// Setup logic for your plugin
}
void MyPlugin::loop () {
// Loop logic for your plugin
}
const char * MyPlugin::getName () const {
return " MyPlugin " ; // name in GUI
}
void MyPlugin::teardown () {
// code if plugin gets deactivated
}
void MyPlugin::websocketHook (DynamicJsonDocument &request) {
// handle websocket requests
}
main.cpp
. # include " plugins/MyPlugin.h "
pluginManager.addPlugin( new MyPlugin());
Anda dapat mengatur panel ke DDP menggunakan tombol atau melalui antarmuka web. Protokol ini menggunakan UDP dan mendengarkan pada Port 4048 .
Layanan Tampilan LED menyediakan antarmuka eksternal sederhana namun kuat yang memungkinkan pengguna menampilkan pesan dan grafik pada layar LED 16x16. Fungsionalitas ini dapat diakses melalui panggilan HTTP ke titik akhir layanan.
Untuk menampilkan pesan pada tampilan LED, pengguna dapat membuat permintaan HTTP GET ke titik akhir berikut:
http://your-server/api/message
text
(opsional): Pesan teks yang akan ditampilkan pada layar LED.graph
(opsional): Daftar bilangan bulat yang dipisahkan koma yang mewakili grafik. Nilainya harus berada dalam rentang 0 hingga 15 dan akan divisualisasikan sebagai grafik pada tampilan LED.miny
(opsional): penskalaan untuk ujung bawah grafik, defaultnya adalah 0maxy
(opsional): penskalaan untuk ujung atas grafik, defaultnya adalah 15repeat
(opsional): Berapa kali pesan harus diulang. Jika tidak disediakan, nilai defaultnya adalah 1. Tetapkan nilai ini ke -1 untuk mengulang tanpa batas. Saat pesan menunggu untuk ditampilkan, led indikator di sudut kiri atas akan berkedip.id
(opsional): Pengidentifikasi unik untuk pesan tersebut. Ini dapat digunakan untuk penghapusan atau modifikasi pesan di kemudian hari.delay
(opsional): Jumlah penundaan ms antara setiap gerakan gulir. Standarnya adalah 50 ms. GET http://your-server/api/message?text=Hello&graph=8,5,2,1,0,0,1,4,7,10,13,14,15,15,14,11&repeat=3&id=1&delay=60
Contoh ini akan menampilkan pesan "Halo" pada tampilan LED dengan grafik yang sesuai, ulangi tiga kali, dan tetapkan pengidentifikasi 1, tunggu 60 ms sambil menggulir.
Untuk menghapus pesan dari tampilan, pengguna dapat membuat permintaan HTTP GET ke titik akhir berikut:
http://your-server/api/removemessage
id
(wajib): Pengidentifikasi unik dari pesan yang akan dihapus. GET http://your-server/api/removemessage?id=1
Contoh ini akan menghapus pesan dengan pengidentifikasi 1 dari tampilan LED.
Untuk mengambil status server saat ini.
GET http://your-server/api/status
Untuk mendapatkan metadata (tetap), seperti jumlah baris dan kolom serta daftar plugin yang tersedia.
GET http://your-server/api/metadata
Untuk mengatur plugin aktif berdasarkan ID, buat permintaan HTTP PATCH ke titik akhir berikut:
PATCH http://your-server/api/plugin
id
(wajib): ID plugin yang akan ditetapkan sebagai aktif.200 OK
dengan pesan "Plugin Set".404 Not Found
dengan pesan "Plugin tidak ditemukan". Untuk mengatur kecerahan tampilan LED, buat permintaan HTTP GET ke titik akhir berikut:
PATCH http://your-server/api/brightness
value
(wajib): Nilai kecerahan (0..255).200 OK
dengan pesan “Ok”.404 Not Found
dengan pesan "Nilai Kecerahan Tidak Valid". Untuk mendapatkan data yang ditampilkan saat ini sebagai array byte, setiap byte mewakili nilai kecerahan. Perlu diketahui bahwa nilai kecerahan global diterapkan SETELAH nilai ini, jadi jika Anda menyetel kecerahan global ke 16, Anda masih akan mendapatkan nilai 255 dengan cara ini.
GET http://your-server/api/data