2020年8月16日 星期日

[ESP32-Cam] BLE(Bluetooth Low Energy) 低功耗藍牙的使用

本文旨在說明如何用手機透過藍牙跟 ESP32-Cam 作溝通,看完之後您將會發現這將是一件非常簡單的事。

ESP32-Cam 開發板搭載了一個低功耗藍牙,它跟一般的 HC-05、HC-06 藍牙有點兒不同,這方面您可以參考一下維基百科,在「無線電介面」章節裡有詳細介紹他們的區別。

https://zh.wikipedia.org/wiki/%E8%93%9D%E7%89%99%E4%BD%8E%E5%8A%9F%E8%80%97#%E6%97%A0%E7%BA%BF%E7%94%B5%E6%8E%A5%E5%8F%A3


ESP32-Cam 發送訊息給手機

以下這個程式會讓 ESP32-Cam 每隔 1 秒鐘發送一次 "Hello World!" 字串給手機。

#include <BluetoothSerial.h>

BluetoothSerial BT;  // 宣告藍芽物件,名稱為BT


void setup() {

  Serial.begin(115200);

  BT.begin("RobotWolfGroup");  // 指定藍芽裝置的名稱

}


void loop() {

  BT.println("Hello World!");

  delay(1000);

您有沒有發現程式碼才短短幾行? 

是的,免設定密碼、鮑率...等有的沒的,它就是這麼簡單好用。


藍牙配對

在 ESP32-Cam 端程式上傳完畢後,接下來需要用手機跟它的藍牙配對。

Step1 打開手機藍牙,選擇「配對新裝置」。

Step2 找到「RobotWolfGroup」這個藍牙裝置後,點擊它並配對。這個 BLE 在配對時是不需要輸入密碼的。


手機安裝 APP

我們需要在手機裡安裝 APP,才可以接收來自 BLE 的訊息。

Step1 請打開手機的「PLAY商店」,在裡面搜尋「Arduino Bluetooth」。


Step2 找到「Arduino Bluetooth Control」,安裝它。


Step3 安裝完成後,請開啟它。開啟後如下圖


Step4 點選畫面右上角落的圓形雙箭頭,搜尋「RobotWolfGroup」藍牙裝置,找到後點選它。


Step5 再點選畫面右上角落的「Terminal」,然後您就會看到如下畫面



手機發送訊息給 ESP32-Cam

以下這個程式可以讓手機發送訊息給 ESP32-Cam,請將該程式上傳到 ESP32-Cam。


#include <BluetoothSerial.h>

BluetoothSerial BT;//宣告藍芽物件,名稱為BT


void setup() {

  Serial.begin(115200);

  BT.begin("RobotWolfGroup");  //指定藍芽裝置的名稱

}


void loop() {

  //檢查藍芽內是否有資料

  while (BT.available()) {

    //讀取藍芽資料

    String str = BT.readString();

    //顯示在序列視窗

    Serial.println(str);

  }

  delay(10);

}


上傳完成後,請打開「序列埠監看視窗」。


開啟手機 APP 並完成選取藍牙裝置(如果之前有順利選取可用裝置,當再次啟動 APP 時它會自動連線」。


點選畫面右上角落的「Terminal」,然後在視窗最下方的「Type in data to send」欄位內輸入訊息,然後您就會看到如下畫面。


接著請您再檢查一下「序列埠監視視窗」裡是否有接收到訊息,如下圖



手機收發 ESP32-Cam 訊息

將上面兩個程式合併,就可以讓手機收發 ESP32-Cam 訊息。

這個程式是手機鍵入 "A",ESP32-Cam 會回應 "Apple";手機鍵入 "B",ESP32-Cam 會回應 "Banana";若手機鍵入 "A" 、"B" 以外的字,ESP32-Cam 會回應 "N/A"。

請將下方程式上傳到 ESP32-Cam。


#include <BluetoothSerial.h>

BluetoothSerial BT; // 宣告藍芽物件,名稱為BT


void setup() {

  Serial.begin(115200);

  BT.begin("RobotWolfGroup"); // 指定藍芽裝置的名稱

}


void loop() {

  // 檢查藍芽內是否有資料

  while (BT.available()) {

    // 讀取藍芽資料

    String str = BT.readString();

    // 顯示在序列視窗

    Serial.println(str);

    // 回訊給手機

    if (str == "A")

      BT.println("Apple");

    else if (str == "B")  

      BT.println("Banana");

    else 

      BT.println("N/A");  

  }

  delay(10);

}


開啟手機 APP 並完成選取藍牙裝置(如果之前有順利選取可用裝置,當再次啟動 APP 時它會自動連線」。


點選畫面右上角落的「Terminal」,然後在視窗最下方的「Type in data to send」欄位內輸入訊息,然後您就會看到如下畫面。


使用幾次之後,發現這訊息時間不對,而且訊息一去一回大約花了 2 秒鐘時間,速度還真是慢啊,應該是這個 APP 的問題吧?

不過這個 APP 還是有可取之處,它的語音控制功能 (Voice Control) 還不錯,可以設定 10 組的語音與相對應要發送的字串,這個用來控制家電倒是蠻不錯的,我用它來控制 5 種電器的開與關。


語音控制功能這部分跟 ESP32-Cam 無關,我們就不多介紹了,那就請您自行練習囉。



採購資訊

Micro SD 4G 記憶卡 https://www.ruten.com.tw/item/show?22033106394834

ESP32 開發指南(書) https://www.ruten.com.tw/item/show?22023657661505

ESP32-Cam 開發板 https://www.ruten.com.tw/item/show?22018501441929

ESP32-Cam 雙軸雲台(基本款)套件 https://www.ruten.com.tw/item/show?22024688065979

ESP32-Cam 雙軸雲台(人體偵測款)套件 https://www.ruten.com.tw/item/show?22024688076465




2 則留言:

  1. 您好,您的範例使用的是傳統藍芽,並不是BLE低功率藍芽喔!

    回覆刪除
  2. 我電子信箱是pingsinoca@gmail.com 您好,我想用ESP32 CAM BT藍芽影像顯示在手機,請問我要怎改和增加代碼?

    回覆刪除