要如何透過手機藍芽連線來控制LED呢? 本文中會教你如何使用App inventor來寫一個手機app,以及藍芽模組的使用,趕快來玩玩看吧。
學會用手機藍芽控制LED後,就可以更進階製作藍芽遙控車!!!
內容目錄
材料準備
材料名稱 | 蝦皮連結 |
---|---|
【傑森創工】Arduino Uno R3 開發板 原廠晶片 *限時特惠 附USB線 | |
【傑森創工】Arduino HC-06 藍牙模組 帶底板 Bluetooth RS232 Module | |
【傑森創工】170孔 迷你 彩色 麵包板 六色 白黑藍黃綠紅 Arduino (顏色隨機出貨) | |
【傑森創工】5mm 超高亮度LED 白光 10個一組 可用於Arduino 單晶片 汽機車 無人機 | |
【傑森創工】20個 1/4W 220Ω 電阻DIP 插板電阻 碳膜電阻,1%電阻 8051 Arduino | |
【傑森創工】杜邦線 公對母 20cm 10條 12股銅絲含膠殼 彩色線 (整排40條4單位) Arduino 專用 |
藍芽模組
藍芽模組有分主端跟從端,並且有HC-05、HC-06兩款,我們用的藍芽模組通常都是從端,因為大部分我們是用手機或其他裝置來當主端連線從端的藍芽模組。
藍芽模組接腳 | 功能 |
---|---|
VCC | 電源輸入(5V) |
RXD | 接收資料 |
TXD | 發送資料 |
GND | 接地 |
EN(KEY) | 高電位時,進入AT模式 |
電路連接
這邊要注意藍芽模組的RX要接Arduino 自定義的TX,反之藍芽模組TX接Arduino 自定義的RX。
RX表示接收數據,TX表示發送數據,故接收要對發送,才會傳輸成功。
延伸閱讀: 三用電錶使用教學,檢查電路必備工具!!
程式
手機app製作
我們使用app inventor這個網頁來製作簡易的app,新手也可以簡單上手。
app inventor 網站連結: https://appinventor.mit.edu/
1.左邊可以選擇一些物件,並且會顯示在中間模擬手機的畫面,這裡要選擇ListPicker(BT Iist)、Button(LEDTurnOn)、Button(Disconnect)。
2.右側欄位則是可以更改物件屬性,像是按鈕長寬高、顯示的字等等
3.左邊欄位要選Connectivity→BluetoothClient,右邊會顯示,代表有建立藍芽功能了。
4.常見的一些程式圖塊
5.針對所選擇的圖標按鍵有相關的動作程式,圖中為選取Screen1,顯示的相關圖塊。
大家可以都點看看邊摸索邊學習。
6.螢幕初始化時,會將BTlist按鈕開啟,另外兩個則是關閉。
7.在點擊BTlist前,會抓取Android之前配對過的藍芽,並以清單列出。
8.點擊BTlist後,會先判斷藍芽連線是否成功,成功會回傳ture,失敗回傳false,address是配對前面選擇的藍芽位置。
9.連線成功後,會將BTlist關閉,LEDTurnOn、Disconnect按鈕開啟。
10.當點擊LEDTurnOn,就會開始執行下面程式。
11.判斷該按鈕上的文字是否為LEDTurnOn。
12.如果為LEDTurnON,會先將文字改為LEDTurnOff,在手機上按鈕文字就會更新,接著透過藍芽傳送’a’字元,在藍芽模組那端就會接受到’a’。
如果按鈕文字為LEDTurnOff,則會執行按鈕文字更新為LEDTurnOn,並且傳送’b’到藍芽模組。
在藍芽模組接收到’a’,Arduino就會判斷要開啟led,反之收到’b’為關閉。
arduino藍芽程式
#include <SoftwareSerial.h>
#include <Wire.h>
int LED = 5;
char LEDstatus;
SoftwareSerial BT(10,11);
//定義Arduino PIN10及PIN11分別為RX及TX腳
void setup()
{
Serial.begin(9600);
BT.begin(9600); // 設定和 HC-06 通訊的速度 (預設 9600)
pinMode(LED, OUTPUT);
}
void loop()
{
//讀取藍芽模組訊息,並傳送到電腦
if (BT.available()){
LEDstatus=BT.read();
Serial.println(LEDstatus);
}
//判斷LED開關條件
switch (LEDstatus){
case 'a':
digitalWrite(LED,HIGH);
break;
case 'b':
digitalWrite(LED,LOW);
break;
}
}
HC-05通訊速度要設定多少
一樣設定9600即可
你好 請問假如我在APP inventor 的第一個螢幕連接藍芽 之後我按下按鈕跳到第二個螢幕,然後再用第二個螢幕的按鈕操作但手機卻顯示error 不知道是什麼問題
藍芽是有連接上嗎?
還是選錯藍芽的裝置?
您好,請問藍芽顯示無法連接我該怎麼做?
照片:
https://drive.google.com/file/d/1QgKdlyQ9-66CDxeNtBMHg5DdjIYU-Ic1/view?usp=sharing
這是啥!
不知道為甚麼?
Help!
你可以檢查看看 App程式,藍芽連線部分 Before picking跟After picking的部分。
https://drive.google.com/file/d/1bfjQKvdfDY6IjDddjZwsaiFfnX31ZY3j/view?usp=sharing
如果這部分沒錯,可能要換手機式看看,
再不行的話,看要不要傳你的程式給我。
https://drive.google.com/file/d/1bfjQKvdfDY6IjDddjZwsaiFfnX31ZY3j/view
要設定共用
不然其他人看不到
https://drive.google.com/drive/folders/1ZwB4IE8w32FlRZY0tTMb8SEDpa2EPX_S?usp=sharing
中文和英文
手機有點舊9年
https://drive.google.com/file/d/1QdNS_Tk29tsqGtMPtOqmiQw4ofS-8zh4/view?usp=sharing
我試著直接輸入藍芽位址
還沒試過,因為最近要上網課。假日吧
你有App程式中有個地方要改,在befor.picking(BTlist) 那邊你是選ElementsFromString,我試著用這個去執行,會發現跟妳一樣的問題。
把它改成Elements試看看,文章中app部分第7.看一下。
https://drive.google.com/file/d/147vVbri39fOsKwpyGyIGUbtRxsYm7ciD/view?usp=sharing
兩者差異可以參考
http://www.appinventor.tw/ai2_ui_listview
請問要怎麼把它下載成app
按照圖中的路徑,用手機去掃QRcode就可以下載了。
https://drive.google.com/file/d/1VWh71kS0tLM9J_GbcxqY751QDdS7sFV1/view?usp=sharing
https://drive.google.com/file/d/1N6eBwOhXXYG2hdj4pv3aYqBYvGrC9rn_/view?usp=sharing
請問 我要如何在手機看到 arduino LED亮/滅 回饋的狀態? 感謝!感謝!
1.以本篇文章中,當LED未亮時,APP上面的按鈕會顯示”LEDTurnOn”;
若是點擊按鈕後,LED會亮起,按鈕上的顯示會變成”LEDTurnOff”。
手機可以透過這個來看到LED亮/滅的狀態,你也可以改成你所希望的提示字元。
這裡是以按鈕動作做判斷來改變提示。
2.或是你希望從arduino那邊回傳led狀態,要從case a 跟 b 裡面寫一個回傳狀態,app端也要寫一個接收並且判斷led狀態,再透過文字或是其他方式顯示led狀態。
以第一個方式來做更改會比較快一點,但不曉得你是想要哪一種。
非常感謝 ! 在下依著 您的回復嘗試著第2種方式 將其 arduino 腳位實際狀態(H or L) 回傳 至 android 畫面顯示狀態. 再次由衷感謝 您撥冗回復指導 ! 感謝 ! 感謝 !
想請教的問題是畫面只有BTlist按鈕可以按,按下BTlist按鈕後就黑屏沒動了><"
使用的是app inventor的模擬器,畫面及程式如下連結https://drive.google.com/drive/folders/1CeAQK60WqvaZbppaf7QZfNlr9RUbzSex?usp=sharing
感謝您
用app inventor的模擬器,也就是用電腦執行是嗎?
會不會是電腦沒有藍芽功能,所以沒辦法掃描到配對的藍芽。
可以試看看把app用手機執行,看會不會是一樣的狀況?
請問一下,我接好之後的LED會亮。不過它很常延遲一段時間才突然亮或滅,不知道有可能是什麼問題呢?
是說可以用手機正確的控制LED亮滅,但會有延遲的狀況嗎?
還是說LED沒有照著手機控制亮滅,而是突然亮或滅?
方便的話可以貼個程式碼及接線照片~
有照著手機指令來控制亮滅喔,基本上連線之後第一次開和關都會很順利反應也很快,不過之後再次按下按鈕它就會間隔很久或甚至愛理不理的。除了文中的接線之外我有將電池兩端接A0跟GND,打算把它的電壓輸出同時顯示在手機上。
以下附上程式碼:
#include
#include
int LED = 5;
char LEDstatus;
SoftwareSerial BT(10,11);
//定義Arduino PIN10 及PIN11分別為RX及TX腳
void setup()
{
Serial.begin(9600);
BT.begin(9600); // 設定和 HC-06 通訊的速度 (預設 9600)
pinMode(LED, OUTPUT);
float temp;
}
void loop()
{
//讀取藍芽模組訊息,並傳送到電腦
if (BT.available()){
LEDstatus=BT.read();
Serial.println(LEDstatus);
}
//判斷LED開關條件
switch (LEDstatus){
case ‘a’:
digitalWrite(LED,HIGH);
break;
case ‘b’:
digitalWrite(LED,LOW);
break;
case ‘c’:
int V1=analogRead(A0);
float vol=V1*(2.0/1023.0);
float temp=vol;
BT.write(temp);
}
}
如果你完全照著文中做單純控制led是不會延遲的對吧?
但是你想做一個可以控制led跟從手機顯示電池電壓的小專題就會發生上述的問題嗎?
從你的程式碼中可以看出一個問題,手機透過藍芽接收arduino傳送的資料不能直接用float,會是以類似封包的方式傳送,可以參考下列這篇文章
https://blog.cavedu.com/2014/01/02/appinventorandarduinowithbluetooth3/
建議先做手機顯示電池電壓就好,比較單純,最後再做結合。
希望對你有幫助~
(不然我改天也來寫一篇類似的文章好了哈哈哈~)
請問如何連接上藍芽 IOS的無法連接嗎
藍芽模組HC-06、HC-05,好像都無法連接IOS~
如果你用IOS,可以參考下面這篇文章:
https://blog.jmaker.com.tw/arduino-ble-app/
android手機未連接過此藍芽裝置,在BT List中就跑不出欲連接的藍芽裝置(AddrassesAndNames),請問該如何處理?
HC-05連不到藍芽怎麼辦阿
如果改接蜂鳴器呢?
就變成用藍芽控制蜂鳴器阿
請問appinventor 可以與顯示手機定位嗎
可以哦
我在安卓13,Android MIT App Inventor 中使用藍牙block會有Requesting Permission to enable bluetooth權限問題,官網討論區同樣有人問。
https://community.appinventor.mit.edu/t/requesting-permission-to-enable-bluetooth/13690
我參考官網討論區提供的方法,在 Screen1.Initialize block放入BluetoothClient1中可指定HC-05藍牙 connect address 的block, 藍牙位址可在手機【藍牙與裝置連接】看到,即可解決。
http://www.martyncurrey.com/android-mit-app-inventor-auto-connect-to-bluetooth/
無法正常連線請問怎麼辦
有顯示甚麼錯誤訊息嗎?
請問一下,自製的app是只適用安卓嗎?還是ios也可以?
用app inventor寫的app好像可以在ios執行,但我沒試過。
請問發生錯誤 need android.permission.BLUETOOTH_CONNECT permission for AttributionSource 該怎麼辦
這個我換手機後也有遇到同樣的狀況,
官方說法是說還沒針對Android 12來更新他的藍芽連線功能。
但有找到可以解決的方式:
https://community.appinventor.mit.edu/t/error-908-the-permission-bluetooth-connect-has-been-denied-on-android-10/68735
下面是我之前藍芽遙控車的app程式,藍芽連線的部份一樣,你可以增看看紅色圈起來的部分。
https://drive.google.com/file/d/1aINUliFqTfD6eC7EDJYuIKA_Wmy3bS7x/view?usp=sharing
顯示 Error 507: unablue to connect. is the device turn on?
在手機執行app後,點選BTlist,就變黑屏不會動。