Search Code

Koyarwar ESP32 37/55 - Yin Amfani da App na Bluetooth tare da ESP32 BLE | Kayan Koyon IoT na SunFounder's ESP32

Koyarwar ESP32 37/55 - Yin Amfani da App na Bluetooth tare da ESP32 BLE | Kayan Koyon IoT na SunFounder's ESP32

A cikin wannan koyawa, za mu bincika yadda ake amfani da ESP32 a matsayin uwar garken Bluetooth don aika da karɓar saƙonni daga manhajar wayar hannu. Wannan yana ba da damar sadarwa mai mu'amala tsakanin allo ɗin ESP32 ɗinka da na'urar wayar hannu, yana mai da shi ƙari mai amfani ga ayyukan IoT ɗinka. A ƙarshen wannan darasi, za ka iya aika rubutu daga na'urar wayar hannu zuwa ESP32 kuma ka gan shi an nuna shi a kan serial monitor.

bluetooth_lightblue

Za mu yi amfani da manhajar LightBlue Explorer, wadda ke samuwa akan iOS da Android, don sadarwa da ESP32. Wannan koyawa tushe ce don fahimtar sadarwar Bluetooth Low Energy (BLE) kuma tana shirya mataki don ayyuka masu ci gaba. Don jagorar gani, da fatan za a koma ga bidiyon a (a cikin bidiyo a 02:00).

Kayan Aiki Da Aka Bayyana

Babban ɓangaren wannan aikin shine microcontroller ɗin ESP32, wanda ya haɗa damar Wi-Fi da Bluetooth. Wannan yana ba da damar ESP32 ya zama uwar garken, yana karɓar da aika bayanai ba tare da waya ba. Aikin Bluetooth ɗin da ke cikin ESP32 yana goyan bayan BLE, yana mai da shi ingantacce don aikace-aikacen ƙarancin wutar lantarki.

Baya ga ESP32, za mu yi amfani da na'urar wayar hannu tare da manhajar LightBlue da aka shigar. Wannan manhajar tana ba da damar masu amfani su haɗa zuwa ESP32 kuma su aika bayanai ta hanyar Bluetooth. Haɗin waɗannan ɓangarorin yana ba da damar sadarwa mara matsala tsakanin ESP32 da na'urorin wayar hannu, yana haɓaka mu'amalar mai amfani.

Cikakkun Bayanai na Datasheet

Mai ƙirƙira Espressif Systems
Lambar ɓangare ESP32-WROOM-32
Wutar Logic/IO 3.3 V
Wutar samarwa 3.0 – 3.6 V
Ƙarfin fitarwa (kowane tashar) 40 mA
Ƙarfin kololuwa (kowane tashar) 160 mA
Jagorar mitar PWM 1 kHz
Matakan ƙofar shigarwa 0.2 VCC (ƙasa), 0.8 VCC (babba)
Faduwar wutar / RDS(on) / saturation 0.1 V
Iyakokin zafi 125 °C
Kunshin QFN48
Bayanan kula / bambance-bambance ESP32-WROOM-32, ESP32-WROVER

 

  • Tabbatar da samar da wutar lantarki mai ƙarfi (3.3 V) don hana raguwar wutar.
  • Yi amfani da capacitors don decoupling kusa da fil ɗin wutar.
  • Kula da zubar da zafi yadda ya kamata idan ana amfani da babban ƙarfin wuta.
  • Yi hattara da matakan wutar fil ɗin GPIO; suna iya ɗaukar 3.3 V.
  • Yi amfani da resistors na pull-up ko pull-down kamar yadda ake buƙata don saitunan GPIO.
  • Kula da haɗin BLE; tabbatar da manhajar an haɗa ta da kyau.
  • Tabbatar da UUIDs don ayyuka da halaye sun bambanta.
  • A kai a kai duba serial monitor don saƙonnin gyara kuskure.
  • Yi la'akari da amfani da logic analyzer don warware matsalolin sigina masu rikitarwa.

Umarnin Haɗin Waya

Haɗin waya don wannan aikin yana da sauƙi tunda ESP32 yana haɗawa da farko ta USB don wutar lantarki da shirye-shirye. Haɗa ESP32 zuwa kwamfutarka ta amfani da kebul na micro USB. Tabbatar cewa tashar USB tana ba da isasshen wutar lantarki (yawanci 5 V). Za a yi amfani da serial monitor don gyara kuskure, don haka babu buƙatar ƙarin haɗin kayan aiki don wannan aikace-aikacen.

Lokacin amfani da ESP32 tare da abubuwan waje a ayyukan gaba, ka tuna don haɗa fil ɗin ƙasa zuwa ƙasa ɗaya. Wannan yana tabbatar da cewa ESP32 da duk wani na'urori ko moduloli da aka haɗa suna raba wurin tunani ɗaya. Bugu da ƙari, idan kana amfani da baturi, haɗa ƙarshen tabbatacce zuwa fil ɗin 3.3 V kuma ƙarshen mara kyau zuwa fil ɗin ƙasa akan ESP32.

Misalan Lamba & Bayani

Lambar da aka bayar tana fara uwar garken Bluetooth, tana saita ayyuka da halaye masu dacewa, kuma tana sarrafa saƙonni masu shigowa. Maɓallan ganowa sun haɗa da bleName, wanda ke bayyana sunan na'urar Bluetooth, da receivedText, wanda ke adana saƙon da ke shigowa daga manhajar wayar hannu.

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

Aikin setup() yana fara sadarwar serial da saitin BLE. Wannan yana da mahimmanci don kafa haɗi tare da manhajar LightBlue.

void setup() {
  Serial.begin(115200);  // Fara tashar serial
  setupBLE();            // Fara Bluetooth BLE
}

A cikin aikin loop(), lambar tana duba saƙonni masu shigowa. Idan an karɓi sabon saƙo, ana buga shi a serial monitor, kuma ana aika sanarwa zuwa na'urar BLE da aka haɗa.

if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("An karɓi saƙo: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
}

Don cikakkiyar fahimta, koma ga cikakkiyar lambar da ke ƙasa a ƙarƙashin labarin. Wannan zai ba ka duk cikakkun bayanai da ake buƙata don aiwatar da aikin cikin nasara.

Nunawa / Abin Da Za Ka Yi Tsammani

Bayan aiwatarwa cikin nasara, ya kamata ka iya aika saƙonni daga manhajar LightBlue zuwa ESP32. Yayin da kake rubuta saƙo, kamar "Sannu," zai bayyana a serial monitor. Bugu da ƙari, za ka iya aika saƙonni baya zuwa manhajar, yana tabbatar da sadarwar hanya biyu. Idan ka gamu da matsaloli kamar saƙonni ba su bayyana ba, tabbatar da cewa ESP32 an haɗa shi da kyau da manhajar kuma UUIDs sun dace.

Lokacin Bidiyo

  • 00:00 Farawa
  • 2:10 Gabatarwa ga aikin
  • 2:45 Shafin takardu
  • 4:04 Lambar Arduino
  • 6:31 Shigar da Bluetooth App
  • 7:12 Zaɓin allon ESP32 da tashar COM
  • 8:54 Nunin aikin

Hotuna

bluetooth_lightblue
bluetooth_lightblue
838-ESP32 Tutorial 37/55- Arduino code for Bluetooth app test
Harshe: 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
}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Babu fayiloli da ake da su.