星期五, 2月 09, 2018

APDS9960、APDS9930、APDS9900 傻傻分不清楚

同事買了一個號稱使用 APDS9960 感測器的模組, 這感測器可以測環境光線、接近距離、RGB 顏色、手勢, 看起來超威, 趕快找了對應的程式庫, 可是測了半天, 除了環境光線沒問題外, 其他怎麼測都不行。經過網路耙梳, 發現有一篇文章的回應中提到, 他在某處購買了好幾個也是號稱使用同一型號感測器的模組, 但其實使用的是舊款的 APDS9930 感測器, 因為根據 APDS9960 規格書上說明, APDS9960 的 device id 應該是 0xAB, 但他讀到的 device id 是 0x39, 和 APDS9930 規格書上標示的相同。經過這一提醒, 我就改用 APDS9930 的程式庫測試, 果然發現同事買的這一款模組並不是使用 APDS9960, 當 APDS9930 測試就成功了。而手勢偵測、RGB 顏色識別都是 APDS9960 才有的功能, 接近感測的資料取得方式也不一樣。

為了確認這一款模組到底是不是使用 APDS9930, 只好去讀取它的 device id, 一讀不得了, 既不是 APDS9960 的 0xAB、也不是 APDS9930 的 0x39, 而是讀到 0x29, 上網路查才真相大白, 原來這個模組使用的是型號更舊的 APDS9900, 規格書上標明的 device id 正是 0x29。這時我再回頭看原本 APDS9960 的測試程式, 發現其實程式一開始執行時就已經有訊息告訴我初始程序有地方出錯, 如果早點注意到, 我們就不會花這麼多時間找問題了。不過淘寶賣家你們也幫幫忙, 不要亂來好嗎?好啦, 我知道那是製造商的問題, 因為他們在電路板背面大剌剌的印了APDS9960:
註:這一篇文章有市面上幾款模組的樣子, 不仔細分辨還真不容易搞清楚。

星期五, 2月 02, 2018

D1 Mini Motor Shield I2C 通訊問題

因為開發產品的緣故, 同事購買了 D1 Mini Motor Shield 來控制直流馬達, 不過實際使用時發現奇特的現象, 閒置一會兒就無法控制馬達。經過簡單的除錯步驟, 發現如果 D1 Mini 與 Motor Shield 間一段時間 (實際測試約 10 秒) 沒有進行 I2C 通訊, Motor Shield 的 I2C 就會沒有任何反應。解決的方法就是每隔一小段時間, 例如 5 秒鐘, 就進行一次 I2C 通訊, 就可以維持 Motor Shield 的 I2C 正常運作。

網路上也有善心人士針對此問題, 撰寫了修正版本的 Motor Shield 韌體, 如果覺得上述手動修改程式定時進行 I2C 通訊的方式很麻煩, 也可以是是看燒錄修正版本的韌體。