woff 發表於 2020-6-4 21:26:33

如何用藍芽Bluetooth連線控制 Arduino

學會Arduino基本操控後
一定會想學會無線遙控,如藍芽Bluetooth, Wifi
這篇說明藍芽Bluetooth操控
結果圖



影片
dTadlE3xxT0

代碼:
// Include necessary libraries
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
//#include <BLE2902.h>
//#include <Wire.h>

// 定義 UUIDs (注意要與App Inventor內容對應)
#define SERVICE_UUID            "C6FBDD3C-7123-4C9E-86AB-005F1A7EDA01"
#define CHARACTERISTIC_UUID_RX"B88E098B-E464-4B54-B827-79EB2B150A9F"
#define CHARACTERISTIC_UUID_TX"D769FACF-A4DA-47BA-9253-65359EE480FB"

// 定義LM35 ESP32 GPIO接腳
const int analogIn = A0;

int RawValue= 0;
double Voltage = 0;
double tempC = 0;
double tempF = 0;
String BLE_Code;
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
// Handle received and sent messages
boolean ledState=false;
String message = "";
char incomingChar;

// Temperature Sensor 與led接腳變數
float temperature = 0;
const int ledPin = 2;

// 設定 callbacks onConnect & onDisconnect函數
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
    deviceConnected = true;
};
void onDisconnect(BLEServer* pServer) {
    deviceConnected = false;
}
};

// 設定 callback function 當收到新的資訊 (from the Android application)
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
    std::string rxValue = pCharacteristic->getValue();
    BLE_Code="";
    if(rxValue.length() > 0) {
      Serial.print("接收資料為 : ");
      for(int i = 0; i < rxValue.length(); i++) {
      BLE_Code+=rxValue;
      Serial.print(rxValue);
      }
      Serial.println();
      BLE_Code.toUpperCase();
      Serial.println(BLE_Code);
      if(BLE_Code.indexOf("LED")==0)
      {
      ledState=!ledState;
      Serial.println(ledState);
      }
      if(BLE_Code.indexOf("ON")==0)
      {
      Serial.println("LED 點亮!");
      ledState=true;
      }
      else if(BLE_Code.indexOf("OFF")==0) {
      Serial.println("LED 熄滅!");
      ledState=false;
      }
    }
}
};

void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
   
// 建立BLE Device
BLEDevice::init("ESP32_WeMos1");

// 建立BLE Server
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());

// 建立BLE Service
BLEService *pService = pServer->createService(SERVICE_UUID);

// 建立BLE Characteristic
pCharacteristic = pService->createCharacteristic(
                      CHARACTERISTIC_UUID_TX,
                      BLECharacteristic::PROPERTY_NOTIFY);                     
//pCharacteristic->addDescriptor(new BLE2902());
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                                       CHARACTERISTIC_UUID_RX,
                                       BLECharacteristic::PROPERTY_WRITE);
pCharacteristic->setCallbacks(new MyCallbacks());

// 開始(起)service
pService->start();

// 開始(起)advertising
pServer->getAdvertising()->start();
Serial.println("等待BLE手機連線....");

digitalWrite(ledPin,LOW);
delay(500);
digitalWrite(ledPin,HIGH);
delay(500);
digitalWrite(ledPin,LOW);
}

void loop() {
// Check received message and control output accordingly
    if (ledState)
      digitalWrite(ledPin, HIGH);
      else
      digitalWrite(ledPin, LOW);
delay(20);
}
文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計


頁: [1]
查看完整版本: 如何用藍芽Bluetooth連線控制 Arduino