//central_DHT11BLE_ex2 #include #include #include //I2C用ヘッダーファイル #include // R4対応I2C LCD // LCD LiquidCrystal_PCF8574 lcd(0x27); // (0x3F の場合もあり) #define SW_PIN 2 // DHT11 #define DHTPIN 11 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // BLE UUID #define DHT11_SERVICE_UUID "01234567-0123-0123-0123-0123456789a0" //16byte(128bit) #define DHT11_TEMP_UUID "01234567-0123-0123-0123-0123456789a1" #define DHT11_HUM_UUID "01234567-0123-0123-0123-0123456789a2" #define LED_UUID "01234567-0123-0123-0123-0123456789a3" #define BLE_LOCAL_NAME "DHT11_float" int previousSw = 0;//PreviousSw void setup() { pinMode(SW_PIN, INPUT_PULLUP); Serial.begin(9600); while (!Serial); Wire.begin(); lcd.begin(16, 2); lcd.setBacklight(255); lcd.print("Central Ready"); if (!BLE.begin()) { Serial.println("BLE init fail"); while (1); } BLE.scanForUuid(DHT11_SERVICE_UUID); Serial.println("Scanning..."); } void loop() { BLEDevice peripheral = BLE.available(); if (!peripheral) return; /* if (peripheral.localName() != BLE_LOCAL_NAME) { // 違うデバイスならスルーしてスキャン継続 return; } */ BLE.stopScan(); Serial.println("Connecting..."); if (!peripheral.connect()) { Serial.println("Connect failed"); BLE.scanForUuid(DHT11_SERVICE_UUID); return; } if (!peripheral.discoverAttributes()) { Serial.println("Discover failed"); peripheral.disconnect(); BLE.scanForUuid(DHT11_SERVICE_UUID); return; } Serial.println(peripheral.address());//MACアドレス 各Bluetooth機器に固有の値 Serial.print("localName:"); Serial.println( peripheral.localName() ); BLECharacteristic tempChar = peripheral.characteristic(DHT11_TEMP_UUID); BLECharacteristic humidChar = peripheral.characteristic(DHT11_HUM_UUID); BLECharacteristic ledChar = peripheral.characteristic(LED_UUID); if (!tempChar || !humidChar || !ledChar) { Serial.println("Characteristic missing"); peripheral.disconnect(); BLE.scanForUuid(DHT11_SERVICE_UUID); return; } // Notify を受け取る tempChar.subscribe(); humidChar.subscribe(); while (peripheral.connected()) { // R4 WiFi では必ず read() が必要 tempChar.read(); humidChar.read(); float t;//temperature float h;//humidity tempChar.readValue((byte*)&t, sizeof(float)); humidChar.readValue((byte*)&h, sizeof(float)); // Serial Serial.print("Temp: "); Serial.print(t, 1); Serial.print(" ℃ "); Serial.print("Humid: "); Serial.print(h, 1); Serial.println(" %"); // LCD lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 0); lcd.print("Temp="); lcd.print(t, 1); lcd.print((char)0xDF);//° lcd.print("C "); //lcd.print(cnt); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print("Humid="); lcd.print(h, 1); lcd.print("% "); // ---- Central Sw → Peripheral LED ---- int nowSw = digitalRead(SW_PIN); if (nowSw != previousSw) { previousSw = nowSw; if (nowSw) { Serial.println("button pressed"); // button is pressed, write 0x01 to turn the LED on ledChar.writeValue((byte)0x01); } else { Serial.println("button released"); // button is released, write 0x00 to turn the LED off ledChar.writeValue((byte)0x00); } } //delay(300); delay(100); } Serial.println("Peripheral disconnected"); BLE.scanForUuid(DHT11_SERVICE_UUID); }