【雙A計劃】Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

續上篇 【雙A計劃】 Part0:App Inventor 傳送訊號給 Arduino,使用藍牙本篇將簡單介紹如何用手機控制Arduino上的LED 亮滅,使用 digitalWrite() 來達成。

哇~我們的雙A計畫有好多篇呢,歡迎您一篇篇都看過喔!

中文系列文章

English version

 

作者/攝影   曾吉弘
難度

★★★☆☆

材料表

【推薦套件】自學者的天堂|Arduino 入門到雲端基本套件包

下載

操作影片

硬體接線

請根據下圖,將藍牙發射器及LED接上Arduino (藍牙RX – Arduino D11, 藍牙TX – Arduino D10腳位)

bt
藍牙TX: Arduino D10 (RX)。藍牙RX: Arduino D11 (TX) 定義於I2CBT(10,11); 語法中

App Inventor 編寫簡易的藍牙訊息發送程式

畫面元件很簡單,點選 BT List 之後,會顯示藍牙配對裝置清單,點選您已經配對好的藍牙裝置之後,畫面中間的按鈕就可點選。反覆點選就會送出不同的字元給Arduino 來控制LED亮滅。

螢幕快照 2014-04-04 上午12.06.35

 

app 程式說明

STEP1:在 ListPicker1.BeforePicking事件中,將 BluetoothClient.AddressAndNames指令為 ListPicker1內容,代表點選將其內容連結到手機的已配對藍牙裝置清單。
 
STEP2:在 ListPicker1.AfterPicking事件中,確認連線成功之後,設定相關按鈕為 enabled/ disabled。

螢幕快照 2014-04-04 上午12.07.05 

STEP3:本段程式重點當按下ON按鈕時,手機會透過 BluetoothClient元件的 SendText 指令發送一個 ‘a’ 字元給Arduino,此時按鈕的字樣會變成 “LED Turn Off”;同理當按下OFF按鈕時,手機會發送一個 ‘b’ 字元給Arduino,此時按鈕的字樣會變成 “LED Turn On”。

最後按下 Disconnect 斷線按鈕則中止藍牙連線,並將個畫面元件回復到初始狀態等候下一次連線。如下圖:

螢幕快照 2014-04-04 上午12.07.18

Arduino CODE

App Inventor light up Arduino LED
#include <SoftwareSerial.h>
#include <Wire.h>

int LED = 13;
SoftwareSerial I2CBT(10,11); //定義Arduino PIN10及PIN11分別為RX及TX腳位
//請注意Arduino的TX要接藍牙模組的RX, 反之亦然

void setup() {
Serial.begin(9600);
I2CBT.begin(9600);//bluetooth baud rate
pinMode(LED, OUTPUT);
}

void loop() {
byte cmmd[20];
int insize;
while(1){
//read message from bluetooth
if ((insize=(I2CBT.available()))>0){
Serial.print("input size = ");
Serial.println(insize);
for (int i=0; i<insize; i++){
Serial.print(cmmd[i]=char(I2CBT.read()));
Serial.print("\n");
}
}
//根據所收到訊號執行對應動作
switch (cmmd[0]) {
 //讀取第一個字元
case 97: //'a'
digitalWrite(LED,HIGH);
break;

case 98://'b'
digitalWrite(LED,LOW);
break;
} //Switch
} //while
}

執行

執行方式如 part 0 ,先燒錄好 Arduino 端程式,再從 app 端發起藍牙連線。連線成功之後就可以點選 app 畫面按鈕來控制 LED 亮滅,操作完畢記得斷線喔。

224 thoughts on “【雙A計劃】Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

  1. wangqixuan says:

    您好~這篇文章對我來說受益良多,非常的易懂!!

    所以我也參考了您的文章做了測試,但是碰到了問題:

    在app連接藍芽後點擊LED開關後,燈沒有亮滅

    在電路上與code上完全是參考您的

    也測試過變換arduino板和藍芽模組(鮑率有修改成該板數據)

    想請問說是否有遇到過此種情況?

    謝謝!!

    • CAVE阿吉 says:

      您好, 我們確定範例 code 是可以執行的 (因為我們也好怕誤導大家, 所以幾乎兩三天就重新從網頁上直接下載來執行一次). 只能請您試試看囉.

  2. Qiuwen says:

    您好此程式碼運作後 提示錯誤
    sketch_may20a:24: error: stray ‘\’ in program
    sketch_may20a:24: error: stray ‘\’ in program
    sketch_may20a:29: error: missing terminating ” character
    sketch_may20a:39: error: stray ‘\’ in program
    sketch_may20a:39: error: missing terminating ” character
    sketch_may20a.ino: In function ‘void loop()’:
    sketch_may20a:24: error: ‘u201cinput’ was not declared in this scope
    sketch_may20a:30: error: expected primary-expression before ‘}’ token
    sketch_may20a:30: error: expected `;’ before ‘}’ token
    sketch_may20a:39: error: ‘u201cGet’ was not declared in this scope

    請問該如何解決呢 …

  3. 施至舜 says:

    您好,我目前已下載好您所附上的app程式controlLED,Arduino的程式也燒錄成功,可以用serial monitor輸入a b來控制Arduino
    但在使用controlLED時,無法連接上裝置,顯示””Error 507: Unable to connect. Is the device turned on?”
    想請問是什麼原因呢??

  4. 施至舜 says:

    您好,我現在點選配對之後app就沒有反應了! 不知道是不是我沒有設定ListPicker的問題? 我是直接下載那個app來用得 不知如何設定?

    • 偉和 says:

      您好 使用預設鮑率就可以使用了 也不需要接其他裝置 HC-06與HC-05最大差別是一個是單一模式(主機或從機) 另一個是主從一體

  5. Vic says:

    請問一下 Code跟APP 都照你的寫法做,可是監控視窗秀出來的都是
    input size = 1
    0 input size = 1
    0 input size = 1

    一直重複循環~,不管按亮或暗,請問這問題是出在哪?

  6. 菸酒生 says:

    您好
    請問在Arduino 的 Serial Monitor 顯示的 “a” 跟 “b” , 為什麼不是按一下 ,顯示一次, 而是一直吳線循環的顯示呢?
    謝謝

  7. Yang says:

    請問一下,我用的板子是 Arduino uno , 藍芽 是HC-05,藍芽也配對了,
    執行on跟off, 板子上的TX的LED燈會閃,但是LED燈卻沒有動作
    還有1個220歐姆色碼電阻,請問有用到嗎??

  8. 陳宗淯 says:

    你好 請問我執行 Arduino 做確認跑完的時後下面框框跑出這段
    bytes.
    Global variables use 523 bytes (25%) of dynamic memory, leaving 1,525 bytes for local variables. Maximum is 2,048 bytes.
    該怎麼解決?

  9. eric says:

    謝謝您的說明,Error 507問題解決了,但把程式Upload到Arduino時,出現以下訊息:
    sketch_oct08a:2: error: stray ‘#’ in program
    sketch_oct08a:2: error: expected unqualified-id before ‘<' token
    謝謝您用心的說明!!! 謝謝!!

    • CAVEDU 阿吉 - 雜工 says:

      您好,有幾個地方可以檢查:1. 是否有上傳程式到Arduino 2. Arduino 是否有執行程式(Serial Monitor 要有東西). 3. 手機是否有與藍牙發射器配對(ListPicker中要看到這片藍牙) 4. 手機點選後, 藍牙LED有沒有變為恆亮

  10. 小Q says:

    請問一下Q1 STEP1中的 “事件中”是如何去設定?
    Q2 在BLOCK中並沒有找到”call”的指令 是因為我沒設置STEP1嗎?

    • CAVEDU 阿吉 - 雜工 says:

      是的,您必須要先新增該元件(例如ListPicker 或是 Button)才有該元件的事件可以使用。所以您必須按照我們提供的程式畫面,在畫面中新增一個 ListPicker 與兩個 Button

  11. Abrams says:

    你好,請問為何我在執行程式時Serial monitor完全沒有顯示任何東西
    Android手機確定有連結上藍芽模組(HC-06,模組上的紅燈也從閃爍轉為恆亮),Baud Rate在Arduino程式碼中也設定了9600
    App Inventor的程式我用過自己寫的(比照此教學文章寫出) 跟文章所附的範例程式皆發生一樣的情形
    Arduino的程式是從這邊複製過去,只有修改Baud Rate為9600

    • CAVEDU 阿吉 - 雜工 says:

      您好,我們沒有測試過。剛剛爬了一下文,應該是還不行哩,真的有這個需求的話,應該還是要回到Android 。https://groups.google.com/forum/#!topic/mitappinventortest/IL6ZW5HDcoc

  12. choose says:

    想請問您,不是用ARDUINO模組是否可行,我自己已經做出 用藍芽串口可控制,現在想用APP取代串口
    也想請您可不可以提供設計頁面,謝謝

  13. GUYUFEI says:

    你好,請問藍牙連接上,每次按turnon,turnoff 板子上TX燈都會閃,但是LED不亮滅,怎麼回事monitor顯示
    input size = 1
    255 input size = 1
    255 input size = 1
    255 input size = 1
    255 input size = 1

  14. TrouBle says:

    “將 BluetoothClient.AddressAndNames指令為 ListPicker1內容” 這步驟我不太清楚怎麼叫出他來
    抱歉初學者

  15. Clement law says:

    你好,有個問題請教,我看到別的例子時?他們沒有用 SoftwareSerial 定義藍的鮑率,是用Rx/Tx來定義,但我嘗試是沒有反應,謝謝

  16. jerry says:

    請問一下 我的code全部都是複製大大的 但是LED卻不能亮 是否是因為appinventor不支援HC系列藍芽呢?
    小弟有試過 Serial monitor 但是還是空白

  17. TrouBle says:

    sketch_dec29a.ino:2:12: error: stray ‘#’ in program
    sketch_dec29a.ino:2:1: error: expected unqualified-id before ‘<' token
    請問這是甚麼問題?

  18. jerry says:

    就是 小弟藍芽有連到(藍芽的燈有持續亮著,然後手機有配對到藍芽),但是arduino好像沒動作一樣 我LED登在收到藍芽後 我手機程式按下led on 沒有反應 不知道是哪裡出錯了

  19. Antony Chen says:

    大大你好!! 因為這學期專題要利用 手機app inventor2來控制搭配藍芽連結ArduinoUNO控制方向燈,左閃爍跟右閃爍.
    目前Android手機APP Inventor 2做為控制器 以藍芽連結在ArduinoUNO上作為方向燈控制.
    有照大大的範例做成功LED亮跟滅. 想請教大大 APP的拼圖製作 和Arduino程式哪邊還要修改一下. 以手機APP經過藍牙控制Arduino控制方向燈左閃爍跟右閃爍.
    跪求大大幫助 感恩你

  20. Rover Chiu says:

    請問一下, 我有下載 這檔案apk, 安裝置手機上,但是 bt list ,作連接藍芽動作,整各畫面都會是黑的?類似當機
    我確認我有連接上,不然會出現 err507:……….相關字串,請問這怎回事,謝謝!!!!

    • CAVEDU 阿吉 - 雜工 says:

      不斷送出文字的話,就是透過 Clock.Timer 來做囉。送出的速度可以藉由 Clock 元件的 TimerInterval 欄位來設定(單位為毫秒)。不過不建議太快,100毫秒應該很夠了吧

  21. william0441 says:

    不好意思我按bt list時候 出現
    Error 507:Unable to Connect. Is the device turn on?
    已經確認hc06上led恆亮 且我也沒按錯裝置…

  22. 阿錦 says:

    請問我的手機配對完成後,BT_LIST也有出現我的藍芽模塊,但是點了連接之後沒辦法回到點TURN ON的那個畫面
    藍芽模塊連線後手機畫面就整個黑屏了,也沒有任何錯誤訊息。

  23. Messer says:

    請問
    sketch_mar16e.ino:1:12: error: stray ‘#’ in program
    sketch_mar16e.ino:1:1: error: expected unqualified-id before ‘<' token
    這錯誤在哪?

  24. Clement law says:

    你好,有個問題請教,我下載APK 到手機之後安裝,但手機出現(Error 515: Not connected to a Bluetooth device),連接藍牙後也出現,不知是什麼問題,謝謝

      • Clement law says:

        你好,但我已預先配對好,開啟APP之後出現(Error 515: Not connected to a Bluetooth device),是否我在 App Inventor 2 build app 的問題還是手機,謝謝

        • CAVEDU 阿吉 - 雜工 says:

          您好,請問是一開啟 app 就出現這個訊息嗎?這樣有點奇怪,因為這個 app 會在您點選 ListPiceker 之後才會去連線。請把這個 app 徹底關閉之後再重新啟動一次看看好嗎?

          • Clement law says:

            你好,我在網上下載和你們都沒有問題,但我的有問題(Error 515: Not connected to a Bluetooth device),應該不是手機問題?謝謝

          • CAVEDU 阿吉 - 雜工 says:

            您好, App Inventor 在少數的Android 上會無法取得藍牙權限(這不代表手機的藍芽是壞的), 如果可以的話, 請換一支手機交叉測試看看, 如果確定是手機的問題的話, 就只好請您換一隻了. 我之前有一隻 HTC 就是這樣

  25. 葳葳 says:

    您好,我在自己新建專案實作藍牙控制時遇到問題,請問在Blocks下的When LED Turn On.Click do 的if then else 這個圖形方塊在app-inventor2裡我找不到說有什麼方法還是替代作法嗎??感恩,謝謝!!

  26. 詹適臨 says:

    您好
    我在複製Arduino的CODE的時候 發生編譯錯誤 可以請教您一下 為甚麼會出現以下錯誤嗎? 感謝你=ˇ=
    _01.ino:1:12: error: stray ‘#’ in program
    _01.ino:1:1: error: expected unqualified-id before ‘<' token
    編譯時發生錯誤

  27. Andox says:

    老師您好,我已購買您書籍(機器人卷) 學習後未能滿足需求,因此提問:

    直接藍芽控制繼電器程序怎麼寫?(不需要Arduino)
    發送16進位,繼電器代碼?

  28. 小豪 says:

    你好 請問您適用objective C去寫程式的嗎 如果是可以分享軟體嗎 別的軟體也可只要可以打程式碼就好 謝謝

  29. 魯拉拉 says:

    想請問 現在我修改程式 使第九腳成為風扇的輸出 我藍芽已經與板子連線 傳值也確定的 但還是無法驅動風扇運動停止

  30. 小柯瑞 says:

    你好,Arduino板子上TX燈會正常閃爍 但唯獨LED不會閃爍
    serial monitor 都是顯示255 input size=1
    我是使用hc05藍芽

    胞率38400和9600 都設定過了 就是沒辦法

  31. eric says:

    如果要在手機上用兩個slider設定on跟off的時間,儲存後可以依照兩個slider的時間交互on跟off,該怎麼做呢? 謝謝您!!

    • CAVEDU 阿吉 - 雜工 says:

      您好,這樣就要把 slider 的值(slider.thumbposition)透過藍牙傳給Arduino,Arduino 接到這些數值之後再去把 delay() 中的時間改掉即可。不過這樣程式等於要傳三筆數值,所以應該會比較 lag

  32. Rany says:

    你好 我先用手機藍芽和藍芽模組進行連線 然後於app端再進行清單選取 出現 error 507 unable to connect. Is the device turned on?
    請問這樣是哪邊出了問題??

    • 袁 佑緣 says:

      請確認一下您的藍牙模組的指示燈是否有閃爍,如果是常亮的話那代表已經是連接狀態,建議可以先拔掉給藍牙模組的供電再重試一次看看,要在提示燈飾閃爍(代表尚未連結)的情況下才能從手機端中清單選取並連線喔!

      • Rany says:

        目前問題是,需要手機藍牙與模組先進行連線(模組指示燈常亮),APP清單中才會出現藍芽位置,才能進行連線,但會出現error 507 情況 。反之,沒有連線(指示燈off),app清單則沒有選項進行連線。
        我用的是Microchip RN4020的模組,因此我在想會不會是AI2的藍芽模組版本太舊所以無法與我使用的模組進行通訊,或者是模組設定slave錯誤等等,是否可以給些建議 謝謝。

  33. 林顯東 says:

    Arduino:1.6.5 (Windows 8.1), 板子:”Arduino/Genuino Uno”

    建置選項已變更,重建所有

    led_switch:1: error: stray ‘#’ in program
    led_switch:2: error: #include expects “FILENAME” or
    led_switch:1: error: expected unqualified-id before ‘ 偏好設定裡啟用。

    新手問問題,我已經全部複製了,但為甚麼有這一大列的錯誤訊息出現,懇求解釋 ,
    感恩~~~

    • CAVEDU 阿吉 - 雜工 says:

      您好,請直接下載程式碼,不要複製頁面的程式碼。這個程式碼外掛會在程式碼頭尾加上怪怪的 < > 標籤,如果有朋友有建議更好的 wordpress 程式碼外掛也請告知小弟喔

  34. Patrick says:

    HiHi, 我又試了很多次的 Try and Error, and got baud rate @38400 works…
    所以我的 BT module default 是在 38400? ^^

  35. says:

    您好~
    我的是Arduino UNO R3 SMD 開發板,Pin13不是PWM訊號,我連接完藍芽手機APP按turnon只有板子的RX會亮,LED燈不會亮,會不會是板子不一樣所以腳位也不一樣的關係?

    • CAVEDU 阿吉 - 雜工 says:

      您好,是的,因為本篇使用的是 Arduino MEGA2560,他的D13腳位有支援PWM。您如果使用 Uno 的話,請把 arduino 程式碼中關於 13號腳位改為 3 5 6 9 10 11 其中之一腳位即可

  36. says:

    你好~
    我的是arduino uno 開發板,13腳位不是pwm,手機app按下turnon時只有板子的RX會亮,LED不會亮,請問是不是板子不同的關係?

    • CAVEDU 阿吉 - 雜工 says:

      您好,與上一個問題的狀況是一樣的喔。因為本篇使用的是 Arduino MEGA2560,他的D13腳位有支援PWM。您如果使用 Uno 的話,請把 arduino 程式碼中關於 13號腳位改為 3 5 6 9 10 11 其中之一腳位即可

  37. 黃維義 says:

    我是依照上面完全複製
    可是傳程式卻顯示以下,想問怎麼樣情況會發生這樣??
    Arduino: 1.6.9 Hourly Build 2016/04/20 08:33 (Windows 10), Board: “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    __:29: error: stray ‘\343’ in program

    ??

    ^

    __:29: error: stray ‘\200’ in program

    __:29: error: stray ‘\200’ in program

    exit status 1
    stray ‘\343’ in program

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    • CAVEDU 阿吉 - 雜工 says:

      您好,這是編碼問題,請由文中連結下載雙A計畫的 source 後直接開啟 .ino 檔,不要複製網頁文字,這樣會有怪怪的東西躲在裡面,就是他說的 “stray ‘\200’ in program”

  38. Hank Hsu says:

    我想請問為何程式碼裡面要用 while(1)
    跟拿掉 while,把 loop 裡面宣告的兩個變數拿到外面不是也一樣嗎?

  39. 紀力維 says:

    你好 我的控制板是raspberry pi3,我想用python語言將GPS模組讀到的經緯度顯示在APP Inventor上,請問有辦法直接顯示嗎?還是要透過一個雲端儲存資料,APP Inventor在去抓取雲端的資料?這部分有什麼的文章可以參考嗎? 感謝

  40. Nick says:

    想請問一下,我用YFROBOT的藍芽和HC06連app inventor都沒問題,但改成HC05一開始也都聯的上,但連上後稍微操作一下,程式就當掉了,是什麼原因呢?

  41. 小水滴 says:

    請問燒入時出了一些問題 ,請問該如何解決
    Arduino:1.6.7 (Windows 10), 板子:”Arduino/Genuino Uno”

    sketch_sep16a:29: error: stray ‘\343’ in program

    ??//霈???洵銝?????

    ^

    sketch_sep16a:29: error: stray ‘\200’ in program

    sketch_sep16a:29: error: stray ‘\200’ in program

    exit status 1
    stray ‘\343’ in program

    這份報告的詳情將會在
    “編譯時顯示詳細輸出資訊”
    在檔案 > 偏好設定裡啟用。

  42. 洪有均 says:

    請問燒入時出了一些問題 ,請問該如何解決
    Arduino:1.6.7 (Windows 10), 板子:”Arduino/Genuino Uno”

    sketch_sep16a:29: error: stray ‘\343’ in program

    ??//霈???洵銝?????

    ^

    sketch_sep16a:29: error: stray ‘\200’ in program

    sketch_sep16a:29: error: stray ‘\200’ in program

    exit status 1
    stray ‘\343’ in program

    這份報告的詳情將會在
    “編譯時顯示詳細輸出資訊”
    在檔案 > 偏好設定裡啟用。

  43. 阿豪 says:

    你好! 上面 [雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人 連結點入無法使用 請問這篇還在嗎

  44. Ming says:

    我做到step3時,沒有在程式方塊圖中的LED Turn On找到”when LED Turn On.click”的方塊,請問阿吉,該怎麼解決呢??

  45. Luke Lu says:

    不好意思我是初學者,可以詢問LED燈和電阻要怎麼接嗎,是LED燈直接接13腳位和接地嗎,感謝!

  46. 鄭東昕 says:

    您好,請問一下,我做到第三個步驟時您的提示為”when btlist . before picking”
    但是我的app inventor編輯軟體裡的選項如下:
    .Click
    .GotFocus
    .LongClick
    .LostFocus
    .TouchDown
    .TouchUp
    裡面的選項裡沒有.before picking
    麻煩幫我解答一下,謝謝!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *