ESP32/Arduino BLE UART Client Connect To Raspberry Pi Pico ...
Maybe your like
Wednesday, May 19, 2021
ESP32/Arduino BLE UART Client connect to Raspberry Pi Pico/CircuitPython + ESP32/nina-fw
It's a BLE UART Client exercise run on ESP2-DevKitC using arduino-esp32 framework. Connect to cpyPico_ESP32_BLE.py in Raspberry Pi Pico/CircuitPython + ESP32/adafruit nina-fw (act as WiFi/BLE Co-Processor).

It search BLE device with specified service UUID, and characteristics for TX and RX. Then sending something every 5 seconds. In the Pico/CircuitPython +ESP32/nina-fw server side, receive and echo back every bytes. This client then print the received byte on Terminal.
ESP32_BLE_client.ino /* Modify from Arduino Examples for ESP32 Dev Module: > ESP32 BLE Arduino > BLE_client */ #include "BLEDevice.h" //#include "BLEScan.h" #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" // RX Characteristic #define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" // TX Characteristic static BLEUUID serviceUUID(SERVICE_UUID); static BLEUUID charUUID_RX(CHARACTERISTIC_UUID_RX); static BLEUUID charUUID_TX(CHARACTERISTIC_UUID_TX); static boolean doConnect = false; static boolean connected = false; static boolean doScan = false; static BLERemoteCharacteristic* pTXCharacteristic; static BLERemoteCharacteristic* pRXCharacteristic; static BLEAdvertisedDevice* myDevice; static void notifyCallback( BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) { /* Serial.print("Notify callback for characteristic "); Serial.print(pBLERemoteCharacteristic->getUUID().toString().c_str()); Serial.print(" of data length "); Serial.println(length); Serial.print("data: "); Serial.println((char*)pData); */ Serial.print((char*)pData); } class MyClientCallback : public BLEClientCallbacks { void onConnect(BLEClient* pclient) { } void onDisconnect(BLEClient* pclient) { connected = false; Serial.println("onDisconnect"); } }; bool connectToServer() { Serial.print("Forming a connection to "); Serial.println(myDevice->getAddress().toString().c_str()); BLEClient* pClient = BLEDevice::createClient(); Serial.println(" - Created client"); pClient->setClientCallbacks(new MyClientCallback()); // Connect to the remove BLE Server. pClient->connect(myDevice); // if you pass BLEAdvertisedDevice instead of address, // it will be recognized type of peer device address (public or private) Serial.println(" - Connected to server"); // Obtain a reference to the service we are after in the remote BLE server. BLERemoteService* pRemoteService = pClient->getService(serviceUUID); if (pRemoteService == nullptr) { Serial.print("Failed to find our service UUID: "); Serial.println(serviceUUID.toString().c_str()); pClient->disconnect(); return false; } Serial.println(" - Found our service"); // ================================================================================= // Obtain a reference to the characteristic in the service of the remote BLE server. // charUUID_TX pTXCharacteristic = pRemoteService->getCharacteristic(charUUID_TX); if (pTXCharacteristic == nullptr) { Serial.print("Failed to find our characteristic UUID: "); Serial.println(charUUID_TX.toString().c_str()); pClient->disconnect(); return false; } Serial.println(" - Found charUUID_TX characteristic"); // Read the value of the characteristic. if(pTXCharacteristic->canRead()) { std::string value = pTXCharacteristic->readValue(); Serial.print("The characteristic value was: "); Serial.println(value.c_str()); } if(pTXCharacteristic->canNotify()) pTXCharacteristic->registerForNotify(notifyCallback); // ================================================================================= // Obtain a reference to the characteristic in the service of the remote BLE server. // charUUID_RX pRXCharacteristic = pRemoteService->getCharacteristic(charUUID_RX); if (pRXCharacteristic == nullptr) { Serial.print("Failed to find our characteristic UUID: "); Serial.println(charUUID_RX.toString().c_str()); pClient->disconnect(); return false; } Serial.println(" - Found charUUID_RX characteristic"); String helloValue = "Hello Remote Server"; pRXCharacteristic->writeValue(helloValue.c_str(), helloValue.length()); // ================================================================================= connected = true; return true; } /** * Scan for BLE servers and find the first one that * advertises the service we are looking for. */ class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { /** * Called for each advertising BLE server. */ void onResult(BLEAdvertisedDevice advertisedDevice) { Serial.print("BLE Advertised Device found: "); Serial.println(advertisedDevice.toString().c_str()); // We have found a device, // let us now see if it contains the service we are looking for. if (advertisedDevice.haveServiceUUID() && advertisedDevice.isAdvertisingService(serviceUUID)) { BLEDevice::getScan()->stop(); myDevice = new BLEAdvertisedDevice(advertisedDevice); doConnect = true; doScan = true; } // Found our server } // onResult }; // MyAdvertisedDeviceCallbacks void setup() { Serial.begin(115200); Serial.println("Starting Arduino BLE Client application..."); BLEDevice::init(""); // Retrieve a Scanner and set the callback we want to use to be informed when we // have detected a new device. Specify that we want active scanning and start the // scan to run for 5 seconds. BLEScan* pBLEScan = BLEDevice::getScan(); pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setInterval(1349); pBLEScan->setWindow(449); pBLEScan->setActiveScan(true); pBLEScan->start(5, false); } // End of setup. // This is the Arduino main loop function. void loop() { // If the flag "doConnect" is true then we have scanned for and found the desired // BLE Server with which we wish to connect. Now we connect to it. Once we are // connected we set the connected flag to be true. if (doConnect == true) { if (connectToServer()) { Serial.println("We are now connected to the BLE Server."); } else { Serial.println("We have failed to connect to the server; there is nothin more we will do."); } doConnect = false; } // If we are connected to a peer BLE Server, // update the characteristic each time we are reached // with the current time since boot. if (connected) { //String newValue = "Time since boot: " + String(millis()/1000 + "\n"); //Serial.println("Setting new characteristic value to \"" + newValue + "\""); String newValue = " " + String(millis()/1000); // Set the characteristic's value to be the array of bytes that is actually a string. pRXCharacteristic->writeValue(newValue.c_str(), newValue.length()); }else if(doScan){ BLEDevice::getScan()->start(0); // this is just example to start scan after disconnect, // most likely there is better way to do it in arduino } delay(5000); // Delay a second between loops. } // End of loop label: Arduino core for the ESP32, arduino-esp32, BLE (Bluetooth Low Energy), ESP32No comments:
Post a Comment
Newer Post Older Post Home Subscribe to: Post Comments (Atom)My youtube playlist about Arduino
Follow me on Twitter
Follow @rpiiconnectPopular Posts
-
ESP32 + 1.3 inch 240x240 IPS LCD (ST7789 SPI interface), using TFT_eSPI library -
Arduino IDE error - avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied
-
ESP32-DevKitC + 2.8inch 240x320 SPI TFT (ILI9341) using TFT_eSPI library -
Beating Heart animation on 8x8 LED Matrix + Arduino Uno
-
Arduino Due + ESP8266 web server controlled LED
-
ESP32 + 2.4" 320X240 Display (SPI ILI9341), using TFT_eSPI, prepare user setup file. -
ESP32 display with 0.96" 80x160 SPI ST7735 IPS Display, using TFT_eSPI lib -
Arduino Due + ESP8266: Web Control LED -
NodeMCU/ESP8266 act as AP (Access Point) and web server to control GPIO -
NodeMCU (ESP8266) to display on 128x64 I2C OLED, using Adafruit SSD1306 library
Blog Archive
- ► 2022 (2)
- ► July (1)
- ► March (1)
- ► 2020 (30)
- ► December (10)
- ► September (1)
- ► August (2)
- ► July (4)
- ► June (8)
- ► May (4)
- ► April (1)
- ► 2019 (14)
- ► November (1)
- ► October (2)
- ► June (1)
- ► April (3)
- ► March (1)
- ► February (2)
- ► January (4)
- ► 2018 (6)
- ► December (1)
- ► November (2)
- ► October (3)
- ► 2017 (23)
- ► July (1)
- ► June (8)
- ► May (3)
- ► April (10)
- ► January (1)
- ► 2016 (67)
- ► July (1)
- ► June (14)
- ► May (12)
- ► April (23)
- ► March (10)
- ► February (5)
- ► January (2)
- ► 2015 (89)
- ► December (7)
- ► November (5)
- ► October (6)
- ► September (12)
- ► August (1)
- ► July (3)
- ► June (2)
- ► May (19)
- ► April (21)
- ► March (2)
- ► February (4)
- ► January (7)
- ► 2014 (100)
- ► December (11)
- ► November (5)
- ► October (4)
- ► September (15)
- ► August (10)
- ► July (4)
- ► June (1)
- ► May (4)
- ► April (5)
- ► March (14)
- ► February (8)
- ► January (19)
- ► 2013 (167)
- ► December (3)
- ► November (4)
- ► October (13)
- ► September (13)
- ► August (20)
- ► July (19)
- ► June (22)
- ► May (11)
- ► April (11)
- ► March (27)
- ► February (24)
Tag » Arduino Ble Uart Example
-
UART/Serial Port Emulation Over BLE Protocol - Arduino Forum
-
Connecting Two Nano 33 BLE Boards Through UART
-
Uberi/Arduino-HardwareBLESerial - GitHub
-
BLEUart | Introducing The Adafruit Bluefruit LE UART Friend
-
HardwareBLESerial - Arduino Library List
-
BLE Warm Up #1 | IoT With Arduino
-
BLE UART On ESP32 Controller
-
BLE UART Communication Between ESP32-S3 (arduino ... - YouTube
-
Using Timer With Usbd Ble Uart Example - Nordic Q&A
-
BLE – BLE UART Service – Realtek IoT/Wi-Fi MCU Solutions
-
Arduino Bluefruit LED On/Off BLE - Evothings
-
Tutorial - Using HC06 Bluetooth To Serial Wireless UART Adaptors ...
-
Truyền Thông Giữa Smartphone Và PC Với “UART Over BLE” | Cộng ...
-
Truyền Thông Giữa Smartphone Và Máy Tính Qua “UART Over BLE”