2017-04-17 59 views
0

前段時間,我將DHT11傳感器連接到Arduino UNO,並根據the one from Arduino website編寫了a simple library愛迪生DHT11傳感器故障,而在RPi上工作成功

目前我想通過運行Yocto Linux的Arduino擴展板將DHT11連接到英特爾Edison。在嘗試將庫重寫爲Python時,我期待在該語言中出現微秒級睡眠問題,並最終決定使用mraa重新制作Raspberry Pi DHT11 Library。但是,傳感器不能正常工作。我發現the topic on Intel forum指責愛迪生端口快速IN/OUT切換不能。使用兩根電線的建議解決方案也無濟於事。

這個介紹之後,有幾個問題,我想起:

  1. 由於兩個樹莓和愛迪生是計算機系統與真實 處理器和Linux(不像它由簡單 微控制器的Arduino的),爲什麼是愛迪生 愛迪生與DHT11有問題的人,而那些使用樹莓的人不是?

  2. 這些問題的根源是什麼?它是否與 Edison上的非確定性操作系統時序相關聯(RPi具有相同的功能,還沒有 它?),數字引腳有缺陷還是兩者兼而有之?

  3. 甚至有可能使用兩根導線來解決這個問題(或者帶有二極管的 )?如果沒有建議的三態緩衝器,也許這是不可能的?

  4. 將單線設備連接到愛迪生的最簡單方法是什麼?

回答

0

如您所知,1-Wire協議需要確定性時序。 無法在像愛迪生這樣的計算平臺上,甚至是在PC上進行確定性計時。使用usleep()可能會使它靠近它,但隨時可能會中斷您的應用程序,從而擾亂您的時間安排。

使用沒有確定性GPIO時序的系統時需要做的事情是使用接口連接傳感器。該接口應該使用確定性時序的小型微型計算機。 (即Pic,ATTINY等)。

  • 或 - 使用系統中具有確定性時序的現有外設,如UART。

我幾年前寫了一篇博客文章,介紹如何使用UART來執行1-Wire協議。你應該可以在這裏找到它:http://wphost.spider-e.com/?p=231

+0

但是,鏈接庫如何在RPi上正常工作?它也取決於快速gpio切換。 –

+0

@BartłomiejSzałach如果使用適當的內核驅動程序,它可能足夠快以響應信號變化。否則你有選擇:1)使用額外的MCU,2)使用內部MCU,雖然它很慢,3)使用實時操作系統(Linux RT,Zephyr等)。 – 0andriy