温湿度センサー HTU21D / I2C

温湿度センサー HTU21D / micro:bit / I2C の通信データをロジアナで見てみる

ビットの送信順はMSBファーストである。 ソフトリセットをかけた場合:プログラミングしたとおりにデータがやり取りされている。 湿度を読み取った場合(hold masterモードにしているのでデータが準備できるまでの約13 ms間、クロックがストレッチされている):…

温湿度センサー HTU21D / micro:bit / mbed & MicroPython まとめ

改善の餘地はたくさんあるが問題なく動くには動いたので現状で固めておく。 mbed 用:▶HTU21D.h #define HTDU21D_ADDRESS 0x40<<1 #define TRIGGER_TEMP_MEASURE_HOLD 0xE3 #define TRIGGER_HUMD_MEASURE_HOLD 0xE5 #define SHIFTED_DIVISOR 0x988000UL #defi…

温湿度センサー HTU21D / ソフトリセットがかけられるようにする / micro:bit / MicroPython

from microbit import * class HTU21D: def __init__(self): self.HTDU21D_ADDRESS = 0x40 self.TRIGGER_TEMP_MEASURE_HOLD = 0xE3 self.TRIGGER_HUMD_MEASURE_HOLD = 0xE5 self.SHIFTED_DIVISOR = (2**8 + 2**5 + 2**4 + 1)<<15 self.READ_USER_REG = 0xE7 …

温湿度センサー HTU21D / 測定分解能を変更してみる / micro:bit / MicroPython

ループするたびにランダムに測定分解能を変更してみる。変更するたびにユーザーレジスタを読み出して確認する。0x02、0x03、0x82、0x83 のいずれかになるはずである。 from random import randint from microbit import * class HTU21D: def __init__(self):…

温湿度センサー HTU21D / ユーザーレジスタを読み出してみる / micro:bit / MicroPython

デフォルトのままなら 0x02 (ビット[1] だけが 1) になるはずである。 from microbit import * class HTU21D: def __init__(self): self.HTDU21D_ADDRESS = 0x40 self.TRIGGER_TEMP_MEASURE_HOLD = 0xE3 self.TRIGGER_HUMD_MEASURE_HOLD = 0xE5 self.SHIFTED…

温湿度センサー HTU21D / 温度、湿度の測定と CRC とを組み合わせる / micro:bit / MicroPython

from microbit import * class HTU21D: def __init__(self): self.HTDU21D_ADDRESS = 0x40 self.TRIGGER_TEMP_MEASURE_HOLD = 0xE3 self.TRIGGER_HUMD_MEASURE_HOLD = 0xE5 self.SHIFTED_DIVISOR = 0x988000 def readTemp(self): buf = bytes([self.TRIGGER_…

温湿度センサー HTU21D / 温度と湿度とを測る / micro:bit / MicroPython

I2C の write 操作 (マスターからスレーブへのデータ転送) は microbit.i2c.write(スレーブアドレス, バイト列) という構文で行う。スレーブアドレスは 7 ビットのまま指定する。microbit.i2c.write() メソッドが自動的に左に 1 ビットシフトしてくれる。さ…

温湿度センサー HTU21D / ソフトリセットをかけてみる / micro:bit / mbed

ソフトリセットをかけると heater ビット (ユーザーレジスタのビット 1 ) 以外は全部デフォルト (全部 0) になるとの由。 #include "MicroBit.h" MicroBit uBit; #define HTDU21D_ADDRESS 0x40<<1 #define WRITE_USER_REG 0xE6 #define READ_USER_REG 0xE7 #…

温湿度センサー HTU21D / 測定分解能を変えてみる / micro:bit / mbed

#include "MicroBit.h" MicroBit uBit; #define HTDU21D_ADDRESS 0x40<<1 #define WRITE_USER_REG 0xE6 #define READ_USER_REG 0xE7 // ユーザーレジスタを読み出すための函数 uint8_t read_user_register(void){ char buf[] = {READ_USER_REG}; uBit.i2c.wr…

温湿度センサー HTU21D / CRC を行う / micro:bit / mbed

CRC を行ってみる。計算手順は単純だがなぜこれで正誤の判定ができるのかその理窟が分からない。 #include "MicroBit.h" MicroBit uBit; #define SHIFTED_DIVISOR 0x988000 // (2^8 + 2^5 + 2^4 + 1) << 15 uint8_t check_crc(uint8_t msb, uint8_t lsb, uin…

温湿度センサー HTU21D / 温度湿度を測る / micro:bit / mbed

#include "MicroBit.h" MicroBit uBit; #define HTDU21D_ADDRESS 0x40<<1 #define TRIGGER_TEMP_MEASURE_HOLD 0xE3 #define TRIGGER_HUMD_MEASURE_HOLD 0xE5 float getTemp(){ // Hold master モード (測定の済むまでクロックをストレッチする) にして、 // …

温湿度センサー HTU21D / ユーザーレジスタの内容を読み出してみる / micro:bit / mbed

基板上のパターンをカットしてプルアップ抵抗を無効にする(モジュール基板はマルツ製)。 ためしにユーザーレジスタの内容を読み出してみる。デフォルト値である 0b 0000 0010 (0x2) が返ってくるはずである。 #include "MicroBit.h" #define DeviceAddr 0x40<…