Lắp đèn LED cho bể cá cảnh (lần đầu thử NeoPixel và ESP8266)
Dù dự định từ lâu nhưng cho mãi tới kỳ nghỉ 2/9 năm nay và do vợ lèo nhèo quá nhức cả đầu nên tôi mới bắt tay vào làm một cái đèn LED cho bể cá cảnh. Tất cả các thứ cần thiết đều mua đủ từ lâu rồi, chỉ là mãi không bắt tay vào làm :D. Bởi vì hai tiêu chí đặt ra từ đầu là có thể hẹn giờ bật/tắt đèn và có thể trình diễn nhiều hiệu ứng ánh sáng khác nhau cho vui thế nên đèn LED là loại NeoPixel mà không phải là loại LED dây nào khác (đã mua 1 mét LED WS2812B). Sử dụng NeoPixel sẽ đáp ứng cả hai tiêu chí trên và cũng đơn giản hơn một chút, tắt thì cho brightness = 0 thay vì phải xài thêm một relay để tắt nguồn, và tất nhiên là nó thể hiện được đủ loại màu sắc.
Mission failed với Pico
Để cho đơn giản và vì cũng không cần connect đi đâu cả nên tôi xài một cái Raspberry Pi Pico (trước đã mua những hai cái về nghịch, rẻ mà). Cứ đụng tới coding là luôn có chuyện xảy ra ngoài dự kiến (unexpected) dù với những việc tưởng dễ như ăn kẹo, thế mới bực. Chuyện set màu cho mỗi cái pixel đơn giản chỉ là hai LOC, set color value and write, ấy thế mà không hiểu sao màu sắc cứ loạn xạ cả lên, thứ nhất là không ra ánh sáng đúng màu mình muốn, thứ hai là set màu cho pixel #3 mà lại làm đổi màu cả pixel #4, loay hoay mãi không hiểu ra làm sao cả dù cũng tìm ra quy luật nó chạy sai :D. Cuối cùng phải đi mạch đúng như hướng dẫn, nguồn ngoài, có trở có tụ đàng hoàng thì boom, tự nhiên nó lại chạy đúng, mà code thì rõ là đơn giản chứ có gì lằng nhằng cho cam. Nhiều lúc “ngu bất thình lình” là có thật.
Màu sắc thì chưa có nhưng trước tiên test hẹn giờ bật/tắt thì ngon, nhưng khi bỏ ra chạy riêng (headless operation) thì lại tèo. Lại loay hoay google coi còn cái gì đó mà mình chưa biết đây, ối trời ơi, lúc chạy interactive mode thì nó lấy giờ từ computer nên không để ý, cái Pico này nó không có RTC thì làm sao mà nó biết đang là mấy giờ mà hẹn hò gì nữa! Thôi dẹp Pico cho khỏe.
Mission success với ESP8266
Giờ mới là lúc cần tới một board ESP8266 NodeMCU, may là tôi cũng có sẵn một cái. Cái dở đầu tiên của cái board ESP8266 là nó có chiều rộng vừa hết cái breadboard, thế là phải cắt mấy mẩu dây điện để nối thay vì xài jumper như bình thường. Giờ mới thấy là có Wi-Fi thật tiện, connect dễ dàng và update local time bằng một dòng code gọi NTP là xong. Để flash MicroPython lên một cái board NodeMCU thì hơi nhì nhằng một chút nhưng bạn chịu khó làm đúng theo chỉ dẫn thì cũng được luôn, sẵn tôi note luôn ở đây cho ai còn chưa biết.
Đèn sáng, hẹn giờ bật đúng, tắt thì sai vì nó lại thành bật tắt liên tục vì có một cái bug (giờ thì fixed). Cứ code là có bug hehehe. Tạm thế đã, từ từ rồi thêm cái hiệu ứng màu sắc (cho bọn cá nhảy disco luôn :D), và làm một cái box đựng cái board cho gọn.
Tuy vậy cái NeoPixel này chạy rất phập phù, có lúc nó cứ đần ra không chịu sáng đèn gì cả, tôi cũng chịu không biết tại sao. Đèn LED thì tôi cắt một đoạn 20 pixels, giá treo đèn thì lấy luôn mấy cái beam Technic sẵn có lắp vào vừa đẹp luôn (LEGO hay ở chỗ đó).
P.S. Phiên bản Pico W mới ra mắt gần đây thì có cả Wi-Fi tuy nhiên luôn trong tình trạng out of stock toàn cầu.
Code on Github with ❤️