「秋月電子PJ85775PをXIAO ESP32-C6で使う|Arduinoで簡単温度表示」

秋月電子のデジタル温度センサーPJ85775PをXIAO ESP32-C6とArduinoで使用し、I2C通信で温度を表示しているイメージ秋月電子PJ85775PをXIAO ESP32-C6で使ってみる|Arduinoで温度表示
スポンサーリンク

Arduinoで温度を測定「できるだけ安く」「配線が簡単」「ライブラリに頼らず動かしたい」
という概念で作りました。

今回は、**秋月電子で安価に購入できるデジタル温度センサー「PJ85775P」**を使い、
XIAO ESP32-C6 と Arduino IDE で温度を読み取り、
シリアルモニターに表示する ところまでを試してみました。

I2C通信を使うため配線も少なく、
実際に動かしてみたところ 問題なく安定して温度が取得できました

この記事では、

  • PJ85775P の基本情報
  • XIAO ESP32-C6 との配線方法 (ほかのアルディーノでも問題なく動きます)
  • 実際に動作したシンプルなArduinoスケッチ
  • コードのやさしい解説

を 初心者の方にも分かるように 解説していきます。

スポンサーリンク

使用した部品と開発環境

  • PJ85775P(秋月電子)
  • XIAO ESP32-C6
  • Arduino IDE
  • ジャンパーワイヤー

PJ85775P デジタル温度センサーについて

  • I2C通信対応の温度センサー
  • 12ビット分解能
  • アドレスは 0x48 (今回の接続)
  • 外付け部品が少なく扱いやすい

XIAO ESP32-C6 との配線方法

配線図

接続例(今回の構成)

PJ85775PXIAO ESP32-C6
SDAD0
SCLD1
VCC3.3V
GNDGND
A0GND
A1GND
A2GND

※ ESP32-C6では Wire.begin(D0, D1); のように
SDA / SCL を指定しています。
標準仕様を使う場合は Wire.begin();です

Arduinoプログラム(動作確認済み)

#include <Arduino.h>
#include <Wire.h>

#define I2C_ADD_JP 0x48
void setup() {

  //I2Cの初期化
  // 今回esp32c6 を 使ってD0をSDA D1をSCLとしました
  // 標準の場合は何も指定せずWire.begin();です
  Wire.begin(D0, D1);

  //シリアルポートの初期化
  Serial.begin(9600);
}  //setup

int Read_Temp() {

  //サブアドレスの書き込み
  Wire.beginTransmission(I2C_ADD_JP);  // transmit to device I2C_ADD
  Wire.write(0);                       // sends one byte
  Wire.endTransmission();              // stop transmitting

  //2バイト読み込み
  Wire.requestFrom(I2C_ADD_JP, 2);               // request 2 bytes from slave device I2C_ADD
  int Temp1 = (Wire.read() << 8) | Wire.read();  // receive 2 byte as character
  Temp1 = (Temp1 >> 4) & 0x0fff;
  return Temp1;
}
void loop() {
  float tem = Read_Temp() * 0.0625;
  // 12ビットの補数表示の負の部分を作成する
  if (tem >= 2048) {
    tem = tem - 4096;
  }
  Serial.println(tem, 2);  // 小数点第2桁まで表示する
  delay(2000);  // Wait 2 seconds for next
}

プログラムのやさしい解説

I2Cの初期化

Wire.begin(D0, D1);

ESP32-C6では SDA / SCL を自由に指定できます。

温度データの読み取り

  • センサー内部のレジスタを指定
  • 2バイト読み込み
  • 12ビット分の温度データを抽出
Temp1 = (Temp1 >> 4) & 0x0fff;

温度への変換

  • 分解能は 0.0625℃
float tem = Read_Temp() * 0.0625;

マイナス温度への対応

12ビットの補数表現を考慮して補正しています。

if (tem >= 2048) {
    tem = tem - 4096;
  }

シリアルモニターでの表示結果

出力画面

  • 室温付近の値が安定して表示
  • 2秒ごとに更新

補足:PJ85775P は CRC チェックにも対応しています

PJ85775P は、温度データに CRC(エラーチェック) を付けて読み取ることも可能です。
I2C通信では、

  • ノイズの影響
  • 配線が長い場合
  • 実運用での信頼性

が気になることがありますが、
CRCチェックを行うことで 通信エラーの検出 ができます。
今回は、

  • 配線が短い
  • 室内での動作確認
  • シリアル表示のみ

という条件だったため、
シンプルなコードを優先して CRC は省略 しています。
ただし、
ログ取得や長時間運用を行う場合は、
CRCチェックを入れることで、より安全な温度取得が可能になります。
「CRCチェックにも対応しているため、
実運用やデータロガー用途でも安心して使えるセンサーです。」
機会があればそれを含めたプログラムをブログにしたいと思います

まとめ

今回は、秋月電子で購入できるデジタル温度センサー PJ85775P を使い、
XIAO ESP32-C6 と Arduino IDE で温度を読み取り、
シリアルモニターに表示するところまでを試してみました。

I2C通信のため配線が少なく、
ライブラリを使わなくても 比較的シンプルなコードで温度取得が可能 です。

  • 安価で入手しやすい
  • 初心者でも扱いやすい
  • ESP32系マイコンとも相性が良い

という点から、
I2C通信の入門や温度測定の練習におすすめのセンサーだと感じました。

タイトルとURLをコピーしました