發表文章

目前顯示的是 6月, 2023的文章

超簡單做出低功耗藍牙温度計(nRF52840 Dongle + TMP102 + MircoPython)

圖片
 MicroPython支援nRF52840 Dongle (pca10059), 這支在Mouser上只要台幣343左右就可以買到。買來後要燒錄MicroPython的firmware, 寫作時, MicroPython出到1.20.0版。燒錄方法, 可以參考 燒錄Micropython 1.12至nRF52840 Dongle 。這連結有更新, 文章下方有增加1.20.0版的燒錄方式, 不用擔心, 現在的燒錄方法是可以還原的, 以後仍可燒回其他firmware。 有了可跑MicroPython的nRF52840 Dongle後, 可以直接寫Python程式來實作低功耗藍牙温度計。其實不用傷腦筋如何寫, MicroPython官網就有一個範例程式, 直接拿來用就可以有這個功能了! 這麼好, 當然了, 這不就是MicroPython給我們的承諾嗎? 簡單好用! 連結在此:  ubluepy_temp.py 註: 這個程式和MicroPython 1.20.0在nRF52840上, 會有RTC被用掉的問題, 要改一下! 如下圖, 1改成2就可以了。 改好, 直接跑, 然後用手機上的nRF Connect App (或其他BLE App), 找micr_temp這個裝置, 連接上去, 注意連接上去後, Dongle的LED燈會亮起來。找Environmental Sensing服務下的Temperature特徵值, 按下通知啟用, 並修改Data parser為符號整數。查看log部份, 就可以看到每5秒左右會更新一次温度值。如下圖: 如上圖, 第2點所圈起處, 看到2800, 這表示為28度C。如果沒有修改Data parser, 預設會是看到16進位數值, 如上圖第3點所圈起處0xF00A, 這個格式我們人類看不懂! 大家都注意到了吧! 現在温度都出現2700, 2800, 2900之類的, 後面那2個0都不會出現其他數字, 這是因為現在這個範例程式是存取nRF52840內建的温度感測器, 而這個温度感測器基本是查看MCU的温度用的, 而且目前firmware的實作也沒有取得小數點部份, 可能覺得沒必要! 而且, MCU通常會發熱, 比實際上的環境温度要高一些。 因此, 以下使用TMP102這顆TI的温度感測器來取得較為接近實際環境的温度。修改部份也很簡單, 只要加