Reputation: 1
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