sulianoar
sulianoar

Reputation: 1

Xiao ESP32 Sense send camera picture over bluetooth

I want to connect my xiao esp32 sense board to my phone using my own app to get camera picture.

I tried bluetooth only, it work. But if i add camera support i cannot see the board. I tested on "nrf connect" app, i got the same problem, i cannot see/connect to the bard anymore. Any idea ? Here is my code for camera + bluetooth. As you can see, i'm waiting for a client to start capture picture.

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#include <BLEAdvertising.h>
#include <BLE2902.h>
#include "esp_camera.h"
#include "camera_pins.h"

#define CAMERA_MODEL_AI_THINKER
#define DEVICE_NAME "Xiao_ESP32_Sense"
#define SERVICE_UUID        "12345678-1234-1234-1234-1234567890ab"
#define CHARACTERISTIC_UUID "87654321-4321-4321-4321-1234567890ab"

BLECharacteristic *pCharacteristic;
bool deviceConnected = false;

class MyServerCallbacks : public BLEServerCallbacks {
    void onConnect(BLEServer *pServer) {
        deviceConnected = true;
        Serial.println("Client connected");
    }

    void onDisconnect(BLEServer *pServer) {
        deviceConnected = false;
        Serial.println("Client disconnected");
    }
};

void captureAndSendImage() {
    if (deviceConnected) {
        camera_fb_t *fb = esp_camera_fb_get();
        if (!fb) {
            Serial.println("Cannot capture");
            return;
        }
        pCharacteristic->setValue(fb->buf, fb->len);
        pCharacteristic->notify();
        Serial.println("pic sent !");

        esp_camera_fb_return(fb);
    }  
}


void setup() {
    Serial.begin(115200);
    Serial.println("Strating...");
    BLEDevice::init(DEVICE_NAME);

    BLEServer *pServer = BLEDevice::createServer();
    pServer->setCallbacks(new MyServerCallbacks());


    BLEService *pService = pServer->createService(SERVICE_UUID);

    pCharacteristic = pService->createCharacteristic(
    CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE);
    pCharacteristic->addDescriptor(new BLE2902());
    pService->start();

    // BLE Advertising
    BLEAdvertising *pAdvertising = pServer->getAdvertising();
    pAdvertising->setScanResponse(true);
    BLEAdvertisementData advertisementData;
    advertisementData.setName(DEVICE_NAME);  
    advertisementData.setFlags(0x06);
    pAdvertising->setAdvertisementData(advertisementData);
    pAdvertising->start(); 

    camera_config_t config;

    config.ledc_channel = LEDC_CHANNEL_0;
    config.ledc_timer = LEDC_TIMER_0;
    config.pin_d0 = 16;
    config.pin_d1 = 17;
    config.pin_d2 = 18;
    config.pin_d3 = 19;
    config.pin_d4 = 21;
    config.pin_d5 = 22;
    config.pin_d6 = 23;
    config.pin_d7 = 25;
    config.pin_xclk = 0;
    config.pin_pclk = 4;
    config.pin_vsync = 5;
    config.pin_href = 27;
    config.pin_sscb_sda = 26;
    config.pin_sscb_scl = 32;
    config.pin_pwdn = 33;
    config.pin_reset = -1;
    config.xclk_freq_hz = 20000000;
    config.pixel_format = PIXFORMAT_JPEG;

    esp_camera_init(&config);
}

void loop() {
    if (deviceConnected) {
        captureAndSendImage();
        delay(500);  
    } else {
        delay(1000); 
    }
}
`

Upvotes: 0

Views: 36

Answers (0)

Related Questions