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

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

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

[雙A計畫] 常見問題整理

[雙A計劃] Part0:App Inventor 透過藍牙傳送訊號給 Arduino

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

English version

Arduino LED Blink

Arduino LED PWM

Arduino LED Blink (Arduino 101 with BLE)

Arduino LED PWM (Arduino 101 with BLE)

範例程式請點我下載(App Inventor中文學習網檔案庫)

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板 (本文使用 Arduino MEGA2560)

3.藍牙收發接收器(本系列使用JY-MCU04 或 JY-MCU05)

4.麵包板

5.1個220歐姆色碼電阻

6.1顆LED

先由下圖將藍牙發射器及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

程式說明:

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

#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
}
App Inventor light up Arduino LED

 

214 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:……….相關字串,請問這怎回事,謝謝!!!!

  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燈不會亮,會不會是板子不一樣所以腳位也不一樣的關係?

  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 雙輪機器人 連結點入無法使用 請問這篇還在嗎

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *