Pretraži kod

ESP32 Tutorijal 37/55 - Korištenje Bluetooth aplikacije sa ESP32 BLE | SunFounder's ESP32 IoT Learning komplet

ESP32 Tutorijal 37/55 - Korištenje Bluetooth aplikacije sa ESP32 BLE | SunFounder's ESP32 IoT Learning komplet

U ovom tutorijalu ćemo istražiti kako koristiti ESP32 kao Bluetooth server za slanje i primanje poruka sa mobilne aplikacije. Ovo omogućava interaktivnu komunikaciju između vaše ESP32 ploče i vašeg mobilnog uređaja, čineći je svestranim dodatkom vašim IoT projektima. Do kraja ove lekcije, moći ćete slati tekst sa svog mobilnog uređaja na ESP32 i vidjeti ga prikazanog na serijskom monitoru.

bluetooth_lightblue

Koristit ćemo LightBlue Explorer aplikaciju, dostupnu na iOS i Android platformama, za komunikaciju sa ESP32. Ovaj tutorijal je temelj za razumijevanje Bluetooth Low Energy (BLE) komunikacije i postavlja temelje za naprednije projekte. Za vizualni vodič, pogledajte video na (u videu na 02:00).

Objašnjenje hardvera

Primarna komponenta u ovom projektu je ESP32 mikrokontroler, koji integrira i Wi-Fi i Bluetooth mogućnosti. Ovo omogućava ESP32 da djeluje kao server, primajući i šaljući podatke bežično. Ugrađena Bluetooth funkcionalnost ESP32 podržava BLE, čineći ga efikasnim za aplikacije niske potrošnje energije.

Pored ESP32, koristit ćemo mobilni uređaj sa instaliranom LightBlue aplikacijom. Ova aplikacija omogućava korisnicima da se povežu na ESP32 i šalju podatke putem Bluetootha. Integracija ovih komponenti omogućava besprijekornu komunikaciju između ESP32 i mobilnih uređaja, poboljšavajući interakciju s korisnikom.

Detalji iz tehničke dokumentacije

Proizvođač Espressif Systems
Broj dijela ESP32-WROOM-32
Logički/IO napon 3.3 V
Napon napajanja 3.0 – 3.6 V
Izlazna struja (po kanalu) 40 mA
Maksimalna struja (po kanalu) 160 mA
Smjernice za PWM frekvenciju 1 kHz
Ulazni logički pragovi 0.2 VCC (nisko), 0.8 VCC (visoko)
Pad napona / RDS(on) / zasićenje 0.1 V
Toplotna ograničenja 125 °C
Paket QFN48
Napomene / varijante ESP32-WROOM-32, ESP32-WROVER

 

  • Osigurajte stabilno napajanje (3.3 V) kako biste spriječili padove napona.
  • Koristite kondenzatore za razdvajanje blizu pinova napajanja.
  • Održavajte pravilno odvođenje topline ako koristite visoku struju.
  • Budite oprezni s nivoima napona na GPIO pinovima; tolerišu 3.3 V.
  • Koristite pull-up ili pull-down otpornike prema potrebi za GPIO konfiguracije.
  • Pratite BLE veze; osigurajte da je aplikacija pravilno uparena.
  • Provjerite da su UUID-ovi za servise i karakteristike jedinstveni.
  • Redovno provjeravajte serijski monitor za poruke za otklanjanje grešaka.
  • Razmotrite korištenje logičkog analizatora za složeno otklanjanje grešaka u signalima.

Upute za povezivanje

Povezivanje za ovaj projekt je jednostavno jer se ESP32 prvenstveno povezuje putem USB-a za napajanje i programiranje. Povežite ESP32 na računar pomoću mikro USB kabla. Osigurajte da USB port pruža dovoljno napajanja (obično 5 V). Serijski monitor će se koristiti za otklanjanje grešaka, tako da nisu potrebne dodatne hardverske veze za ovu aplikaciju.

Kada koristite ESP32 s vanjskim komponentama u budućim projektima, zapamtite da spojite pinove uzemljenja na zajedničko uzemljenje. Ovo osigurava da ESP32 i bilo koji povezani senzori ili moduli dijele istu referentnu tačku. Dodatno, ako koristite bateriju, spojite pozitivni terminal na 3.3 V pin, a negativni terminal na pin uzemljenja na ESP32.

Primjeri koda i objašnjenje

Dostavljeni kod inicijalizira Bluetooth server, postavlja potrebne servise i karakteristike te obrađuje dolazne poruke. Ključni identifikatori uključuju bleName, koji definira naziv Bluetooth uređaja, i receivedText, koji pohranjuje dolaznu poruku iz mobilne aplikacije.

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

Funkcija setup() inicijalizira serijsku komunikaciju i BLE postavke. Ovo je ključno za uspostavljanje veze s LightBlue aplikacijom.

void setup() {
  Serial.begin(115200);  // Inicijaliziraj serijski port
  setupBLE();            // Inicijaliziraj Bluetooth BLE
}

Unutar funkcije loop(), kod provjerava dolazne poruke. Ako je primljena nova poruka, ispisuje se na serijski monitor i šalje se obavijest povezanom BLE uređaju.

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

Za potpuno razumijevanje, pogledajte kompletan kod koji se učitava ispod članka. Ovo će vam pružiti sve potrebne detalje za uspješnu implementaciju projekta.

Demonstracija / Šta očekivati

Nakon uspješne implementacije, trebali biste moći slati poruke iz LightBlue aplikacije na ESP32. Dok kucate poruku, kao što je "Zdravo," pojavit će se na serijskom monitoru. Dodatno, možete slati poruke nazad u aplikaciju, potvrđujući dvosmjernu komunikaciju. Ako naiđete na probleme poput poruka koje se ne pojavljuju, osigurajte da je ESP32 pravilno uparen s aplikacijom i da se UUID-ovi podudaraju.

Vremenske oznake videa

  • 00:00 Početak
  • 2:10 Uvod u projekat
  • 2:45 Stranica s dokumentacijom
  • 4:04 Arduino kod
  • 6:31 Instalacija Bluetooth aplikacije
  • 7:12 Odabir ESP32 ploče i COM porta
  • 8:54 Demonstracija projekta

Slike

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

Resursi i reference

Datoteke📁

Nema dostupnih datoteka.