Petoi Doc Center
ðŸ‡đ🇭 Thai
ðŸ‡đ🇭 Thai
  • āļĒāļīāļ™āļ”āļĩāļ•āđ‰āļ­āļ™āļĢāļąāļšāļŠāļđāđˆ Petoi Doc Center
  • Infrared Remote
    • āļĢāļĩāđ‚āļĄāļ—āļ„āļ­āļ™āđ‚āļ—āļĢāļĨ
  • Mobile App
    • āļ„āļēāļĨāļīāđ€āļšāđ€āļ•āļ­āļĢāđŒāđāļĨāļ°āļ„āļ­āļ™āđ‚āļ—āļĢāļĨāđ€āļĨāļ­āļĢāđŒ
  • Desktop APP
    • āļāļēāļĢāđāļ™āļ°āļ™āļģāđ€āļšāļ·āđ‰āļ­āļ‡āļ•āđ‰āļ™
    • āļ•āļąāļ§āļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ€āļŸāļīāļĢāđŒāļĄāđāļ§āļĢāđŒ
    • āļāļēāļĢāļ„āļēāļĨāļīāđ€āļšāļĢāļ—āļ‚āđ‰āļ­āļ•āđˆāļ­
    • āļŠāļāļīāļĨāļ„āļ­āļĄāđ‚āļžāļŠāđ€āļ‹āļ­āļĢāđŒ
  • Arduino IDE
    • āļ­āļąāļ›āđ‚āļŦāļĨāļ” Sketch āļŠāļģāļŦāļĢāļąāļš NyBoard
    • āļ­āļąāļ›āđ‚āļŦāļĨāļ” Sketch āļŠāļģāļŦāļĢāļąāļš BiBoard
    • āļāļēāļĢāļ„āļēāļĨāļīāđ€āļšāļĢāļ—āļ”āđ‰āļ§āļĒ Arduino IDE
    • āļ‹āļĩāđ€āļĢāļĩāļĒāļĨāļĄāļ­āļ™āļīāđ€āļ•āļ­āļĢāđŒ
  • API
    • 🖇ïļāļ‹āļĩāđ€āļĢāļĩāļĒāļĨāđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨ
    • 🐍āļ„āļđāđˆāļĄāļ·āļ­āļœāļđāđ‰āđƒāļŠāđ‰ Python SerialMaster
    • 🐛MicroPython āļ„āļ­āļ™āđ‚āļ—āļĢāļĨāđ€āļĨāļ­āļĢāđŒ
      • āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰ MicroPython āļšāļ™ ESP8266
      • āļ•āļīāļ”āļ•āļąāđ‰āļ‡ WebREPL
      • āļāļēāļĢāđƒāļŠāđ‰āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨ ESP-NOW
    • 🍓āļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļœāđˆāļēāļ™āļžāļ­āļĢāđŒāļ•āļ‹āļĩāđ€āļĢāļĩāļĒāļĨāļ‚āļ­āļ‡ Raspberry Pi
    • ðŸĪ–ROS
  • Nyboard
    • NyBoard V1_0
    • NyBoard V1_1
  • BIBOARD
    • āļ„āļđāđˆāļĄāļ·āļ­āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđƒāļŠāđ‰āļ‡āļēāļ™ BiBoard āļ‰āļšāļąāļšāļĢāļ§āļšāļĨāļąāļ”
    • Demo Applications
      • 1.GPIO port
      • 2.Serial port
      • 3.Analog-digital converter
      • 4.Digital-Analog Converter
      • 5.EEPROM (Electrically Erasable Programmable read only memory)
      • 6.Gyro IMUMPU6050
      • 7.Infrared remote control
      • 8.PWM(Pulse Width Modulation)
      • 9.Servo(under construction)
      • 10.Classic Bluetooth serial port SPP
      • 11.Bluetooth low energy (BLE) serial port pass-through
      • 12.File system SPIFFS
      • 13.Add hardware partition configuration option in Arduino IDE
      • 14.Play MP3
      • 15.The usage of Wi-Fi OTA(Over-The-Air)
  • Communication Modules
    • Introduction
    • USB Uploader (CH340C or CH343G)
    • Dual Mode Bluetooth
    • WiFi ESP8266
      • ESP8266 + Python Scripts Implement wireless crowd control
  • Extensible Modules
    • Introduction
    • MU Camera
    • Ultrasonic Sensor
    • Light Sensor
    • Touch Sensor
    • Gesture Sensor
    • PIR Motion Sensor
  • Applications
    • Skill Creation
    • OpenCat Imitation Tutorial
    • Programmable Puppet Character
  • History
    • Upload Sketch For NyBoard (software 1.0)
  • Technical Support
    • 🛠ïļSupporting Application and Software
    • 🙋‍♂ïļFAQ(Frequently Asked Questions)
  • Useful Links ðŸ•ļ
    • 🔭Official Site of Petoi
    • ðŸ’ŋGitHub of OpenCat
    • 🎊PetoiCamp (Forum)
Powered by GitBook
On this page

Was this helpful?

Export as PDF
  1. BIBOARD
  2. Demo Applications

11.Bluetooth low energy (BLE) serial port pass-through

āļžāļ­āļĢāđŒāļ•āļ­āļ™āļļāļāļĢāļĄ Bluetooth Low Energy (BLE, Bluetooth Low Energy) āđƒāļŠāđ‰āļāļąāļ™āļ­āļĒāđˆāļēāļ‡āđāļžāļĢāđˆāļŦāļĨāļēāļĒ āļšāļ™āđāļžāļĨāļ•āļŸāļ­āļĢāđŒāļĄ iOS āļ‚āļ­āļ‡ Apple Classic Bluetooth āļ•āđ‰āļ­āļ‡āļĄāļĩāđƒāļšāļĢāļąāļšāļĢāļ­āļ‡ MFi āđ€āļžāļ·āđˆāļ­āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļāļąāļšāļ­āļļāļ›āļāļĢāļ“āđŒ iOS āļ‚āļ­āļ‡ Apple āļ­āļļāļ›āļāļĢāļ“āđŒāļšāļĨāļđāļ—āļđāļ˜āļžāļĨāļąāļ‡āļ‡āļēāļ™āļ•āđˆāļģāđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļ™āļĩāđ‰

āđ‚āļ›āļĢāđ‚āļ•āļ„āļ­āļĨāļŠāđāļ•āđ‡āļ„āđāļĨāļ°āļŦāļĨāļąāļāļāļēāļĢāļ‚āļ­āļ‡āļšāļĨāļđāļ—āļđāļ˜āļžāļĨāļąāļ‡āļ‡āļēāļ™āļ•āđˆāļģāļˆāļ°āđ„āļĄāđˆāļ–āļđāļāļ—āļģāļ‹āđ‰āļģāļ—āļĩāđˆāļ™āļĩāđˆ āļĄāļĩāļšāļ—āļ„āļ§āļēāļĄāđāļĨāļ°āļ§āļīāļ”āļĩāđ‚āļ­āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļĄāļēāļāļĄāļēāļĒ āļāļĨāđˆāļēāļ§āđ‚āļ”āļĒāļĒāđˆāļ­ āļšāļĢāļīāļāļēāļĢāļšāļĨāļđāļ—āļđāļ˜āļĄāļĩāđƒāļŦāđ‰āđƒāļ™āļĢāļđāļ›āđāļšāļšāļ‚āļ­āļ‡āđ‚āļ›āļĢāđ„āļŸāļĨāđŒ āđāļĨāļ°āļĄāļĩāļ­āļąāļāļ‚āļĢāļ° N āļ•āļąāļ§āļ—āļĩāđˆāļĄāļĩ ID āļ­āļīāļŠāļĢāļ° (UUID) āļ­āļĒāļđāđˆāđƒāļ•āđ‰āđ‚āļ›āļĢāđ„āļŸāļĨāđŒāļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āļšāļĢāļīāļāļēāļĢ āļ­āļąāļāļ‚āļĢāļ°āđāļ•āđˆāļĨāļ°āļ•āļąāļ§āļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāļ•āđˆāļēāļ‡āļāļąāļ™ (āļ­āđˆāļēāļ™ āđ€āļ‚āļĩāļĒāļ™ āđāļˆāđ‰āļ‡ āļĢāļ°āļšāļļ) āļŦāļĨāļąāļ‡āļˆāļēāļāļ—āļĩāđˆāļœāļđāđ‰āđƒāļŠāđ‰āļāļģāļŦāļ™āļ”āļ­āļąāļāļ‚āļĢāļ°āđāļĨāļ°āļĢāļ§āļĄāđ€āļ‚āđ‰āļēāļāļąāļšāļŠāļīāļ—āļ˜āļīāđŒāđāļĨāđ‰āļ§ āļāđ‡āļŠāļēāļĄāļēāļĢāļ–āđƒāļŦāđ‰āļšāļĢāļīāļāļēāļĢāļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒāđ„āļ”āđ‰

BLE pass-through āļ„āļ·āļ­āļ­āļ°āđ„āļĢ āļ„āļ·āļ­āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āļšāļĢāļīāļāļēāļĢ BLE āđāļĨāļ°āļĄāļĩāļ­āļąāļāļ‚āļĢāļ° 2 āļ•āļąāļ§āļ­āļĒāļđāđˆāđƒāļ•āđ‰āđ‚āļ›āļĢāđ„āļŸāļĨāđŒāļ™āļĩāđ‰

#define SERVICE_UUID           "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID
#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"

āļŦāļ™āļķāđˆāļ‡āļ­āļąāļ™āļŠāļģāļŦāļĢāļąāļš TX (āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ) āđāļĨāļ°āļ­āļĩāļāļ­āļąāļ™āļŠāļģāļŦāļĢāļąāļš RX (āļĢāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨ) āļŠāļģāļŦāļĢāļąāļšāļŠāļīāđˆāļ‡āļ™āļĩāđ‰āļžāļ§āļāđ€āļ‚āļēāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāļ•āđˆāļēāļ‡āļāļąāļ™ āļĢāļŦāļąāļŠāļ•āđˆāļ­āđ„āļ›āļ™āļĩāđ‰āļ„āļ·āļ­āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļšāļĢāļīāļāļēāļĢāđāļĨāļ°āļ­āļąāļāļ‚āļĢāļ°āđƒāļŦāļĄāđˆ:

  // Create the BLE Service
  BLEService *pService = pServer->createService(SERVICE_UUID);
  
  // Create a BLE Characteristic
  pTxCharacteristic = pService->createCharacteristic(
										CHARACTERISTIC_UUID_TX,
										BLECharacteristic::PROPERTY_NOTIFY
									);
                      
  pTxCharacteristic->addDescriptor(new BLE2902());

  BLECharacteristic * pRxCharacteristic = pService->createCharacteristic(
											 CHARACTERISTIC_UUID_RX,
											BLECharacteristic::PROPERTY_WRITE
										);

āļ–āļąāļ”āđ„āļ›āļ„āļ·āļ­āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāđ€āļĢāļĩāļĒāļāļāļĨāļąāļšāļŠāļ­āļ‡āļŸāļąāļ‡āļāđŒāļŠāļąāļ™ āļ‹āļķāđˆāļ‡āļˆāļ°āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđ€āļĄāļ·āđˆāļ­āļĄāļĩāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āļĄāļĩāļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āļ­āļąāļāļ‚āļĢāļ° RX:

class MyServerCallbacks: public BLEServerCallbacks {
    void onConnect(BLEServer* pServer) {
      deviceConnected = true;
    };

    void onDisconnect(BLEServer* pServer) {
      deviceConnected = false;
    }
};

class MyCallbacks: public BLECharacteristicCallbacks {
    void onWrite(BLECharacteristic *pCharacteristic) {
      std::string rxValue = pCharacteristic->getValue();

      if (rxValue.length() > 0) {
        Serial.println("*********");
        Serial.print("Received Value: ");
        for (int i = 0; i < rxValue.length(); i++)
          Serial.print(rxValue[i]);

        Serial.println();
        Serial.println("*********");
      }
    }
};

āļŠāļļāļ”āļ—āđ‰āļēāļĒ āļĨāļđāļ›āļŦāļĨāļąāļāļ„āļ·āļ­āļ•āļąāļ§āļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­ āļ‹āļķāđˆāļ‡āļˆāļ°āļāļģāļŦāļ™āļ”āļ§āđˆāļēāļĄāļĩāļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļŦāļĢāļ·āļ­āđ„āļĄāđˆāđāļĨāļ°āļ‚āļēāļ”āļāļēāļĢāđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļŦāļĢāļ·āļ­āđ„āļĄāđˆ

    if (deviceConnected) {
        pTxCharacteristic->setValue(&txValue, 1);
        pTxCharacteristic->notify();
        txValue++;
		    delay(10); // bluetooth stack will go into congestion, if too many packets are sent
	  }
    
    // disconnecting
    if (!deviceConnected && oldDeviceConnected) {
        delay(500); // give the bluetooth stack the chance to get things ready
        pServer->startAdvertising(); // restart advertising
        Serial.println("start advertising");
        oldDeviceConnected = deviceConnected;
    }
    // connecting
    if (deviceConnected && !oldDeviceConnected) {
		// do stuff here on connecting
        oldDeviceConnected = deviceConnected;
    }

āļŠāļģāļŦāļĢāļąāļšāđ‚āļ„āđ‰āļ”āļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒ āļ”āļđāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ„āļĨāļšāļĢāļēāļĢāļĩāļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļ—āļēāļ‡āļāļēāļĢ: ble_uart āđāļĨāļ°āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ”āļĩāļšāļąāđŠāļāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ LightBlue āđ„āļ”āđ‰

Previous10.Classic Bluetooth serial port SPPNext12.File system SPIFFS

Last updated 2 years ago

Was this helpful?