Переделал под свой датчик bme280 и под свою платку ble400
Dependencies: mbed BLE_API nRF51822
main.cpp
- Committer:
- mamont090671
- Date:
- 2019-11-29
- Revision:
- 7:5acbc9a636d3
- Parent:
- 6:25ed8e2df02e
File content as of revision 7:5acbc9a636d3:
#include "mbed.h" #include "BLE.h" #include "WeatherService.h" #include "bme280.h" #define I2C_SDA P0_0 #define I2C_SCL P0_1 float t; float pr; float h; uint8_t address = 0x78; I2C i2c(I2C_SDA, I2C_SCL); BLE ble; DigitalOut okLED(LED1); DigitalOut errLED(LED2); DigitalOut instrumentsPower(P0_22); BME280 bme280; const static char DEVICE_NAME[] = "Weather Station"; static const uint16_t serviceList[] = { GattService::UUID_ENVIRONMENTAL_SERVICE }; static volatile bool triggerSensorPolling = false; //bme280 void i2cWrite(uint8_t i2c_address, uint8_t *p_data, uint8_t data_size, uint8_t repeated_start) { // mbed uses 8-bit addresses, always confusing. i2c.write(i2c_address<<1,(const char *)p_data,data_size,repeated_start); } void i2cRead(uint8_t i2c_address, uint8_t *p_data, uint8_t data_size) { // mbed uses 8-bit addresses, always confusing. i2c.read(i2c_address<<1,(char *)p_data,data_size); } void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { /* Restart Advertising on disconnection*/ ble.gap().startAdvertising(); } void blink(void) { // statusLED = !statusLED; triggerSensorPolling = true; } void updateFromBME280() { bme280.read(); t = bme280.temperature(); // float p = bme280.pressure()/100; // pr = p*0.750062; pr = bme280.pressure(); h = bme280.humidity(); } int main(void) { okLED = 0; errLED = 0; Ticker ticker; ticker.attach(blink, 5); ble.init(); bme280.begin(BME280_I2C_ADDRESS1); // Configure for test purposes. bme280.writeConfigRegister(BME280_STANDBY_500_US,BME280_FILTER_OFF,0); bme280.writeControlRegisters(BME280_OVERSAMPLING_1X,BME280_OVERSAMPLING_1X,BME280_OVERSAMPLING_1X,BME280_MODE_NORMAL); ble.gap().onDisconnection(disconnectionCallback); /* Setup weather service. */ WeatherService weatherService(ble); /* setup advertising */ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)serviceList, sizeof(serviceList)); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::UNKNOWN); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.gap().setAdvertisingInterval(1000); /* 1000ms */ ble.gap().startAdvertising(); while (true) { if (triggerSensorPolling && ble.getGapState().connected) { okLED = 1; triggerSensorPolling = false; instrumentsPower = 1; wait(1); updateFromBME280(); instrumentsPower = 0; weatherService.updateTemperature(t); weatherService.updatePressure(pr); weatherService.updateHumidity(h); } else { okLED = 0; ble.waitForEvent(); } } }