2 điểm bởi GN⁺ 2023-11-14 | 1 bình luận | Chia sẻ qua WhatsApp
  • Sau khi hợp đồng với Bluefox, đơn vị từng cung cấp dữ liệu mức độ đông đúc của căng tin, không còn nữa, tác giả đã tự tạo một thiết bị đo xu hướng hiện diện trong khuôn viên bằng số lượng thiết bị nhìn thấy trong các gói quảng bá BLE
  • Trong thử nghiệm bằng laptop, số lượng thiết bị BLE biến động nhanh cùng với mức độ đông đúc thực tế trong không gian nhỏ; ngay cả ở căng tin lớn, nó cũng khớp tốt với thay đổi xu hướng vào các khoảng thời gian di chuyển trước và sau giờ học
  • Raspberry Pi Zero W trở nên khó dùng làm thiết bị triển khai do Linux Bluetooth, DBus, cross-compile và thiết lập Wi-Fi headless, nên hướng đi được chuyển sang ESP32 đơn giản hơn
  • Bo mạch ESP32-WROOM giá rẻ không ổn định do vấn đề bộ nhớ khi ở gần khoảng 250–400 thiết bị, nhưng Seeed Studio XIAO ESP32C3/S3 hoạt động ổn định trong thời gian dài và chịu được việc phát hiện tối đa khoảng 1000 thiết bị
  • Cấu hình cuối cùng là ESP32 quét số lượng thiết bị BLE rồi gửi đến Cloudflare Functions và D1, sau đó trực quan hóa và dự báo bằng Grafana·NeuralProphet; việc hiệu chỉnh độ chính xác và kiểm chứng quyền riêng tư vẫn còn phải làm

Dữ liệu mức độ đông đúc của căng tin đã biến mất

  • Khi tác giả học năm nhất đại học, đơn vị vận hành căng tin là Sodexo, và Sodexo ký hợp đồng với Bluefox để dùng cảm biến hiện diện hiển thị số người trong căng tin
  • Theo tài liệu nhận được qua yêu cầu FOIA, thiết bị Bluefox hoạt động bằng cách đếm địa chỉ MAC của smartphone trong các gói quảng bá Bluetooth
  • Khi nối các lệnh gọi API vào Grafana, có thể xem mức độ đông đúc của căng tin bằng biểu đồ thời gian thực, giúp tránh các khung giờ quá đông
  • Sau đó đơn vị vận hành căng tin đổi sang Aramark, và Aramark không ký hợp đồng thống kê số người hiện diện kiểu Bluefox, nên dữ liệu cũ biến mất

Dùng beacon BLE làm chỉ báo thay thế cho số người

  • Trọng tâm của dự án là kiểm tra xem số lượng beacon Bluetooth có thể thay thế số người thực tế và thời gian lưu lại tốt đến đâu
    • Một số người mang theo nhiều thiết bị như tai nghe, smartwatch, v.v.
    • Một số người có thể không mang thiết bị hoặc tắt Bluetooth trên điện thoại
  • Với ước tính thời gian lưu lại, các biến số là liệu có thể dùng mức biến động (churn) của địa chỉ MAC duy nhất hay không, và việc ngẫu nhiên hóa địa chỉ MAC của nhiều nhà sản xuất như Android và Apple ảnh hưởng thế nào
  • Cách tự nhiên nhất để gửi dữ liệu lên máy chủ trung tâm là Wi-Fi, nhưng không phải vị trí nào cũng có Wi-Fi dễ dùng
  • LoRa cũng có thể là một ứng viên tùy theo phân bố beacon, nhưng phạm vi thực tế phụ thuộc mạnh vào độ lợi ăng-ten và vị trí lắp đặt
  • Với lưu trữ dữ liệu, cần cân nhắc có dùng cơ sở dữ liệu chuỗi thời gian hay không; với dự báo xu hướng dài hạn, cũng cần xem có thể loại trừ các sự kiện đặc biệt như cuối tuần homecoming hay tuần thi cuối kỳ hay không

Kiểm chứng ban đầu bằng laptop

  • Thử nghiệm đầu tiên là đoạn mã đơn giản dùng adapter Bluetooth của laptop quét trong x giây, lặp lại mỗi y giây, rồi lưu vào cơ sở dữ liệu SQLite
  • Tác giả mang laptop đến nhiều địa điểm như căng tin, Chick-Fil-A, Starbucks và chờ để thu thập dữ liệu
  • Ở Starbucks, một không gian nhỏ đơn lẻ, số lượng thiết bị khá chính xác và ít nhất phản ánh nhanh xu hướng hiện diện
    • Khi có người đi vào, biểu đồ tăng nhanh
  • Ở không gian lớn như căng tin, không thể trực tiếp đếm tổng số người và cũng không chắc phạm vi của adapter Bluetooth, nhưng mức tăng vào khoảng thời gian mọi người đi ăn sau khi tan lớp khớp tốt với mức tăng số beacon phát hiện được

Vì sao hướng dùng Raspberry Pi Zero W bị chặn

  • Thiết bị đầu tiên được nghĩ đến để triển khai dài hạn là Raspberry Pi Zero W, nhỏ, rẻ, có Wi-Fi và Bluetooth
  • Tác giả định viết lại mã bằng Rust để xử lý các tình huống như khởi động lại, mất mạng, mất adapter
  • Quá trình xử lý Linux Bluetooth trong môi trường headless phức tạp hơn dự kiến rất nhiều
    • Binding DBus cần thiết lập liên quan đến cross-compile
    • Ngay cả Cross cũng không giải quyết được vấn đề
    • Sau nhiều cờ compiler, mất công sức với Makefile và thiết lập bridge QEMU, cuối cùng binary mới chạy được trên Pi
  • Tác giả đã triển khai cả kết nối Wi-Fi, cài thư viện cần thiết khi khởi động, đăng ký file thực thi làm service và tự động áp dụng cập nhật, nhưng sau khi boot thực tế thì nó không hoạt động đúng
  • Cách tiếp cận này phải ôm cả toàn bộ Linux kernel và rất nhiều bộ phận chuyển động, dù chức năng cần thiết chỉ là Wi-Fi và Bluetooth đáng tin cậy

Chuyển sang ESP32

  • Trên tài liệu, ESP32 là thiết bị có đủ Wi-Fi, Bluetooth, mức tiêu thụ điện thấp, giá thấp và kích thước nhỏ
  • Tác giả mua một bo mạch ESP32-WROOM-32 bất kỳ trên Amazon có màn hình OLED
    • Mục đích là hiển thị dữ liệu thời gian thực trên màn hình
  • Vì cho rằng hệ sinh thái Rust cho ESP32 vẫn chưa đủ chín, tác giả viết lại mã thu thập dữ liệu bằng C++
  • OLED được cho chạy với cấu hình SSD1306Wire display(0x3c, 5, 4);
  • Tác giả yêu cầu bộ phận IT của khuôn viên đưa địa chỉ MAC vào whitelist, đồng thời viết backend thu thập dữ liệu bằng Cloudflare Functions và cơ sở dữ liệu D1

Vấn đề bộ nhớ lộ ra trong lần triển khai đầu tiên

  • Thiết bị thu thập dữ liệu được lắp ở thư viện trong khuôn viên, và tác giả xác nhận dữ liệu đang đi vào từ laptop
  • Sau đó xuất hiện kết quả kỳ lạ như thể mọi người trong thư viện đều đã rời đi, nguyên nhân là cấu hình thấp của bo mạch ESP32 mua ngẫu nhiên
  • Thiết bị crash ở gần khoảng 250 thiết bị
    • Ban đầu tác giả nghi kết quả được lưu trong số 1 byte nên bị giới hạn ở khoảng 255
    • Kiểm tra bằng Serial.print cho thấy thiết bị crash ngẫu nhiên ở các vùng tương tự như 249, 265, nên không phải tràn số nguyên đơn giản
  • Trong lúc quét, kết quả được lưu đến cuối trong cấu trúc dữ liệu, khiến nhiều dữ liệu như cường độ tín hiệu, dịch vụ quảng bá, ID nhà sản xuất tích tụ và làm đầy RAM nhỏ
  • Giá trị thật sự cần chỉ là số thiết bị duy nhất, nên cấu trúc giữ toàn bộ kết quả quét là quá mức cần thiết

Hash set tự viết và giới hạn

  • Cách giải quyết là tự viết cấu trúc dữ liệu C++ để tạo một hash set nhỏ
  • Ở mỗi callback, địa chỉ MAC được đưa vào hash set, rồi cấu trúc kết quả tích hợp được xóa để giải phóng bộ nhớ
  • Cách này có nhược điểm là cấu trúc kết quả tích hợp mất dữ liệu dùng để kiểm tra trùng lặp, khiến callback phát sinh cho mọi gói quảng bá BLE
    • addToSet vẫn thực hiện kiểm tra trùng lặp trong hash set
    • Nhưng callback trùng lặp xảy ra hàng trăm lần, và cấu trúc kết quả liên tục được cấp phát·giải phóng, tạo ra heap churn
  • Dù vậy, tác giả cho rằng việc thường xuyên kiểm tra một hashmap có tối đa dưới 1000 mục vẫn tốt hơn bị nghẽn dung lượng ở mức tối đa 250 người

Chọn bo mạch ESP32 ổn định hơn

  • Trong kỳ nghỉ thu, tác giả thử kiểm tra dài hạn 5 ngày nhưng lại crash ở gần khoảng 400 thiết bị
  • Vấn đề xuất hiện sau khoảng 3 giờ sử dụng, và ngay cả khi thêm khởi động lại định kỳ, hiện tượng mỗi lần quét lập tức chỉ trả về 0 thiết bị vẫn xảy ra
  • Tác giả thử nhiều bo mạch
    • Seeed Studio XIAO ESP32S3/C3
    • WaveShare ESP32S3 Zero
    • ESP32-WROOM không thương hiệu with OLED
    • Orange Pi Zero W
    • Raspberry Pi Zero W
  • Bo mạch duy nhất hoạt động ổn định trong thời gian dài là XIAO ESP32C3/S3, và cả hai đều hoạt động ở mức chấp nhận được
  • Lựa chọn cuối cùng là XIAO ESP32C3
    • Tác giả thích việc nó dựa trên RISC-V
    • Nó rẻ hơn
  • Khi đổi sang bo mạch của nhà sản xuất tốt hơn, SRAM tăng lên, và số lần crash giảm ngay cả khi giữ cấu trúc dữ liệu kết quả mặc định thay vì hashmap tự viết
  • Tác giả không thấy dấu hiệu chậm đi khi phát hiện tối đa khoảng 1000 thiết bị, và có khả năng heap cùng callback churn cũng giảm

Mẫu di chuyển nhìn từ cửa sổ ký túc xá

  • Sau khi tìm được thiết bị ổn định, để dễ lặp lại triển khai, tác giả chuyển thiết bị đến cửa sổ phòng ký túc xá
  • Dữ liệu trong một ngày cho thấy các đỉnh vào những khung giờ đổi tiết
  • Dù thiết bị đặt ở ký túc xá, nó không chỉ đo chủ yếu cư dân ký túc xá
    • Nếu chỉ đo cư dân ký túc xá, dạng dự kiến là đạt cực đại vào sáng sớm rồi giảm dần khi ban ngày đến
    • Do vị trí hướng ra ngoài cửa sổ, thiết bị chủ yếu phát hiện sinh viên di chuyển đến hai tòa nhà học thuật gần đó
  • Đỉnh quanh 7:50 sáng trùng với thời điểm ngay trước các lớp 8 giờ ở Ewell Hall và Washington Hall
  • Các đỉnh 8:50, 9:50, 10:50 lần lượt khớp với thời gian di chuyển đến các lớp 9 giờ, 10 giờ, 11 giờ
  • Thiết bị có vẻ phù hợp để theo dõi xu hướng di chuyển của sinh viên xung quanh, và phạm vi ăng-ten dường như vươn đến Washington Hall khoảng 160ft, đến Ewell khoảng 100ft
  • Độ cao tầng 3 dường như cũng giúp tăng phạm vi phát hiện

Dự báo và các bài toán kiểm chứng còn lại

  • Dữ liệu thu thập có nhiều xu hướng theo giờ, ngày và tuần, nên rất phù hợp làm đối tượng dự báo chuỗi thời gian bằng công cụ như NeuralProphet
  • Sau khi thêm chức năng dự báo, hiện tại hệ thống dự báo tốt xu hướng theo ngày
  • Tác giả cho rằng các xu hướng dài hạn theo tuần, tháng, mùa sẽ hội tụ khi có đủ dữ liệu
  • Vẫn còn nhiều câu hỏi chưa được giải quyết
    • Số lượng beacon BLE thay thế số người thực tế tốt đến đâu
    • Liệu có thể tạo hệ số hiệu chỉnh kiểu x beacon xấp xỉ 0.7x người vì có người mang nhiều thiết bị hay không
    • Ở tòa nhà khoa học máy tính, tỷ lệ beacon so với số người sẽ cao vì có nhiều thiết bị, hay thấp vì nhiều người tắt Bluetooth
    • Các tòa nhà của nhân viên có tỷ lệ thấp hơn vì nhân viên mang ít thiết bị hơn sinh viên hay không
    • Căng tin có tỷ lệ thấp hơn vì ít trường hợp dùng kèm laptop·iPad như trong phòng học hay không
  • Cũng còn các cách để cải thiện độ chính xác
    • Thiết lập giá trị RSSI tối thiểu để loại bỏ tín hiệu yếu
    • Lọc chỉ đếm ID nhà sản xuất Apple và Android phổ biến
    • Vấn đề Apple Watch, AirPods, MacBook, v.v. vẫn được cộng vào số đếm
    • Trong cách hiện tại chỉ theo dõi số beacon thuần túy và không theo dõi địa chỉ MAC thực, liệu có cần thêm nhiễu hay không
    • Việc định danh một người dùng duy nhất chỉ bằng số thiết bị có thực tế hay không
    • Lựa chọn thời lượng quét: quá ngắn thì không tìm hết hàng trăm thiết bị, quá dài thì lại đếm cả thiết bị đã rời đi
    • Độ dài quét động, kết thúc quét nếu không có thay đổi trong một khoảng thời gian

Các hình thức triển khai khả thi

  • Tác giả có kế hoạch kiểm chứng dữ liệu ở những nơi có thể dễ dàng lấy số người thực tế
    • Phòng gym có hồ sơ ra vào
    • Những nơi có lối vào hạn chế như căng tin hoặc Starbucks
  • Tác giả đang thảo luận với các giáo sư về trường hợp sử dụng cho ủy ban đại học hoặc khả năng nghiên cứu học thuật
  • Cũng đang cân nhắc phương án bán cho các cửa hàng offline để đo xu hướng hiện diện
  • Cấu hình của một đơn vị triển khai tương đối được đóng gói sẵn
    • Cấu hình Wi-Fi trong phần thiết lập
    • Nếu có portal, mạng sẽ whitelist địa chỉ MAC
    • Wi-Fi mở hoặc có mật khẩu sẽ được kết nối khi khởi động
    • Thay đổi machine ID và site ID trong phần thiết lập
    • Cắm thiết bị vào ổ điện ở vị trí trung tâm hoặc thuận tiện
    • Cấu hình dashboard Grafana đọc từng thiết bị từ backend
    • Cấu hình dashboard Grafana đọc xu hướng dự báo dưới dạng biểu đồ riêng

1 bình luận

 
GN⁺ 2023-11-14
Ý kiến trên Hacker News
  • Tôi đã xây dựng một doanh nghiệp thực sự (occuspace.io) bằng công nghệ này và đã xử lý hầu hết các câu hỏi được nêu ra
    Số lượng beacon BLE có tương quan rất cao với số người hiện diện, nhưng hệ số tương quan khác nhau khá lớn giữa từng tầng như nhà ăn, giảng đường, thư viện, nên tốt hơn là dùng thêm các đặc trưng phức tạp hơn
    Tôi cho rằng việc ước tính thời gian lưu lại dựa trên thời gian nhìn thấy beacon BLE là không chính xác, vì tùy nhà sản xuất, địa chỉ Bluetooth MAC sẽ được ngẫu nhiên hóa mỗi 8–20 phút
    Cách loại trừ RSSI yếu để chỉ đếm các thiết bị ở gần là một ý tưởng hay, nhưng ngưỡng sẽ thay đổi tùy loại không gian và vị trí lắp đặt cảm biến

    • Tôi tò mò thực sự cần số đếm chính xác thường xuyên đến mức nào
      Nếu yêu cầu ban đầu là “tránh nhà ăn đông đúc”, thì chỉ cần biết đại khái mức cao/thấp có thể đã đủ
      Trong kinh doanh, tôi cũng tò mò liệu khách hàng có kỳ vọng độ chính xác cao hay không, và liệu tất cả đều như vậy hay chỉ một phần
      Dù địa chỉ MAC bị ngẫu nhiên hóa, có lẽ vẫn có cách nhận ra loại thiết bị để chỉ đếm điện thoại và loại trừ tai nghe, v.v.
    • Tôi tò mò liệu kiểu theo dõi hiện diện này có hoạt động chính xác cả ngoài trời hay không
      Có vẻ sẽ khó hơn vì tín hiệu lan xa hơn, và tôi đang làm một startup cần theo dõi mức sử dụng sân tennis
      Có lẽ cũng có thể lắp thiết bị Bluetooth ở các góc của không gian ngoài trời và lấy cường độ tín hiệu đó làm ngưỡng
    • Meraki cũng cung cấp thông tin kiểu này như một phần của tính năng quản lý mạng trên đám mây
      Nếu theo dõi Wi-Fi, Wi-Fi MAC và thông tin video rồi liên kết chúng với nhau thì có thể làm được nhiều thứ hơn
      Nên biết đây là một trong các đối thủ tiềm năng
    • Việc hệ số tương quan khác nhau theo từng không gian trông có vẻ là phần khó để sản phẩm hóa
      Tòa nhà đại học khối STEM có thể có hơn 3 thiết bị Bluetooth trên mỗi người, nhưng ở nơi khác có thể dưới 1 thiết bị
    • Có thể làm phát hiện té ngã cho người cao tuổi không?
  • Bài viết rất hay
    Tác giả nói đã thử Seeed Studio XIAO ESP32S3/C3, WaveShare ESP32S3 Zero, ESP32-WROOM không thương hiệu có OLED, Orange Pi Zero W, Raspberry Pi Zero W, và sau thời gian dài thì chỉ XIAO ESP32C3/S3 chạy ổn định khoảng một tháng đến hiện tại; tôi nghi ngờ có thể là vấn đề nguồn điện
    Dòng ESP32 có thể nhạy với dao động điện áp khi phát tín hiệu, nên tôi rất khuyến nghị thêm một tụ điện lớn vào đường cấp nguồn
    Cả RPi lẫn ESP đều có thể khá kén bộ nguồn, cáp và độ dài cáp; thẻ SD của RPi cũng dễ hỏng khi bị cắt nguồn đột ngột
    Dù vậy, tất cả lẽ ra đều phải trụ được hơn một tháng, và các Pi cũng như ESP của tôi đã chạy hàng tháng trời
    Tôi tò mò kết quả sẽ ra sao nếu gắn tụ lớn hơn vào các ESP32 hoặc Pi khác

    • Có lẽ không phải vấn đề về độ ổn định của bản thân nền tảng ESP32, mà nhiều khả năng là do cách tôi sử dụng
      ESP32 được dùng cực kỳ rộng rãi, nên nguyên nhân có lẽ là chiếc ESP32 của nhà sản xuất vô danh tôi mua lần đầu không chịu được lâu
      Khi đổi sang sản phẩm của hãng tử tế thì vấn đề được giải quyết và ESP32 hoạt động tốt
      Raspberry Pi thì thực sự gần như không chạy được, vì nó làm một việc chỉ cần quét Bluetooth và gọi HTTP trở nên quá phức tạp và cố quản lý quá nhiều thứ
      Tôi cấp trực tiếp 5V 1A từ ổ cắm sang USB-C nên có lẽ không phải vấn đề nguồn, nhưng Xiao ESP32-S3 cũng có lỗi gián đoạn; theo tôi nhớ thì lõi XTensa tiêu thụ điện nhiều hơn ESP32-C3 dựa trên RISC-V, nên cũng đáng kiểm tra
    • Trong hệ thống Home Automation của tôi, nhiều ESP32 đang đảm nhiệm các tác vụ hạ tầng quan trọng và đã chạy khoảng 1 năm không vấn đề gì
      Thỉnh thoảng tôi cập nhật bằng ESPHome nhưng không có vấn đề đáng kể
      Một số thiết bị kiêm nhiều việc, ví dụ một cái vừa là proxy Bluetooth cho phòng làm việc tại nhà, vừa điều khiển dải đèn lắp dọc theo bảng tường Skadis
      Tôi dùng các sản phẩm thương hiệu ngẫu nhiên mua từ một công ty trên Amazon tên “AZDelivery”, và không xử lý đặc biệt gì
      Tôi đặt chúng trong vỏ in 3D và thường nối bằng cáp ngắn dưới 30cm vào adapter tối thiểu 5V/1A
    • Trên RPi, tôi rất thích dùng Alpine để giảm ghi lên thẻ SD
      Chỉ khi chạy lbu commit -d mới lưu xuống đĩa, còn mặc định khởi động vào một dạng tempfs
  • Đây là dự án do sinh viên đại học thực hiện tại trường và có bao gồm theo dõi con người ở mức nào đó, nên nếu là nghiên cứu thì đây là cơ hội tốt để hỏi giáo sư xem cần những quy trình nghiên cứu trên đối tượng con người nào
    Hỏi giáo sư có thể dễ hơn hỏi IRB của trường
    IRB có thể từ chối trao đổi vì cho rằng không thuộc thẩm quyền của họ, hoặc dè chừng vì bạn không nói chuyện với họ sớm hơn
    Các chính sách về quyền riêng tư và bảo mật của bộ phận IT trong khuôn viên trường cũng có thể được áp dụng
    Dù các website, ứng dụng và thiết bị IoT thông thường xâm phạm con người nghiêm trọng hơn nhiều, đôi khi các trường đại học cũng đặt mục tiêu làm tốt hơn thế giới bên ngoài

    • Tôi đang trao đổi đúng phần đó với giáo sư
      Có thể sẽ không suôn sẻ nên tôi không đưa vào bài viết
    • Tôi tò mò những quy tắc nào áp dụng cho những thứ như beacon theo dõi
      Beacon đang phát sóng, và rất có thể chúng bị thu thập mà không có sự đồng ý ở hầu hết mọi nơi chúng ta đến
      Nhà tôi ở một ngã tư nên thường có rất nhiều thiết bị Bluetooth xung quanh tụ lại; đã có lần tôi định lắp một bộ theo dõi BLE chỉ để giải trí, xem có thể thu thập được gì và suy ra gì từ dữ liệu
      Ví dụ, tôi chắc chắn có tương quan giữa việc chất lượng không khí trong nhà xấu đi và việc các thiết bị Bluetooth xuất hiện trong khu vực đó
    • Đáng tiếc là người ta thường nói dối IRB
  • Câu “trong những cú nerd snipe kiểu này, việc không đánh mất đà là cực kỳ quan trọng” làm tôi bật cười
    Bộ não mọt công nghệ của tôi cũng đã nhiều lần dùng chính lập luận này để thuyết phục tôi tiêu tiền

    • Nghe buồn cười nhưng cũng đúng
      Rõ ràng có những giai đoạn bạn có hứng làm dự án hơn, đặc biệt là mùa đông thì tôi làm nhiều dự án điện tử hơn và cũng chơi game nhiều hơn
      “Mùa” chơi game của tôi cũng vừa bắt đầu lại tuần trước
      Việc chuyển mạnh từ “hôm nay mình muốn làm gì?” sang “mùa này mình có hứng và có thời gian làm gì?” phần lớn là do tuổi tác và có con, nhưng khoảng cách giữa những lần có ý chí và thời gian để làm các dự án kiểu này lớn đến mức nếu mất đà thì có thể một năm sau mới quay lại, hoặc không bao giờ quay lại nữa
      Tôi có một dự án điện tử bắt đầu ít nhất 10 năm trước, đã tốn kha khá tiền và vì tôi vẫn khăng khăng rằng một ngày nào đó sẽ hoàn thành, nó đã trở thành một dự án khét tiếng trong gia đình
  • Đồng hồ báo thức của tôi gồm một ESP32, một mảng LED khá lớn, còi buzzer và cảm biến PIR
    Nó không hiển thị giờ, mà báo bằng còi và nhấp nháy, từ từ làm sáng phòng, hoặc vào ban đêm thì sau một khoảng thời gian kể từ khi tất cả đèn đã tắt, nó từ từ làm tối đi
    Một lợi ích phụ tôi phát hiện sau đó là dù AP không nằm giữa tôi và ESP, tôi vẫn phản xạ RF đủ nhiều để chỉ bằng log RSSI cũng biết được không chỉ thời gian ở trên giường mà cả những lúc tôi đổi tư thế trong đêm
    https://imgur.com/a/VixOlu5
    Trái với cảnh báo, không có nội dung nhạy cảm nào
    Màu xanh lá ở giữa là RSSI, màu vàng bên dưới là cảm biến PIR, phần phía trên là dữ liệu Mi Band 3 trộn với chú thích về thời gian nằm trên giường
    Đúng là trước khi ngủ và trước khi dậy tôi cũng đã đọc tin tức khá lâu

    • Tôi tò mò stack thu thập dữ liệu và trực quan hóa của bạn như thế nào
    • Cũng muốn xem ảnh cấu hình đồng hồ báo thức bạn nói ở trên
  • Tôi tò mò làm thế nào để hoàn thiện một dự án ESP32 cho giống sản phẩm
    Không phải nói đến sản xuất hàng loạt, mà là muốn biến nó thành một thiết bị độc lập thay vì một board với cả đống dây thò ra
    Nhiều trang chỉ cho thấy board trần, nhưng thực tế thì phải đóng gói nó lại
    Với người làm phần mềm như tôi, khả năng cao là tôi thích trả thêm chút tiền để có một dạng gọn gàng, sạch sẽ hơn là tự mày mò đủ thứ

    • Nếu giỏi mộc thì dùng gỗ
      Nếu có máy in 3D thì làm bản in 3D
      Nếu theo hướng acrylic thì dùng máy cắt laser cắt hình, khoan vài lỗ là thành một cái hộp
      Nếu chẳng có gì và chỉ muốn một cái hộp tối thiểu, có thể dùng hộp Altoids Tin, khoảng 25 USD cho 12 cái; bên trong có kẹo bạc hà vô dụng thì vứt đi rồi nhét dự án vào
      Nếu muốn thứ gì đó nhỉnh hơn hộp Altoids một chút thì mua Hammond Enclosure
      (https://www.hammfg.com/electronics/small-case)
      Nếu là tôi thì có thể sẽ quấn bằng băng keo điện, rồi quấn thêm một lớp kiểu băng keo vải/duct tape bên ngoài, sau đó tô màu bằng bút lông dầu
    • Có nhiều công ty làm vỏ hộp cho thiết bị điện tử, có cả loại chống nước
      Thường chúng có sẵn vài tai bắt vít đã khoan trước để cố định board, còn các lỗ bên ngoài cho I/O thì tự khoan tùy nhu cầu
      Một số nhà sản xuất như dưới đây, và nếu đã mua board phát triển hoặc linh kiện khác thì thường cũng có thể tìm trên adafruit hoặc digikey để tiết kiệm phí vận chuyển
      https://www.hammfg.com/
      https://www.budind.com/
      http://takachi-enclosure.com/
      https://www.adafruit.com/product/903
    • Có rất nhiều lựa chọn
      Hầu hết các dự án bạn thấy đều không được sản phẩm hóa
      Đó là các dự án làm một lần của hacker; nếu người khác thấy hữu ích thì tốt, nhưng đó không phải mục tiêu, nên không cần đóng gói, đôi khi chỉ đơn giản là nhét vào một cái hộp
      Nếu muốn thứ trông đẹp hơn, bạn cần nhờ ai đó thiết kế vỏ
      Người đó cũng có thể là chính bạn
      ESP32 được thiết kế để dễ đưa vào sản phẩm riêng, nên quy trình sẽ là thiết kế bo mạch và vỏ sao cho khớp với nhau, mua số lượng lớn chip ESP32 rồi lắp lên bo mạch
      Những board mua để làm prototype về mặt chính thức chỉ là board tham chiếu, không được kỳ vọng là dùng cho sản phẩm xuất xưởng cuối cùng, nhưng thực tế việc xuất xưởng nguyên board như vậy cũng khá phổ biến
      Vì nó nhỏ, rẻ, và phần thiết kế board khó đã có người khác làm sẵn
    • Có thể để một “product designer” thiết kế vỏ
      Nếu sản phẩm đủ chuẩn hóa thì cũng có thể bỏ qua bước này
      Sau đó liên hệ với các nhà sản xuất địa phương và các nhà sản xuất ở thị trường lớn hơn để nhận mẫu, rồi kiểm tra xem chúng hoạt động đúng không
      Nếu ưng ý thì bắt đầu đặt số lượng nhỏ
      Nên thiết kế quy trình đảm bảo chất lượng hoặc tìm chuyên gia hỗ trợ, để nhà sản xuất không gửi cho bạn 20% hàng lỗi
      Đưa lên cửa hàng offline hoặc làm website và bán trên các cổng như Amazon
      Nói chuyện với khách hàng, lắng nghe phản hồi, rồi cải thiện từng bước một
      Nghe có vẻ choáng ngợp, nhưng khi làm ở một startup smarthome nhỏ, tôi học được rằng ở Shenzhen đã có cả một ngành công nghiệp sẵn sàng giúp nhà sáng lập biến sản phẩm họ mơ ước thành hiện thực, và ở mọi bước đều có thể thuê người hỗ trợ
      Theo trải nghiệm của chúng tôi, dịch vụ phía Trung Quốc tốt hơn, rẻ hơn và nhanh hơn rất nhiều so với các đề xuất ở châu Âu
    • Tôi cố định board vào nắp hộp đồ ăn mang đi bằng standoff nylon
      Phần còn lại của hộp đồ ăn mang đi trở thành vỏ
      Các lỗ cho dây đi vào và đi ra thì khoan trên hộp
      Khi muốn làm cho đẹp hơn một chút thì dùng hộp Tupperware
  • Tôi chưa hoàn toàn theo kịp vấn đề giữ dữ liệu trong bộ nhớ, và có vẻ giờ đã được giải quyết, nhưng để ước tính số ID beacon duy nhất thì dùng thuật toán ước tính cardinality có lẽ chỉ cần không gian hằng số
    https://en.wikipedia.org/wiki/Count-distinct_problem

    • Ý hay đấy
      Gần đây tôi đã mang nó đến một trận bóng đá để stress test với đám đông lớn nhất mà tôi có thể tiếp cận nhanh
      Nếu nó có thể quét vài nghìn cái mà không vấn đề gì thì tôi sẽ coi là khá vững
      Dù vậy, việc tìm hiểu cấu trúc dữ liệu ước tính kích thước cố định nghe thật sự thú vị, và chắc chắn tôi sẽ xem qua
      Một trong những phần tôi thích nhất ở dự án này là có thể đào sâu vào các khái niệm khoa học máy tính sâu hơn và thú vị hơn mà không bị áp lực phải chọn giải pháp dễ nhất
      Tôi không phát triển một giải pháp phải giao ASAP, mà chỉ đang gãi đúng chỗ ngứa của mình
  • Phần “xử lý Linux Bluetooth theo kiểu headless đúng là cực kỳ đau đớn. Binding DBus cần đến phép màu cross-compile, mà Cross cũng không giải quyết được” cũng giống hệt trải nghiệm của tôi
    Vì tôi đang làm việc khác, cuối cùng tôi quyết định để hai thiết bị trên cùng một mạng Wi‑Fi rồi quét pi.local
    Tuy vậy, tôi vẫn muốn biết các crate khác hoạt động thế nào khi thiếu thư viện: không từ chối ngay lúc build mà lại crash lúc chạy

  • Lẽ ra phải nói rõ đây là dành cho BLE
    Ban đầu tôi tưởng nó dựa trên nhịp tim, nhiệt, ra vào, hoặc một thứ gì đó vật lý hơn
    Ngoài ra độ nhạy thu của ESP32 khoảng -94 dBm, khá là kém; đa số thiết bị xuống được -100, -102, thậm chí -104 dBm
    Chênh lệch này khá lớn

  • ESPresence là một dự án thú vị và cũng chạy trên ESP32-C3
    Nó được thiết kế thiên về việc xác định bạn đang ở phòng nào hơn

    1. https://espresense.com/