2017-06-27 10 views
7

私は温度監視プロジェクトにRaspberry pi3とDHT11センサーを使用しています。 2 アースなしをピンする:GPIOに6 出力:BCM22すなわちピン私が使用しているなし15Androidを使用してDHT11から温度を読み取る場合

コード:

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); 
    } 
} 

私はピン位置

VCCなしをピンすることを、次のしています上記のコードは私に「何も働いていません」という出力を与えています。

私が間違っているかもしれない提案はありますか?

+0

正しくフォーマットできますか? –

+1

@WilliMentzel done !.私は私のサンプルアプリケーションからそのコードを引っ張った。あなたは見てみて、私にここの問題を指摘できますか? – Manoj

+0

私はこの特定の問題についてはお手伝いできませんが、人々が回答する可能性が高いやり方であなたの質問を提示するのを助けました:) –

答えて

0

DHT11応答パルスの持続時間が26-28から70μsなので、Raspberry Pi 3 with Android Thingsを使用してデータを読み取ることはできませんが、RP3の最大周波数はAT GPIOで約3kHzです。 300μsのパルス持続時間。 this質問への回答を見てください。

+0

ビデオリンクhttps://www.youtube.com/をご覧ください時計?v = DPvxsHoD7kc。彼はdht11とラズベリーpi3を結びつける。それはアンドロイドの物事でデータを読み取ることに問題がありますか? – Manoj

+0

はい、接続DHT11とRPiの例はたくさんありますが、問題はRPi3ではなくGPIOのAndroid Things(AT)周波数にあります。 –

関連する問題