ESP32的BLE-BEACON
緣起 通用資料紀錄器 啟用藍芽功能,在裝置名稱加上IP,手機用 nRF connect 直接看好了;這一篇紀錄ESP SDK怎麼打開藍芽BLE 藍芽Stack選擇 ESP SDK支援兩種藍芽框架,我選NimBLE因為記憶體開銷低,也許有其他坑(無法判斷) Bluetoothd 支援傳統藍芽,以及BLE,記憶體開銷比較大 NimBLE 只支援BLE only,記憶體開銷低很多 設定SDK 在sdkconfig.defaults新增以下的編譯選項 開啟ESP-IDF Terminal,砍了sdkconfig檔,執行idf.py reconfigure重新產生sdkconfig 編譯選項有改,執行full clean,重新編譯 加入BLE Beacon 原始檔在 這裡 ,留著下次複製貼上用 藍芽和WIFI會互相搶設頻電路,增大藍芽廣播週期,減少對WIFI干擾 裝置名稱ble_beacon_devname是全域變數,在適當時間呼叫下面API就能塞給藍芽stack WIFI連線管理器呼叫下面的API,收到IP或是斷線都要呼叫,更新BLE裝置名稱 SDK設計成事件驅動(event-driven),下面的片段是WIFI抓到IP,把IP字串送給藍芽 WIFI斷線,也要更新BLE裝置名稱 吃記憶體怪獸 ESP32C3跑藍芽,剩餘記憶體從100KB變10KB,我想辦法壓掉一些才回到40KB;實在代價不低 我和藍芽BLE 我在 12年前 研究過藍芽BLE心跳帶,感覺這技術有用得掌握,所以買了很多開發板放著生灰。多年後終於用來解個小問題:廣播自己的IP。藍芽BLE還有GATT服務,裝置能定義一張表格,每個欄位讀寫都有附加效果,例如: 寫入:1開燈,0關燈 讀取:得知當下LED狀態(開 or 關) 這種通訊介面很有用,能合成出各種介面。所以廣播擺上去,之後繼續折騰GATT服務的機會就大一點...