ble-2

傳統的藍牙模組,像是HC-05、HC-06,都無法和iPhone搭配,很多人都覺得有些困擾;我們也知道可以選擇BLE(Bluetooth 4.0),但用BLE在App的製作上又有一定的難度。

沒關係,傑森應該是用遍了所有現成的雙平台App,總算找到兩套很好用的,可以不用自己寫APP,也不用深入研究BLE的技術,就能簡單的控制Arduino!

  • BLE Terminal HM-10:適用於一般的控制,像是LED或繼電器等。
  • BLE JoyStick:它的介面就是一個遊戲手把,非常適合用在遙控車的專題上。

BLE Terminal HM-10

ble-5

直接從App商店下載,iOS和Android兩個版本都有。BLE Terminal是免費App,不過底部會有廣告、偶爾也會彈出廣告,如果真的很喜歡,付台幣$170就能去除廣告。

BLE Terminal HM-10名字裡有HM-10,基本是針對HM-10,但像是CC2541系列的BT05也是相容的。這裡我們用BT05做為示範。

購買BLE BT05:
https://www.jmaker.com.tw/products/ble-cc2541

先幫BT05和Uno接線,很簡單,基本上就是VCC(5V)、GND,RX接到PIN 3,TX接到PIN 2。另外,為了要測試藍牙連線,所以多接了一顆LED,用PIN 11控制。

ble-2

我們寫一段非常簡單的程式,當手機App傳來「1」時,就亮燈;傳來「2」就熄燈。

#include <SoftwareSerial.h>

SoftwareSerial btSerial(2, 3); // RX, TX

void setup()
{
  pinMode(11,OUTPUT);  //用PIN 11控制LED
  Serial.begin(9600);
  
  btSerial.begin(9600);
}

void loop() // run over and over
{
  if (btSerial.available()){  //如果藍牙有傳資料過來
    int i = btSerial.read();  //把讀到的資料丟給i
    Serial.println(i);
    if(i == 1){    //如果是1,亮燈
      Serial.println("Led On");
      digitalWrite(11,HIGH);
    }
    if(i == 2){    //如果是2,熄燈
      Serial.println("Led Off");
      digitalWrite(11,LOW);
    }
  }
}

先把程式上傳到Uno板。

打開BLE Terminal,這時會出現所有BLE設備的清單,如果你的HM-10或BT05已經接好,應該就能看到它了,點選它。

ble-3

等它一下,連上線後,上方會出現「Connected With BT05」。底部會看到5個按鈕,預設是一排,你可以從設定(Setting)裡增加更多排。

點一下未設定過的按鈕,就會跳出設定畫面,如果你已設定過,要進行修改,那就長按它,一樣會出現設定畫面。

我們分別把兩個按鈕設定成「亮燈」、傳送HEX值「1」,還有「熄燈」、傳送HEX值「2」,底下的核取方塊全都取消。

ble-4

如果你的線都接好,程式也上傳了,按一下App裡的按鈕吧!嘿,是不是可以控制LED的亮和滅了呢?!超簡單的是吧!

ble-8-2

接下來我們再加碼,加上溫濕度感測模組DHT11,讓Arduino回傳偵測的數值到我們手機上!先把DHT11的線接上。

ble-5

有關DHT11的教學,大家可以參考傑森寫的另一篇文章:

DHT11入門+結合1602 LCD,Arduino簡易溫濕度計

我們先再設定一下BLE Terminal。加2個按鈕,分別送出HEX碼的3和4。

ble-7-1

程式修改一下。

#include <SoftwareSerial.h>
#include "DHT.h"
#define DHTPIN 9 
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

SoftwareSerial btSerial(2, 3); // RX, TX

void setup()
{
  pinMode(11,OUTPUT);  //用PIN 11控制LED
  Serial.begin(9600);
  
  btSerial.begin(9600);

  dht.begin();  //初始化DHT
}

void loop() // run over and over
{
  if (btSerial.available()){
    char i = btSerial.read();
    Serial.println(i);
    if(i == 1){
      Serial.println("Led On");
      digitalWrite(11,HIGH);
    }
    if(i == 2){
      Serial.println("Led Off");
      digitalWrite(11,LOW);
    }
    if(i == 3){
      int t = dht.readTemperature();  //取得溫度C
      btSerial.println(t);
    }
    if(i == 4){
      int h = dht.readHumidity();   //取得濕度
      btSerial.println(h);
    }
  }
}

程式很簡單的,就是把取得的溫濕度,利用println的方式回傳到App裡,上傳程式到Uno板,我們測試一下。

ble-6

請注意,右上角請設定輸出方式為ASCII,然後分別按下溫度、濕度的按鈕,讓Arduino回傳資料,然後畫面就會出現溫濕度的數值了!BLE Terminal真的很好用對吧。

BLE JoyStick

ble-6

一樣從App商店下載,iOS和Android兩個版本都有。BLE JoyStick是免費的,太好了!

右上角的藍牙ICON點一下,會出現BLE設備的清單,一樣的,點選HM-10或BT05,就可以進行連線。

ble-7

主畫面左上角,有個INFO的ICON,點它會出現說明畫面,主要是告訴我們,每一個按鈕,按下去後會送出什麼資料,這些是不能修改的,不過我們可以根據這些來編寫Arduino程式。

ble-1

BLE JoyStick就像遊樂器的手把一樣,所以非常適合拿來遙控車子。不過我們這次還是簡單的拿來控制剛才接好的LED燈。

ble-2-1

程式只要修改幾個地方,我們利用「向上」按鈕去控制開燈,所以讀到'A'時,就開燈;利用「向右」控制關燈,所以讀到'B'時,就關燈。

程式我們改寫一下:

#include <SoftwareSerial.h>

SoftwareSerial btSerial(2, 3); // RX, TX

void setup()
{
  pinMode(11,OUTPUT);  //用PIN 11控制LED
  Serial.begin(9600);
  
  btSerial.begin(9600);
}

void loop() // run over and over
{
  if (btSerial.available()){     //如果藍牙有傳資料過來
    char i = btSerial.read();    //把讀到的資料丟給i,這次是用char
    Serial.println(i);
    if(i == 'A'){    //如果是A,亮燈
      Serial.println("Led On");
      digitalWrite(11,HIGH);
    }
    if(i == 'B'){    //如果是B,熄燈
      Serial.println("Led Off");
      digitalWrite(11,LOW);
    }
  }
}

嘿,也完成了!真的超簡單的,大家可以開始把這兩個App應用在自己的專題裡囉!

購買BLE BT05:
https://www.jmaker.com.tw/products/ble-cc2541
傑森創工購物網:https://www.jmaker.com.tw/
傑森創工粉絲團:https://www.facebook.com/geeksfans/