Lưu trữ website trên thuốc lá điện tử dùng một lần
(bogdanthegeek.github.io)- Một dự án thử nghiệm chạy web server bằng cách tận dụng vi điều khiển ARM Cortex-M0+ hiệu năng thấp tích hợp trong thuốc lá điện tử dùng một lần
- Phân tích chip PY32F002B của PUYA với 24KiB flash và 3KiB RAM, triển khai kết nối mạng theo kiểu SLIP
- Sử dụng Semihosting, giao thức SLIP và stack TCP/IP uIP để port chức năng HTTP server cùng giao tiếp TCP/IP qua tty ảo
- Ban đầu rất chậm, nhưng sau khi tối ưu bộ đệm và cải thiện xử lý dữ liệu thì tốc độ phản hồi và tải trang được cải thiện đáng kể
- Hiện thực cả việc chạy mã máy chủ động và cung cấp endpoint API ngay cả trong môi trường bộ nhớ cực thấp
- Mã nguồn đã được phát hành, có thể lưu trữ thực tế nhưng bị giới hạn lớn về tài nguyên như bộ nhớ
Mở đầu
- Trước hết, bài viết này nói rõ rằng nội dung không thực sự được phục vụ trực tiếp từ web server chạy trên thuốc lá điện tử dùng một lần, mà cùng nội dung đó đang được cung cấp từ một máy chủ riêng biệt
- Có thể xem ví dụ hoạt động thực tế tại http://ewaste.fka.wtf/
Bối cảnh
- Trong vài năm qua, tác giả đã thu thập thuốc lá điện tử dùng một lần từ người quen với mục đích tái sử dụng pin
- Gần đây, tác giả chú ý đến việc các thiết bị thuốc lá điện tử dùng một lần ngày càng được nâng cấp, bắt đầu có USB-C và pin sạc lại
- Trong lúc tháo dỡ, tác giả phát hiện một vi điều khiển ARM Cortex-M0+ tích hợp flash mang tên PUYA, vốn là dòng chip nổi tiếng ở phân khúc vi điều khiển giá rẻ
- Tác giả đã thu thập các vi điều khiển này từ nhiều mẫu khác nhau, và việc chúng có nhãn chân debug giúp phân tích dễ dàng hơn
Phần cứng sử dụng
- Ký hiệu trên chip là
PUYA C642F15, nhưng được suy đoán thực tế thuộc họ PY32F002B - Thông số chính:
- Nhân Cortex-M0+ 24MHz
- 24KiB flash
- 3KiB RAM
- Có nhiều thiết bị ngoại vi nhưng không dùng trong dự án này
- So với smartphone thông thường thì hiệu năng thấp, nhưng trong môi trường nhúng vẫn hoàn toàn có thể xây dựng web server đơn giản
Kết nối mạng
- Dù không phải là ý tưởng đầu tiên, tác giả đã nảy ra ý tưởng chạy web server khi thử nghiệm khái niệm semihosting
- Semihosting là một cách mô phỏng syscall trên ARM nhúng
- Khi đặt giá trị/con trỏ vào thanh ghi rồi gọi breakpoint, debugger sẽ diễn giải và xử lý hành động tương ứng
- Thông thường nó được dùng để gửi log, nhưng cũng có thể giao tiếp dữ liệu hai chiều
- Các thiết bị serial USB hỗ trợ giao thức SLIP (Serial Line Internet Protocol), nên tác giả tận dụng nó như một giao diện mạng
- Trên Linux (và một phần macOS), có thể dựng môi trường mạng SLIP qua tty ảo bằng
slattach,socatvà các công cụ tương tựpyocd gdb -S -O semihost_console_type=telnet -T $(PORT) $(PYOCDFLAGS) & socat PTY,link=$(TTY),raw,echo=0 TCP:localhost:$(PORT),nodelay & sudo slattach -L -p slip -s 115200 $(TTY) & sudo ip addr add 192.168.190.1 peer 192.168.190.2/24 dev sl0 sudo ip link set mtu 1500 up dev sl0 - Tác giả chọn uIP làm stack TCP/IP vì nó rất nhỏ gọn, không cần RTOS và dễ port
- Từ ví dụ HTTP server của uIP, tác giả đã port phần mã SLIP cho phù hợp với semihosting và khởi động web server thành công
- Do có vấn đề căn chỉnh 16-bit trên kiến trúc ARM, tác giả đã chỉnh sửa script tạo filesystem và chuyển đổi xử lý bằng Perl
Tối ưu tốc độ
- Ở trạng thái ban đầu, hệ thống cho ping 1,5 giây, mất gói 50%, và tải trang mất hơn 20 giây nên phản hồi cực kỳ chậm
- Nguyên nhân là do overhead rất lớn của I/O theo từng byte
- Tận dụng tối đa 3KiB RAM, tác giả thêm ring buffer và cải thiện cấu trúc để cấp dữ liệu theo lô cho các hàm SLIP
- Ghi dữ liệu cũng được chia lô để xử lý truyền tải, giúp dọn dẹp nhanh hơn
- Sau tối ưu, đạt được ping 20ms, không mất gói, tải trang 160ms
- Mức sử dụng tổng RAM và flash:
- Flash: 5.116B trên 24KB (20,82%)
- RAM: 1.380B trên 3KB (44,92%)
- Dung lượng này đủ để phục vụ toàn bộ nội dung blog mà không gặp khó khăn, đồng thời cũng có thể chạy mã C phía máy chủ
Các chức năng khác và phần kết
- Tác giả tự triển khai endpoint API, trả về số lần yêu cầu trang chính và unique ID của vi điều khiển
- Đây là một thử nghiệm hiện thực cả web server động lẫn API với phần cứng cấu hình cực thấp và lượng bộ nhớ tối thiểu
6 bình luận
Tôi rất thích dự án và bài viết này. Nhưng tôi đã rất sốc khi biết là có cả thuốc lá điện tử dùng một lần, và cảm thấy chuyện này thật sự không ổn.
Tôi cũng không hút thuốc nên trước đây không biết, nhưng cách đây không lâu tôi mới nhận ra điều này khi thấy một máy bán thuốc lá điện tử dùng một lần trong quán cà phê tự phục vụ mới mở ở khu tôi. Có vẻ như một nửa các bình luận trên Hacker News bên dưới cũng nói về sự lãng phí tài nguyên vô lý này. haha
Nghĩ lại sau khi để lại bình luận, tôi thấy tò mò không biết nếu ở quán cà phê không người phục vụ mà là kiểu máy bán hàng tự động thì việc xác thực người trưởng thành được thực hiện như thế nào. Có phải máy bán hàng tự động cũng có chức năng nhận diện giấy tờ tùy thân không nhỉ..
Tôi không hút thuốc nên lúc đầu không hiểu đang nói gì, nhưng ý là dù là đồ dùng một lần mà lại tiêu tốn quá nhiều tài nguyên.
Khi đang hút thuốc lá điện tử mà để quên đâu đó, hoặc đang đi du lịch...
Nếu phải mua thêm một thiết bị nữa hay quay lại hút thuốc lá thường thì cũng không ổn, nhưng vẫn muốn nạp nicotine, nên cuối cùng lại tìm đến cửa hàng tiện lợi.
Ý kiến trên Hacker News
Nếu đang tìm phần cứng rẻ mà mạnh, thì dongle UZ801 4G LTE (Qualcomm MSM8916) của Trung Quốc cũng rất đáng xem. Thiết bị này chỉ khoảng $4~5 nhưng có phần cứng khá ấn tượng: 4GB eMMC, 512MB RAM, modem 4G thật sự, thậm chí đôi khi hỗ trợ chuyển đổi 2 SIM. Về cơ bản đây là một SoC Android đời cũ nên còn có cả GPU và GPS. Hiện cũng đã có khá nhiều công việc hỗ trợ cho dongle này
Thông tin về dongle LTE dòng Zhihe
Dự án OpenStick
Nếu đang tìm một nền tảng phần cứng cho các dự án homelab khác thường kiểu này thì đây là lựa chọn phù hợp
Với người mới bắt đầu thì hướng dẫn này có vẻ là tốt nhất. Để cài Linux, bạn cần sao lưu phân vùng firmware rồi flash lại thì modem 4G mới hoạt động. Thật khó tin là chỉ với 5 đô lại mua được nhiều phần cứng đến vậy. Thêm một cục pin dự phòng vào, hoặc tự làm từ pin của thuốc lá điện tử bỏ đi, là bạn sẽ có một máy Linux hỗ trợ WiFi và 4G có thể dùng ở bất cứ đâu
Nếu cần link về các SoC dạng này hay sản phẩm tương tự, Hackaday có một bài riêng kèm nhiều liên kết khác nhau
Bài viết trên Hackaday
Ví dụ MSM8916 trên AliExpress
Tôi còn thấy cả một dongle MSM8916 có màn hình tích hợp sẵn, dù không có thông tin về RAM
Nghe nhắc tới Qualcomm MSM8916 thấy thân quen ghê. Đây chính là người bạn cũ Snapdragon 410 của tôi. Moto G3 đời 2015 cũng dùng con này, tôi vẫn thỉnh thoảng dùng để chạy WhatsApp. Trên nền Android (bản 7), nếu không làm việc nặng thì nó vẫn chạy khá hiệu quả, trái với dự đoán. Tôi thấy ấn tượng khi những chipset di động cũ như vậy vẫn còn được hỗ trợ đầy sức sống.
Nhân tiện, một chi tiết thú vị là đây từng là một trong những bộ xử lý đầu tiên hỗ trợ Android 64-bit, nhưng Motorola không kịp port trước khi phát hành nên máy chỉ hỗ trợ Android 32-bit
Tôi nhớ đến chiếc dongle LTE chạy Linux mà Freedom Pop từng phát miễn phí. Mở ra còn có thể truy cập UART
Vấn đề lớn nhất của tôi là
a.) thế giới điện tử tiến hóa quá nhanh
b.) tôi không đủ kỹ năng và thời gian để làm ra thứ gì ngầu từ mấy món này
Trước đây tôi từng mua một licheerv nano, kiểu tương tự luckfox pico hay Milk-v duo, để định làm một chiếc iPod nano mã nguồn mở có jack âm thanh usb-c.
Nhưng tôi không tìm được màn hình cảm ứng 2.4 inch, hay nhỏ hơn 3 inch, nào tương thích với cổng MPI của licheerv nano.
Có lẽ tôi đã có thể làm một máy phát nhạc nhỏ gọn, di động bằng LVGL, nhưng việc đó vượt quá khả năng của tôi
Việc tái sử dụng những loại thiết bị này thật sự rất ngầu. Nếu một ngày nào đó cả thành phố vận hành bằng cách ghép những thiết bị như thế này lại với nhau, thì tôi hình dung ra một khung cảnh như trong phim hậu tận thế.
Mặt khác, xét đến việc thuốc lá điện tử dùng một lần giờ không chỉ có vi điều khiển mà theo các tin tức gần đây còn có cả game và màn hình, thì đây là một lượng rác thải điện tử khổng lồ. Nhiều tầng ngớ ngẩn chồng lên nhau
Một ví dụ khác là bộ test COVID dùng một lần. Nó có vi điều khiển và cảm biến quang học, rồi dùng Bluetooth để hiển thị kết quả trên điện thoại. Chủ đề này cũng từng được bàn trong cuộc thảo luận trước ở đây
Tôi vốn đã biết rất rõ về những cục pin lithium hoàn toàn có thể tái sử dụng bên trong thuốc lá điện tử dùng một lần. Chỉ riêng điều đó thôi đã là một sự lãng phí nghiêm trọng.
Nhưng giờ còn có cả vi điều khiển và đầu nối USB-C nữa! Tôi tò mò không biết đầu nối đó có thể truy cập từ bên ngoài hay phải phá vỏ mới chạm tới được.
Thật đúng là nhiều tầng ngớ ngẩn. Giá trị phần cứng bên trong chắc phải chiếm hơn nửa giá bán sản phẩm
Tôi tự hỏi liệu thuốc lá điện tử dùng một lần có thật sự là rác thải điện tử nghiêm trọng đến thế không. Trong điện thoại, ô tô, laptop và vô số thứ khác chúng ta vứt đi cũng có rất nhiều phần cứng còn tái sử dụng được, và nhìn chung việc xử lý chúng cũng chẳng khá hơn. Thậm chí tôi còn tưởng tượng rằng nếu phần cứng của thuốc lá điện tử được tiêu chuẩn hóa ở một mức nào đó thì biết đâu lại dùng được cho các dự án ở trường như Arduino
Những câu chuyện kiểu này làm tôi nhớ tới duskOS và collapseOS
Chỉ riêng việc mấy sản phẩm như thế này được phép bán ra cũng đã là bằng chứng cho thấy quy định còn quá lỏng lẻo
Sự lệch pha về thông số với máy tính đời cũ thật thú vị. Ví dụ, Commodore 64 dùng 64KB RAM nối với CPU 8-bit 1MHz. Thế mà giờ ngay cả một thiết bị dùng một lần với chưa đến một nửa số RAM đó cũng được nối với CPU 32-bit 24MHz. Những thứ không ai có thể tưởng tượng nổi vào thập niên 1980 giờ lại xuất hiện như đồ dùng một lần trong năm 2025. Kỳ lạ mà ấn tượng
Thực ra RAM là 3KB, còn flash là 24KB. Tất nhiên tốc độ flash đôi khi cũng tương đương bộ nhớ đời cũ, nhưng độ trễ thì không thể so sánh được
Chỉ có 3KB RAM thôi, còn ít hơn cả VIC-20 ngày trước
CPU xét theo tiêu chuẩn thập niên 1980 cũng không hẳn là quá thần kỳ. Năm 1987, Acorn Archimedes đã có bộ xử lý ARM 8MHz, dù đắt nhưng đi kèm ít nhất 512KB RAM
(nhân tiện, tôi vẫn đang sốc vì năm 1987 giờ đã là 38 năm trước)
Tôi rất vui khi thấy được mức độ hữu ích của những thiết bị như thế này. Gọi những sản phẩm này là "dùng một lần" quả là một kiểu điên rồ. Tôi từng nhặt pin LiPo từ những chiếc thuốc lá điện tử bị vứt ven đường để dùng, và đó đều là pin sạc lại được có tích hợp cả mạch sạc, chứ không phải loại đơn giản. Việc thiết kế chúng để chỉ dùng một lần rồi vứt đi là một xu hướng cực kỳ sai lầm.
Đây gần như là đỉnh cao của tính "không thể sửa chữa". Nó được thiết kế để ngăn việc tái sử dụng và sạc lại, đi ngược cả tinh thần thân thiện môi trường lẫn tinh thần maker
Cũng có thuốc lá điện tử tái sử dụng, và những cửa hàng đáng tin cậy chỉ bán loại đó. Nhưng chúng đắt hơn nhiều so với thuốc lá điện tử dùng một lần. Vì thế hàng dùng một lần lại được dân buôn lậu hay trẻ vị thành niên ưa chuộng hơn, do giá rẻ và rủi ro bị tịch thu.
Kết quả là người trẻ bị đẩy vào tiếp xúc với các tổ chức tội phạm, và ngay cả khi không có tiền cũng vẫn có thể mắc nợ họ. Hệ quả chẳng khác gì nợ ma túy. Khoản nợ đó còn có thể bị lợi dụng để kéo họ vào những tội ác khác
Tôi từng xem một video rất ấn tượng về một người làm pin xe đạp điện từ những chiếc thuốc lá điện tử dùng một lần thu gom ở lễ hội âm nhạc
Video liên quan
Tôi không hiểu nổi vì sao thuốc lá điện tử dùng một lần lại hợp pháp. Tôi từng nghĩ các thế hệ sau thế hệ 386 sẽ thực sự quan tâm đến việc lãng phí tài nguyên, nên thấy khá thất vọng
Chắc chắn sẽ có ngày xuất hiện một luật sư phải giải thích vì sao thứ có USB C và pin sạc lại vẫn bị xếp là "dùng một lần"
Thực ra lý do nó được làm theo kiểu này là vì về mặt kỹ thuật nó có thể tái sử dụng, nhờ đó vẫn bán được ở những nơi cấm thuốc lá điện tử dùng một lần.
Đây là kiểu bán hàng cố tình nhắm vào một nhóm người dùng sẽ tiếp tục mua đi mua lại rồi vứt đi
Tôi không hiểu vì sao người ta lại mua loại dùng một lần khi đã có thuốc lá điện tử tái sử dụng hoàn toàn. Thành thật mà nói, tôi chỉ thấy nó có ý nghĩa nếu dùng như một công cụ để cai thói quen hút thuốc
Cũng giống như quy định về túi nilon khiến người ta bán loại nilon dày hơn với giá 10 xu. Dù sao thì trên danh nghĩa đó vẫn là loại "tái sử dụng được"
Một số sản phẩm có pod hoặc tank thay thế được, nhưng đa số thì hoàn toàn không có bộ phận nào để người dùng can thiệp. Khi tinh dầu vơi đi đến một mức nào đó thì cuộn đốt bắt đầu cháy khét và toàn bộ thiết bị bị vứt bỏ. Có một cửa hàng nói rằng họ thu hồi đồ đã dùng để tháo dỡ và xử lý đúng cách, nhưng có vẻ phần lớn người dùng chỉ quẳng chúng vào rác sinh hoạt thông thường
Lý do có USB C là vì pin không đủ dung lượng so với lượng tinh dầu chứa trong sản phẩm. Thành ra bạn có thể sạc đầy lại 2~3 lần trước khi tinh dầu cạn hẳn
Thuốc lá điện tử dùng một lần là hiện tượng mà tôi không thể hiểu nổi xã hội đã bình thường hóa nó bằng cách nào
Xã hội thường có xu hướng xem những thứ có ngân sách quảng cáo là bình thường
Cũng không thể bỏ qua việc chúng có thể gây tổn hại cực lớn cho phổi người trong thời gian rất ngắn
Đồ chuẩn bị cho ngày tận thế: đạn dược, đồ hộp, nước uống? Không.
Mà là 1.200 chiếc geek bar đặt trong lồng Faraday
Hoan hô tinh thần hack! Tôi nghĩ đây chính là kiểu nội dung mà Hacker News tồn tại vì nó. Bài viết tuyệt vời và dự án cũng rất thú vị
Tình hình công nghệ hiện nay thật sự rất kỳ quặc. AI không thay chúng ta làm việc mà lại đi vẽ tranh, còn bây giờ thì người ta host website trên thuốc lá điện tử. Từ duy nhất tôi nghĩ ra để mô tả tình huống này là "kỳ quặc"
Có thể nói tác giả đã tìm được nền tảng điện toán tối thượng để chạy "vaporware" theo đúng nghĩa đen