Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <Adafruit_Sensor.h>
- #include <Adafruit_BNO055.h>
- #include <utility/imumaths.h>
- #include <BLEDevice.h>
- #include <BLEServer.h>
- #include <BLEUtils.h>
- #include <BLE2902.h>
- #define IMUdelay 10 // IMU refresh rate in milisec. smaller the delay, more accurate the measurements.
- Adafruit_BNO055 bno = Adafruit_BNO055();
- BLECharacteristic *pCharacteristic;
- bool deviceConnected = false;
- uint8_t txValue = 0;
- // See the following for generating UUIDs:
- // https://www.uuidgenerator.net/
- #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID
- #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
- #define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
- class MyServerCallbacks: public BLEServerCallbacks {
- void onConnect(BLEServer* pServer) {
- deviceConnected = true;
- };
- void onDisconnect(BLEServer* pServer) {
- deviceConnected = false;
- }
- };
- class MyCallbacks: public BLECharacteristicCallbacks {
- void onWrite(BLECharacteristic *pCharacteristic) {
- std::string rxValue = pCharacteristic->getValue();
- if (rxValue.length() > 0) {
- Serial.println("*********");
- Serial.print("Received Value: ");
- for (int i = 0; i < rxValue.length(); i++)
- Serial.print(rxValue[i]);
- Serial.println();
- Serial.println("*********");
- }
- }
- };
- void setup() {
- Serial.begin(115200);
- if (!bno.begin())
- {
- Serial.printf("No BNO055 detected ..."); // Connection failed
- while (1);
- }
- delay(1000);
- bno.setExtCrystalUse(true);
- // Create the BLE Device
- BLEDevice::init("UART Service");
- // Create the BLE Server
- BLEServer *pServer = BLEDevice::createServer();
- pServer->setCallbacks(new MyServerCallbacks());
- // Create the BLE Service
- BLEService *pService = pServer->createService(SERVICE_UUID);
- // Create a BLE Characteristic
- pCharacteristic = pService->createCharacteristic(
- CHARACTERISTIC_UUID_TX,
- BLECharacteristic::PROPERTY_READ
- );
- pCharacteristic->addDescriptor(new BLE2902());
- BLECharacteristic *pCharacteristic = pService->createCharacteristic(
- CHARACTERISTIC_UUID_RX,
- BLECharacteristic::PROPERTY_WRITE
- );
- pCharacteristic->setCallbacks(new MyCallbacks());
- // Start the service
- pService->start();
- // Start advertising
- pServer->getAdvertising()->start();
- Serial.println("Waiting a client connection to notify...");
- }
- void loop() {
- // Possible vector values can be:
- // - VECTOR_ACCELEROMETER - m/s^2
- // - VECTOR_MAGNETOMETER - uT
- // - VECTOR_GYROSCOPE - rad/s
- // - VECTOR_EULER - degrees
- // - VECTOR_LINEARACCEL - m/s^2
- // - VECTOR_GRAVITY - m/s^2
- //https://www.allaboutcircuits.com/projects/bosch-absolute-orientation-sensor-bno055/
- imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);
- imu::Vector<3> accelerometer = bno.getVector(Adafruit_BNO055::VECTOR_ACCELEROMETER);
- imu::Vector<3> gyroscope = bno.getVector(Adafruit_BNO055::VECTOR_GYROSCOPE);
- uint8_t system, gyro, accel, mag = 0;
- bno.getCalibration(&system, &gyro, &accel, &mag); // get calibration
- if (deviceConnected) {
- String datastring = "ESP32: ";
- datastring += euler.y();
- //Serial.printf("*** Sent Value: %d ***\n", txValue);
- Serial.printf("*** Sent Value: %d ***\n", euler.y());
- //pCharacteristic->setValue(datastring.c_str());
- pCharacteristic->setValue(datastring.c_str());
- pCharacteristic->notify();
- txValue++;
- }
- delay(1000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement