0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5NanoC6 Zigbee + PJ85775Pで遊ぶ(送信(温度センサーPJ85775P))(M5Stackボード 3.3.7)

0
Last updated at Posted at 2026-05-28

  • 過去ログを見よ!!!

Screenshot From 2026-05-28 10-39-26.png




//i2c_tmp_zigbee_PJ85775P_m5nanoc6_1


#ifndef ZIGBEE_MODE_ED
#error "Zigbee end device mode is not selected in Tools->Zigbee mode"
#endif


//インクルド
#include "Zigbee.h"
#include <Wire.h>

//定義

// 定義エンドポイント番号
#define TEMP_SENSOR_ENDPOINT_NUMBER 10

// Zigbee 温度センサーオブジェクトを作成
ZigbeeTempSensor zbTempSensor = ZigbeeTempSensor(TEMP_SENSOR_ENDPOINT_NUMBER);

#define I2C_ADD 0x4F

// 温度データ変数
float temperature = 0.0;

// タスク同期フラグ
volatile bool temp_updated = false;

/************************ SHT30 温度読み取り関数(温度のみ)*****************************/
bool read_SHT30_Temperature(float &temp) {  //温度の参照渡し

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

  //2バイト読み込み
  Wire.requestFrom(I2C_ADD, 2);                          // request 2 bytes from slave device I2C_ADD
  unsigned short re = (Wire.read() << 8) | Wire.read();  // receive 2 byte as character

  //re = 0xE700;   //-25
  //re = 0x1900;   //25
  //re = 0;
  //re = 0xfff0;   //-0.0625
  //re = 0xffc0;   //-0.250
  //re = 0xff00;   //-1.00
  //re = 0x1940;  //25.25

  //re = 0xFFF0;
  //re = 0x7FF0;
  //re = 0x8000;
  //printf("re = %d\n",re/16);

  //温度を表示する
  int a = (re >> 4) & 0xFFF;          //4ビットシフトして有効12ビットを取り出す。
  if (a > 0x7FF) { a = a - 0x1000; }  //符号の処理 0x7FF(2047)より大きい、0x1000(4096)引く
  a = a * 625;                        // a * (1 / 16 * 10000)

  temp = a;  //オートキャストして代入
  temp = temp / 10000.0f;

  return true;

}  //read_SHT30_Temperature


/************************ 温度読み取りタスク *****************************/
static void temp_sensor_value_update(void *arg) {
  for (;;) {

    //センサーの読み取り
    if (read_SHT30_Temperature(temperature)) {

      Serial.printf("Temperature: %.2f°C\n", temperature);
      zbTempSensor.setTemperature(temperature);

      temp_updated = true;  //センサーの読み取りが成功

    } else {

      //センサーの読み取りに失敗
      Serial.println("Failed to read SHT30");

    }  //endif

    delay(10000);  //10秒待つ

  }  //for
}  //temp_sensor_value_update

void setup() {

  //ser
  Serial.begin(115200);
  delay(1000);
  Serial.println("=== NanoC6 End Device + Unit ENV III (Temperature Only) ===");

  Wire.begin();  //I2Cの初期化
  Serial.println("I2C initialized");

  delay(100);

  zbTempSensor.setManufacturerAndModel("Espressif", "TempSensor");
  zbTempSensor.setMinMaxValue(-40, 120);
  zbTempSensor.setTolerance(1);

  Zigbee.addEndpoint(&zbTempSensor);

  Serial.println("Starting Zigbee End Device...");

  //ジグビーの初期化
  if (!Zigbee.begin()) {

    Serial.println("Zigbee failed to start!");
    Serial.println("Rebooting in 5 seconds...");
    delay(5000);
    ESP.restart();  //リブート

  }  //endif

  Serial.println("Zigbee End Device started");
  Serial.println("Connecting to network...");

  //ジグビーの接続確認
  while (!Zigbee.connected()) {

    Serial.print(".");
    delay(1000);

  }  //while

  //接続されました。
  Serial.println("\nConnected to Zigbee network!");

  //センサー
  xTaskCreate(temp_sensor_value_update, "temp_sensor_update", 4096, NULL, 10, NULL);

  zbTempSensor.setReporting(1, 0, 1);
  Serial.println("Temperature reporting configured");

}  //setup


void loop() {

  if (temp_updated) {

    temp_updated = false;
    zbTempSensor.reportTemperature();  //送信
    Serial.println("Temperature reported to Coordinator");

  }  //endif

  delay(100);

}  //loop



0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?