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

影片
代碼:
- // 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[i];
- Serial.print(rxValue[i]);
- }
- 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 網頁設計
