傳統的藍牙模組,像是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
直接從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控制。
我們寫一段非常簡單的程式,當手機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已經接好,應該就能看到它了,點選它。
等它一下,連上線後,上方會出現「Connected With BT05」。底部會看到5個按鈕,預設是一排,你可以從設定(Setting)裡增加更多排。
點一下未設定過的按鈕,就會跳出設定畫面,如果你已設定過,要進行修改,那就長按它,一樣會出現設定畫面。
我們分別把兩個按鈕設定成「亮燈」、傳送HEX值「1」,還有「熄燈」、傳送HEX值「2」,底下的核取方塊全都取消。
如果你的線都接好,程式也上傳了,按一下App裡的按鈕吧!嘿,是不是可以控制LED的亮和滅了呢?!超簡單的是吧!
接下來我們再加碼,加上溫濕度感測模組DHT11,讓Arduino回傳偵測的數值到我們手機上!先把DHT11的線接上。
有關DHT11的教學,大家可以參考傑森寫的另一篇文章:
DHT11入門+結合1602 LCD,Arduino簡易溫濕度計
我們先再設定一下BLE Terminal。加2個按鈕,分別送出HEX碼的3和4。
程式修改一下。
#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板,我們測試一下。
請注意,右上角請設定輸出方式為ASCII,然後分別按下溫度、濕度的按鈕,讓Arduino回傳資料,然後畫面就會出現溫濕度的數值了!BLE Terminal真的很好用對吧。
BLE JoyStick
一樣從App商店下載,iOS和Android兩個版本都有。BLE JoyStick是免費的,太好了!
右上角的藍牙ICON點一下,會出現BLE設備的清單,一樣的,點選HM-10或BT05,就可以進行連線。
主畫面左上角,有個INFO的ICON,點它會出現說明畫面,主要是告訴我們,每一個按鈕,按下去後會送出什麼資料,這些是不能修改的,不過我們可以根據這些來編寫Arduino程式。
BLE JoyStick就像遊樂器的手把一樣,所以非常適合拿來遙控車子。不過我們這次還是簡單的拿來控制剛才接好的LED燈。
程式只要修改幾個地方,我們利用「向上」按鈕去控制開燈,所以讀到'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/