BLE広告名
This commit is contained in:
parent
5e052dba93
commit
787f236fc6
|
|
@ -39,11 +39,19 @@ private:
|
|||
|
||||
class SensorLoggerServerCallbacks : public BLEServerCallbacks {
|
||||
public:
|
||||
void onConnect(BLEServer*) override {}
|
||||
explicit SensorLoggerServerCallbacks(SensorLogger* logger) : logger_(logger) {}
|
||||
|
||||
void onConnect(BLEServer*) override {
|
||||
logger_->bluetoothConnected_ = true;
|
||||
}
|
||||
|
||||
void onDisconnect(BLEServer* server) override {
|
||||
logger_->bluetoothConnected_ = false;
|
||||
server->startAdvertising();
|
||||
}
|
||||
|
||||
private:
|
||||
SensorLogger* logger_;
|
||||
};
|
||||
|
||||
void SensorLogger::begin(uint8_t soilPin) {
|
||||
|
|
@ -61,7 +69,7 @@ void SensorLogger::begin(uint8_t soilPin) {
|
|||
BLEDevice::init(bluetoothName_.c_str());
|
||||
|
||||
server_ = BLEDevice::createServer();
|
||||
server_->setCallbacks(new SensorLoggerServerCallbacks());
|
||||
server_->setCallbacks(new SensorLoggerServerCallbacks(this));
|
||||
BLEService* service = server_->createService(kNusServiceUuid);
|
||||
BLECharacteristic* rxCharacteristic = service->createCharacteristic(
|
||||
kNusRxUuid, BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_WRITE_NR);
|
||||
|
|
@ -94,6 +102,24 @@ bool SensorLogger::update() {
|
|||
return false;
|
||||
}
|
||||
|
||||
void SensorLogger::refreshSensors() {
|
||||
SensorReading reading = {};
|
||||
sensors_event_t humidityEvent;
|
||||
sensors_event_t temperatureEvent;
|
||||
|
||||
if (aht20Ready) {
|
||||
aht20.getEvent(&humidityEvent, &temperatureEvent);
|
||||
reading.temperature = temperatureEvent.temperature;
|
||||
reading.humidity = humidityEvent.relative_humidity;
|
||||
}
|
||||
if (bh1750Ready) {
|
||||
reading.illuminance = bh1750.readLightLevel();
|
||||
}
|
||||
reading.soilMoisture = analogRead(soilPin_);
|
||||
reading.timestamp = latest_.timestamp;
|
||||
latest_ = reading;
|
||||
}
|
||||
|
||||
const SensorReading& SensorLogger::latest() const {
|
||||
return latest_;
|
||||
}
|
||||
|
|
@ -102,6 +128,14 @@ bool SensorLogger::hasReading() const {
|
|||
return logCount_ != 0;
|
||||
}
|
||||
|
||||
const char* SensorLogger::bluetoothName() const {
|
||||
return bluetoothName_.c_str();
|
||||
}
|
||||
|
||||
bool SensorLogger::isBluetoothConnected() const {
|
||||
return bluetoothConnected_;
|
||||
}
|
||||
|
||||
size_t SensorLogger::logCount() const {
|
||||
return logCount_;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,10 +19,13 @@ public:
|
|||
|
||||
void begin(uint8_t soilPin);
|
||||
bool update();
|
||||
void refreshSensors();
|
||||
const SensorReading& latest() const;
|
||||
bool hasReading() const;
|
||||
size_t logCount() const;
|
||||
bool getCurrentTime(char* buffer, size_t bufferSize) const;
|
||||
const char* bluetoothName() const;
|
||||
bool isBluetoothConnected() const;
|
||||
|
||||
private:
|
||||
static constexpr unsigned long kMeasureIntervalMs = 3600000UL;
|
||||
|
|
@ -46,8 +49,10 @@ private:
|
|||
unsigned long lastMeasure_ = 0;
|
||||
int64_t epochOffset_ = 0;
|
||||
bool timeSynchronized_ = false;
|
||||
bool bluetoothConnected_ = false;
|
||||
String bluetoothName_;
|
||||
String commandBuffer_;
|
||||
|
||||
friend class SensorLoggerCallbacks;
|
||||
friend class SensorLoggerServerCallbacks;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -31,24 +31,32 @@ void updateDisplay() {
|
|||
|
||||
char sensorLine[32];
|
||||
char timeLine[24];
|
||||
if (sensorLogger.isBluetoothConnected()) {
|
||||
u8g2.setDrawColor(1);
|
||||
u8g2.drawBox(0, 0, 128, 10);
|
||||
u8g2.setDrawColor(0);
|
||||
}
|
||||
u8g2.drawStr(0, 9, sensorLogger.bluetoothName());
|
||||
u8g2.setDrawColor(1);
|
||||
|
||||
if (sensorLogger.getCurrentTime(timeLine, sizeof(timeLine))) {
|
||||
u8g2.drawStr(0, 9, timeLine);
|
||||
u8g2.drawStr(0, 20, timeLine);
|
||||
} else {
|
||||
u8g2.drawStr(0, 9, "RTC: --/--/-- --:--:--");
|
||||
u8g2.drawStr(0, 20, "RTC: --/--/-- --:--:--");
|
||||
}
|
||||
|
||||
snprintf(sensorLine, sizeof(sensorLine), "Log: %u", static_cast<unsigned int>(sensorLogger.logCount()));
|
||||
u8g2.drawStr(0, 20, sensorLine);
|
||||
u8g2.drawStr(0, 31, sensorLine);
|
||||
|
||||
snprintf(sensorLine, sizeof(sensorLine), "T:%5.1fC H:%5.1f%%",
|
||||
reading.temperature, reading.humidity);
|
||||
u8g2.drawStr(0, 32, sensorLine);
|
||||
u8g2.drawStr(0, 42, sensorLine);
|
||||
|
||||
snprintf(sensorLine, sizeof(sensorLine), "Light: %6.1f lx", reading.illuminance);
|
||||
u8g2.drawStr(0, 44, sensorLine);
|
||||
u8g2.drawStr(0, 53, sensorLine);
|
||||
|
||||
snprintf(sensorLine, sizeof(sensorLine), "Soil: %4u", reading.soilMoisture);
|
||||
u8g2.drawStr(0, 56, sensorLine);
|
||||
u8g2.drawStr(0, 64, sensorLine);
|
||||
u8g2.sendBuffer();
|
||||
return;
|
||||
}
|
||||
|
|
@ -171,6 +179,7 @@ void loop() {
|
|||
if ((!bluetoothConnected || !musicPlaying)
|
||||
&& (newReading || now - lastDisplayUpdate >= 1000UL)) {
|
||||
lastDisplayUpdate = now;
|
||||
sensorLogger.refreshSensors();
|
||||
updateDisplay();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue