2017-06-27 24 views
7

我正在使用Raspberry pi3和DHT11傳感器進行溫度監測項目。 我具有以下銷定位使用Android Things通過DHT11讀取溫度

VCC引腳NO:2 接地引腳NO:6 輸出到GPIO:BCM22即銷不,我已經使用15

代碼:

public class WeatherStationActivity extends Activity { 

    private Handler mHandler = new Handler(); 
    private TextView mTxtStatus; 

    private PeripheralManagerService service = new PeripheralManagerService(); 

    private Gpio tempGpio; 

    private int i = 0; 
    int[] dht11_dat = {0, 0, 0, 0, 0}; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d("Weather station", "Started Weather Station"); 
     setContentView(R.layout.activity_main); 
     mTxtStatus = (TextView) findViewById(R.id.txtStatus); 
     try { 
      tempGpio = service.openGpio("BCM22"); 
      Handler handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        if (i == 10) { 
         handler.removeCallbacks(this); 
        } else { 
         getTemp(); 
         handler.postDelayed(this, 5000); 
        } 
        i++; 
       } 
      }, 5000); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 


    private void getTemp() { 
     boolean laststate = false; 
     try { 
      laststate = tempGpio.getValue(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     int j = 0; 
     final int MAXTIMINGS = 85; 

     dht11_dat[0] = dht11_dat[1] = dht11_dat[2] = dht11_dat[3] = dht11_dat[4] = 0; 


     try { 

      tempGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW); 
//   tempGpio.setActiveType(Gpio.ACTIVE_LOW); 
      tempGpio.setValue(false); 
//   Thread.sleep(18); 
      TimeUnit.MILLISECONDS.sleep(18); 
//   tempGpio.setActiveType(Gpio.ACTIVE_HIGH); 
//   tempGpio.setActiveType(Gpio.ACTIVE_HIGH); 
      tempGpio.setValue(true); 
      TimeUnit.MICROSECONDS.sleep(40); 
      tempGpio.setDirection(Gpio.DIRECTION_IN); 


      /* tempGpio.setActiveType(Gpio.ACTIVE_HIGH); 
      tempGpio.setValue(true);*/ 
//   tempGpio.setValue(true); 
      StringBuilder value = new StringBuilder(); 

      for (int i = 0; i < MAXTIMINGS; i++) { 
       int counter = 0; 
       while (tempGpio.getValue() == laststate) { 
        counter++; 
        TimeUnit.MICROSECONDS.sleep(1); 
        if (counter == 255) { 
         break; 
        } 
       } 
       laststate = tempGpio.getValue(); 
       mTxtStatus.append("\nLast State of Sensor " + laststate); 
       if (counter == 255) { 
        break; 
       } 
       //* ignore first 3 transitions *//* 
       if ((i >= 4) && (i % 2 == 0)) { 
        //* shove each bit into the storage bytes *//* 
        dht11_dat[j/8] <<= 1; 
        if (counter > 16) { 
         dht11_dat[j/8] |= 1; 
        } 
        j++; 
       } 
      } 
      // check we read 40 bits (8bit x 5) + verify checksum in the last 
      // byte 
      if ((j >= 40) && checkParity()) { 
       value.append(dht11_dat[2]).append(".").append(dht11_dat[3]); 
       Log.i("Logger", "temperature value readed: " + value.toString()); 
       mTxtStatus.append("\nTemp " + value.toString()); 
      } else { 
       mTxtStatus.append("\nNothing is working "); 
       Log.i("Logger", "Nothing is working "); 
      } 

     } catch (IOException e) { 

      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

    private boolean checkParity() { 
     return dht11_dat[4] == (dht11_dat[0] + dht11_dat[1] + dht11_dat[2] + dht11_dat[3] & 0xFF); 
    } 
} 

上面的代碼給了我「沒什麼工作」作爲輸出。

任何建議,我可能會做錯嗎?

+0

你能正確格式嗎? –

+1

@WilliMentzel完成!我從示例應用程序中提取了該代碼。你可以請看一下並在這裏指出我的問題嗎? – Manoj

+0

我不能幫你解決這個問題,但我幫你提出了一個問題,人們更可能回答/ upvote :) –

回答

0

由於DHT11響應脈衝的持續時間在26-28us到70us之間,因此您無法使用Raspberry Pi 3與Android Things讀取DHT11的數據,但使用AT GPIO的RP3的最大頻率大約爲3kHz,這意味着300 us脈衝持續時間。看看this問題的答案。

+0

看看視頻鏈接https://www.youtube.com/看?v = DPvxsHoD7kc。他將他的dht11連接到Raspberry pi3。是android的東西讀取數據的問題? – Manoj

+0

是的,有很多連接DHT11和RPi的例子,但問題出在GPIO的Android Things(AT)頻率上,而不是RPi3上。 –