Search Code

Tutorial ESP32 37/55 - Isticmaalka App-ka Bluetooth-ka ee ESP32 BLE | Qalabka Barashada IoT-ga ee SunFounder ee ESP32

Tutorial ESP32 37/55 - Isticmaalka App-ka Bluetooth-ka ee ESP32 BLE | Qalabka Barashada IoT-ga ee SunFounder ee ESP32

Cashiggan, waxaan ku baran doonaa sida loo isticmaalo ESP32 sidii server Bluetooth ah si loo diro loona helo fariimo ka imanaya app mobilka ah. Tani waxay u oggolaanaysaa isgaarsiin isdhexgal ah oo ka dhexeysa guddigaaga ESP32 iyo qalabkaaga mobilka, taasoo ka dhigaysa ku-darka kala-duwan ee mashruucyadaada IoT. Dhammaadka casharkan, waxaad awood u yeelan doontaa inaad fariin ka soo dirto qalabkaaga mobilka ee ESP32 oo aad ku aragto iyada oo lagu muujiyo kormeerka serial-ka.

bluetooth_lightblue

Waxaan u isticmaali doonaa app-ka LightBlue Explorer, kaas oo laga heli karo iOS iyo Android labadaba, si aan ula xiriirno ESP32. Casharkani waa aasaas loogu talagalay fahamka isgaarsiinta Bluetooth Low Energy (BLE) wuxuuna dejiyaa marxaladda mashruucyada horumarsan. Hage muuqaal ah, fadlan fiiri fiidiyowga (fiidiyowga 02:00).

Qalabka La Sharaxay

Qaybta koowaad ee mashruucan waa microcontroller-ka ESP32, kaas oo isku daraya awoodaha Wi-Fi iyo Bluetooth labadaba. Tani waxay u oggolaanaysaa ESP32 inuu u shaqeeyo sidii server, isagoo helaya oo diraya xog si wireless ah. Shaqada Bluetooth-ka ee ku dhex dhisan ESP32 waxay taageertaa BLE, taasoo ka dhigaysa mid waxtar u leh codsiyada tamarta hooseeya.

Marka lagu daro ESP32, waxaan u isticmaali doonaa qalab mobil ah oo app-ka LightBlue lagu rakibay. App-kani wuxuu u oggolaanayaa isticmaalayaasha inay ku xirmaan ESP32 oo ay xog ku soo diraan Bluetooth. Isku-darka qaybahan waxay u oggolaanaysaa isgaarsiin aan kala go 'lahayn oo ka dhexeysa ESP32 iyo qalabka mobilka, taasoo kor u qaadaysa isdhexgalka isticmaalaha.

Faahfaahinta Xogta

Soo saaraha Espressif Systems
Nambarka qaybta ESP32-WROOM-32
Danabka Logic/IO 3.3 V
Danabka sahayda 3.0 – 3.6 V
Korontada soo-saarka (kanal kasta) 40 mA
Korontada ugu sarreysa (kanal kasta) 160 mA
Hagaha soo noqnoqoshada PWM 1 kHz
Heerarka caadada ee gelinta 0.2 VCC (hoose), 0.8 VCC (sare)
Hoos u dhaca danabka / RDS(on) / saturation 0.1 V
Xadka kulaylka 125 °C
Baakad QFN48
Qoraallo / noocyo ESP32-WROOM-32, ESP32-WROVER

 

  • Hubi inaad siiso sahayda danab oo deggan (3.3 V) si looga hortago brownouts.
  • Isticmaal capacitors-ka decoupling-ka agagaarka biinanka danabka.
  • Ilaali kala-bixinta kulaylka habboon haddii aad isticmaalayso koronto sare.
  • Ka digtoonow heerarka danabka biinanka GPIO; waxay u dulqaadan karaan 3.3 V.
  • Isticmaal resistors-ka pull-up ama pull-down sida loo baahdo qaabaynta GPIO.
  • La soco xiriirada BLE; hubi in app-ka si sax ah loo lammaaneeyay.
  • Xaqiiji in UUID-yada adeegyada iyo sifooyinka ay yihiin kuwo gaar ah.
  • Si joogto ah u hubi kormeerka serial-ka fariimaha debugging-ga.
  • Tixgeli isticmaalka falanqeeyaha macquulka ah (logic analyzer) xallinta calaamadaha adag.

Tilmaamaha Xiritaanka

Xiritaanka mashruucan waa mid toos ah maadaama ESP32 ugu horrayn ku xirmaayo USB koronto iyo barnaamij. Ku xir ESP32 kombuyuutarkaaga adigoo isticmaalaya fiilada micro USB. Hubi in port-ka USB uu siinayo koronto ku filan (sida caadiga ah 5 V). Kormeerka serial-ka ayaa loo isticmaali doonaa debugging-ga, marka looma baahna xiritaanno qalab dheeri ah codsigan.

Markaad isticmaalayso ESP32 qaybo dibadeed mashruucyada mustaqbalka, xusuusnow inaad ku xirto biinanka dhulka (ground) dhul guud. Tani waxay hubinaysaa in ESP32 iyo wax kasta oo dareeme ama module ah ay wadaagaan isla meesha tixraaca. Intaa waxaa dheer, haddii aad isticmaalayso batari, ku xir biinka togan ee 3.3 V iyo biinka taban ee biin dhulka ee ESP32.

Tusaalooyinka Koodhka & Sharaxaad

Koodhka la bixiyay wuxuu bilaabayaa server-ka Bluetooth, wuxuu dejinayaa adeegyada iyo sifooyinka lagama maarmaanka ah, wuxuuna wax ka qabtaa fariimaha soo gelaya. Aqoonsiyada muhiimka ah waxaa ka mid ah bleName, kaas oo qeexaya magaca qalabka Bluetooth, iyo receivedText, kaas oo kaydiya fariinta soo gashay ee app-ka mobilka.

const char *bleName = "ESP32_Bluetooth";
String receivedText = "";

Shaqada setup() waxay bilaabaysaa isgaarsiinta serial-ka iyo dejinta BLE. Tani waa mid muhiim u ah samaynta xiriirka app-ka LightBlue.

void setup() {
  Serial.begin(115200);  // Bilaab port-ka serial-ka
  setupBLE();            // Bilaab Bluetooth BLE
}

Gudaha shaqada loop(), koodhku wuxuu hubinayaa fariimaha soo gelaya. Haddii fariin cusub la helo, waxaa lagu daabacaa kormeerka serial-ka, waxaana loo diraa ogeysiis qalabka BLE ee ku xiran.

if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("Fariinta la helay: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
}

Si aad u fahanto dhammaan, fiiri koodhka buuxa ee hoos ku shubanaya maqaalka. Tani waxay ku siin doontaa faahfaahinta lagama maarmaanka ah si aad si guul leh u hirgeliso mashruuca.

Muuujin / Waxa Laga Filanayo

Marka hirgelinta lagu guuleysto, waxaad awood u yeelan doontaa inaad fariimo ka soo dirto app-ka LightBlue ee ESP32. Markaad qorto fariin, sida "Hello," waxay ka soo bixi doontaa kormeerka serial-ka. Intaa waxaa dheer, waxaad dib ugu soo diri kartaa fariimo app-ka, taasoo xaqiijinaysa isgaarsiinta labada dhinac. Haddii aad la kulanto arrimo sida fariimaha aan soo bixin, hubi in ESP32 si sax ah loogu lammaaneeyay app-ka iyo in UUID-yada ay isku mid yihiin.

Waqtiyada Fiidiyowga

  • 00:00 Bilow
  • 2:10 Hordhaca mashruuca
  • 2:45 Bogga dukumeentiga
  • 4:04 Koodhka Arduino
  • 6:31 Ku rakibida App-ka Bluetooth-ka
  • 7:12 Doorashada looxa ESP32 iyo dekedda COM
  • 8:54 Bandejiga mashruuca

Sawirro

bluetooth_lightblue
bluetooth_lightblue
838-ESP32 Tutorial 37/55- Arduino code for Bluetooth app test
Luqadda: C++
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"

// Define the Bluetooth device name
const char *bleName = "ESP32_Bluetooth";

// Define the received text and the time of the last message
String receivedText = "";
unsigned long lastMessageTime = 0;

// Define the UUIDs of the service and characteristics
#define SERVICE_UUID           "your_service_uuid_here"
#define CHARACTERISTIC_UUID_RX "your_rx_characteristic_uuid_here"
#define CHARACTERISTIC_UUID_TX "your_tx_characteristic_uuid_here"

// Define the Bluetooth characteristic
BLECharacteristic *pCharacteristic;

void setup() {
  Serial.begin(115200);  // Initialize the serial port
  setupBLE();            // Initialize the Bluetooth BLE
}

void loop() {
  // When the received text is not empty and the time since the last message is over 1 second
  // Send a notification and print the received text
  if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("Received message: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
  }

  // Read data from the serial port and send it to BLE characteristic
  if (Serial.available() > 0) {
    String str = Serial.readStringUntil('\n');
    const char *newValue = str.c_str();
    pCharacteristic->setValue(newValue);
    pCharacteristic->notify();
  }
}

// Define the BLE server callbacks
class MyServerCallbacks : public BLEServerCallbacks {
  // Print the connection message when a client is connected
  void onConnect(BLEServer *pServer) {
    Serial.println("Connected");
  }
  // Print the disconnection message when a client is disconnected
  void onDisconnect(BLEServer *pServer) {
    Serial.println("Disconnected");
  }
};

// Define the BLE characteristic callbacks
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
    // When data is received, get the data and save it to receivedText, and record the time
    std::string value = std::string(pCharacteristic->getValue().c_str());
    receivedText = String(value.c_str());
    lastMessageTime = millis();
    Serial.print("Received: ");
    Serial.println(receivedText);
  }
};

// Initialize the Bluetooth BLE
void setupBLE() {
  BLEDevice::init(bleName);                        // Initialize the BLE device
  BLEServer *pServer = BLEDevice::createServer();  // Create the BLE server
  // Print the error message if the BLE server creation fails
  if (pServer == nullptr) {
    Serial.println("Error creating BLE server");
    return;
  }
  pServer->setCallbacks(new MyServerCallbacks());  // Set the BLE server callbacks

  // Create the BLE service
  BLEService *pService = pServer->createService(SERVICE_UUID);
  // Print the error message if the BLE service creation fails
  if (pService == nullptr) {
    Serial.println("Error creating BLE service");
    return;
  }
  // Create the BLE characteristic for sending notifications
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
  pCharacteristic->addDescriptor(new BLE2902());  // Add the descriptor
  // Create the BLE characteristic for receiving data
  BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
  pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks());  // Set the BLE characteristic callbacks
  pService->start();                                                 // Start the BLE service
  pServer->getAdvertising()->start();                                // Start advertising
  Serial.println("Waiting for a client connection...");              // Wait for a client connection
}

Kheyraadka & Tixraacyada

Faylasha📁

Fayl la'aan.