[Android Things] 通過(guò) I2C 讀取溫濕度

實(shí)驗(yàn)設(shè)備

Raspberry Pi 3 with Android Things
DHT12 溫濕度傳感器

DHT12 實(shí)物圖

DHT12.jpg

端口連接

pinout-raspberrypi.png

獲得 I2C 總線名稱(chēng)

PeripheralManagerService manager = new PeripheralManagerService();
List<String> deviceList = manager.getI2cBusList();
if (deviceList.isEmpty()) {
    Log.i(TAG, "No I2C bus available on this device.");
} else {
    Log.i(TAG, "List of available devices: " + deviceList);
}

得到如下輸出

List of available devices: I2C1

通信協(xié)議

本實(shí)驗(yàn)中逞敷, DHT12 的 I2C 地址為 0x5C 祭椰,讀取到的數(shù)據(jù)格式如下:

BYTE ADDR Desc.
0x00 濕度整數(shù)位
0x01 濕度小數(shù)位
0x02 溫度整數(shù)位
0x03 溫度小數(shù)位
0x04 校驗(yàn)和
  • 若前四位之和等于最后一位的校驗(yàn)和,則讀取到的數(shù)據(jù)無(wú)誤驰弄;
  • 溫度小數(shù)位(即 0x03 )的最高位代表溫度的正負(fù)功茴。若其為 0 陨簇,溫度為正值;若其為 1 彼哼,溫度為負(fù)值对妄。

實(shí)驗(yàn)代碼(Kotlin)

package cn.anguiao.things

import android.app.Activity
import android.os.Bundle
import android.os.Handler
import android.util.Log
import com.google.android.things.pio.I2cDevice
import com.google.android.things.pio.PeripheralManagerService
import java.io.IOException

class MainActivity : Activity() {

    companion object {
        private val TAG = "MainActivity"
        private val I2C_DEVICE_NAME = "I2C1"
        private val I2C_ADDRESS = 0x5C
    }

    private val handler = Handler()

    private lateinit var device: I2cDevice

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        try {
            // 獲得串口服務(wù)
            val service = PeripheralManagerService()
            // 打開(kāi)相應(yīng)的I2C設(shè)備
            device = service.openI2cDevice(I2C_DEVICE_NAME, I2C_ADDRESS)

            // 采集數(shù)據(jù)
            handler.post(readRunnable)
        } catch (e: IOException) {
            Log.e(TAG, "Error on I2C API", e)
        }
    }

    override fun onDestroy() {
        super.onDestroy()

        handler.removeCallbacks(readRunnable)

        try {
            device.close()
        } catch (e: IOException) {
            Log.e(TAG, "Error on I2C API", e)
        }
    }

    private val readRunnable = object : Runnable {
        override fun run() {
            try {
                // 采集數(shù)據(jù)并輸出到 logcat
                val data = readHumidityAndTemperature()
                Log.d(TAG, data.joinToString())
            } catch (e: IOException) {
                Log.e(TAG, "Error on I2C API", e)
            }

            // 延時(shí)一秒,再次采集
            handler.postDelayed(this, 1000)
        }
    }

    private fun readHumidityAndTemperature(): DoubleArray {
        // 初始化 byte 數(shù)組
        val data = ByteArray(5, { 0 })
        // 讀取數(shù)據(jù)
        device.readRegBuffer(0x00, data, data.size)

        // 校驗(yàn)數(shù)據(jù)
        if ((data[0] + data[1] + data[2] + data[3]) % 256 != data[4].toInt()) {
            return doubleArrayOf(0.0, 0.0)
        }

        // 處理濕度數(shù)據(jù)
        val humidity = (data[0].toString() + "." + data[1].toString()).toDouble()

        // 處理溫度數(shù)據(jù)
        val temperature = if (data[3] < 128) {
            (data[2].toString() + "." + data[3].toString()).toDouble()
        } else {
            -(data[2].toString() + "." + (data[3] - 128).toString()).toDouble()
        }

        // 返回?cái)?shù)據(jù)
        return doubleArrayOf(humidity, temperature)
    }
}

實(shí)驗(yàn)結(jié)果

result.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敢朱,一起剝皮案震驚了整個(gè)濱河市剪菱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拴签,老刑警劉巖孝常,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚓哩,居然都是意外死亡构灸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)岸梨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喜颁,“玉大人,你說(shuō)我怎么就攤上這事曹阔“肟” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵赃份,是天一觀的道長(zhǎng)稿茉。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么漓库? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮园蝠,結(jié)果婚禮上渺蒿,老公的妹妹穿的比我還像新娘。我一直安慰自己彪薛,他們只是感情好茂装,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著善延,像睡著了一般少态。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上易遣,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天彼妻,我揣著相機(jī)與錄音,去河邊找鬼豆茫。 笑死侨歉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的揩魂。 我是一名探鬼主播幽邓,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼火脉!你這毒婦竟也來(lái)了牵舵?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤倦挂,失蹤者是張志新(化名)和其女友劉穎畸颅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妒峦,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡重斑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肯骇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窥浪。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笛丙,靈堂內(nèi)的尸體忽然破棺而出漾脂,到底是詐尸還是另有隱情,我是刑警寧澤胚鸯,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布骨稿,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏坦冠。R本人自食惡果不足惜形耗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辙浑。 院中可真熱鬧激涤,春花似錦、人聲如沸判呕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)侠草。三九已至辱挥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間边涕,已是汗流浹背晤碘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奥吩,地道東北人哼蛆。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像霞赫,于是被迫代替她去往敵國(guó)和親腮介。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在使用單片機(jī)的過(guò)程中端衰,I2C 通信可以說(shuō)是最被廣泛使用和采納的協(xié)議之一叠洗,采用 I2C 協(xié)議可以占用更少的資源,鏈接...
    noparkinghere閱讀 2,169評(píng)論 0 8
  • 前言 人生苦多旅东,快來(lái) Kotlin 灭抑,快速學(xué)習(xí)Kotlin! 什么是Kotlin抵代? Kotlin 是種靜態(tài)類(lèi)型編程...
    任半生囂狂閱讀 26,215評(píng)論 9 118
  • 寫(xiě)在前面的話:由于外設(shè)I/O涉及到GPIO腾节、PWM、和串行通信三部分荤牍,而串行通信有講了I2C(IIC)案腺、SPI、U...
    化作春泥_閱讀 2,558評(píng)論 0 6
  • IIC通信實(shí)驗(yàn) IIC簡(jiǎn)介 I2C(Inter-Integrated Circuit)字面上的意思是集成電路之間康吵,...
    btskyrmb閱讀 1,924評(píng)論 0 2
  • 今天是八月十五劈榨,特別冷。 從姥姥家出來(lái)之后我和蕾姐也告別了晦嵌,她需要回去照顧家人同辣,我想去換一個(gè)新一點(diǎn)...
    0娜娜子0閱讀 468評(píng)論 0 0