為了找答案,今天以「bluetooth serial」的關鍵字搜尋,結果找到了「Bluetooth Serial Controller N7」和「Bluetooth Serial Controller」兩個 Apps,玩著玩著,居然玩了二個多小時,滿有趣的程式,它和我當初想設計的東西類似,可以拿來控制 Arduino 吔!順便用 JavaScript 寫了個編碼工具,方便計算 S4A 的Arduino 指令。
為了抓畫面方便,我在 VMWare 中的 Android-x86 安裝了「Bluetooth Serial Controller N7」。 Android-x86 實在太厲害了,電腦的藍芽可以在虛擬機中的 Android-4.4 使用。
啟動 Bluetooth Serial Controller N7 後,我們先來設定一下按鈕的名稱及按下去以後要送出哪些資料給 Arduino。
點選右上角的「PREFERENCE」
先來設定按鈕上的文字,按一下「Name」
點選要設定的按鈕,底下以 Button 2 和 Button 5 為例
準備設定 Button 2 的文字 |
將 Button 2 的文字設為「Forward」 |
將 Button 5 的文字設為「STOP」 |
再來設定按鈕按下去後的功能
先設定要以一般文字還是十六進制(HEX)來顯示(設定)資料
將顯示/設定格式改為十六進制(HEX) |
設定按鈕按完以後要送出的資料,底下以 Button 2 和 Button 5 為例:
準備設定按鈕的功能 |
先點要設定的按鈕啟用它,再點設定值修改 |
將 Button 2 設為送出「E801」 |
將 Button 5 設為送出「E800」 |
按鈕都設定完,可以按「上一頁」回到「PREFERENCE」的最上層,在右上角有個「BACKUP」,按下去即可選擇儲存或載入設定檔。
按鈕都設定好了,就可以準備藍芽連線測試囉!
按上方選單中的「CONNECT」進入連線選單 |
點選 Arduino 的藍芽裝置 |
按一下之前設定好的按鈕,測試一下有沒有送出指令給 Arduino 。
S4A 指令產生器
如果想送資料給安裝 S4A firmware 的 Arduino ,我用 JavaScript 寫了個小工具,只要填入Arduino「腳位編號」及想送出的值,按完「計算」即可以輕鬆的產生該送什麼十六進位的資料。在設定 Bluetooth Serial Controller 按鈕指令時,照著打即可。
Arduino腳位: 設定值:
輸出結果:
例如:我想在按下按鈕 2 (Forward) 時,控制
- pin 10 = 0 (OFF)
- pin 11 = 1 (ON)
- pin 12 = 0 (OFF)
- pin 13 = 1 (ON)
- pin 5 = 255
- pin 6 = 255
依序輸入後,即可產生 Button 2 的「command」應該是:「D000D801E000E801A97FB17F」。
我用這個來控制載有 S4A firmware 的 Arduino ,讓它控制 L293D 上的馬達,科學魔法車會前進。滿有趣的!
測試的結果,「Bluetooth Serial Controller N7」和「Bluetooth Serial Controller」兩個 Apps 使用相同的設定檔,而前者會顯示由藍芽傳來的資料,後者則純粹送出資料而已。按鈕的功能部份,如果設定的不是按完後執行的「STOP COMMAND」,就可以使用「REPEAT」的功能,讓按鈕變成按著「連發」的功能。
相關文章
我想請問一下, 如果說我是要Arduino 傳資料給Android 的話,可以怎麼做呢?
回覆刪除因為我看很多的資料都是Android傳資料 Arduino去做控制處裡的, 沒有甚麼資料是傳給Android的@@
刪除資料傳輸原本就雙向均可,合用的 Apps 應該不好找,建議您可以用 App Inventor 自己寫。用「app inventor bluetooth」google 一下,應該可以找到範例
刪除目前我是使用Eclipse 去編寫APP程式(剩下藍芽部分了),如果現在我去使用App Inventor 處理Bluetooth 兩方面可以去做結合嗎?我比較想要知道這點,請求指教。
回覆刪除(目前在做Arduino傳資料給手機去做顯示處理事件的相關APP)
現在學寫程式要善用 google, 給您兩組 keywords
刪除android bluetooth example
android bluetooth site:github.com
如果用 app inventor , 您勢必要重新來過,用它寫簡單程式 OK,很適合初學者,會用 Eclipse ,就直接用 JAVA 來寫就好。您要只是不知使用哪些 lib, 上網查一下就有很多範例了。
感謝,一下子找到很多的範例,原來是Keyword打錯!
刪除請問一下 我連線 出現 UNABLE TO CONNECT DEVICE 該如何解決?
回覆刪除您好:
刪除基本上, 您未提供您進行過的操作程序, 很難猜到底卡在哪裡的。
建議您要先到 Android 藍芽設定的中確認一下藍芽是否已配對, 如果不曾配對過, 是無法連線的。
您好,可以請教您Arduino的程式怎麼寫嗎? 我有連接成功但無法做控制!
回覆刪除您好:
刪除建議您在 google 中用「arduino android bluetooth」三個 key words 試試, 已有很多教學文件了。
您好,感謝您的建議,我有瀏覽過許多網站的教學,但一樣還是沒有試成功,也找不出是哪裡出問題。
回覆刪除我目前使用Bluetooth Serial Controller N7 ,已經有跟藍芽模組連線,但連線之後卻沒有看到 S4A 傳來資料,所以不確定到底是我藍芽模組問題還是連線設定的問題!
程式部分我使用http://tw.leaderg.com/article/index?sn=9489 裡面的程式
直接送Ascii碼 給serial.read做判斷 我在serial monitor裡做測試是可以的 但是用app控制都沒有反應 可否給我一些建議呢? 感謝!!
您好:
刪除照您的說法,以「網址」中的程式測試可以,所以,您的藍芽連線速度設為 9600 ? 假設您的 Arduino 裝的是 S4A 的 firmware, 那藍芽得設為 38400 才可以,不然,和 firmware 裡的設定不同,肯定無法正常通訊。另外,因為 S4A 會不斷的送出資料,依我的使用經驗,「Bluetooth Serial Controller N7」用一段時間後,很可能會當掉,在猜想,應該是它的 buffer 灌爆了。簡單的說:使用 Bluetooth Serial Controller N7 ,目前僅能玩一玩。
是的,我程式有改成為鮑率38400,連接Bluetooth Serial Controller N7的情況比較像是沒有成功傳送資料的感覺,因為有顯示連線成功,也沒有當掉的現象,但都沒有跳出很多的數據。
刪除想請問您使用那個網址的程式,確定是可以動作的嗎? 會不會是我的手機app有問題,還是藍芽模組沒有設定好呢?
作者已經移除這則留言。
回覆刪除您好!
回覆刪除我是拜讀你的文章才瞭解S4A這款軟件。
請教一下:例如S4A裏 ‘當按下空格鍵’,S4A通過串口發送了哪個字節給arduino?
我想通過串口發送單字節控制arduino pin13開關。請問在S4A應添加哪個控件,類似于 serial.read實現上面效果 ? 望不吝賜教 :)
您好:
刪除建議您先看一下什麼是 S4A ( http://s4a.cat/ )
基本上, Arduino 裝了 S4A 的 firmware 後, 我主要會搭配改過的舊版 Scratch ( S4A ) 給初學者練習以「積木」的方式寫程式控制 Arduino。以 S4A 的運作來說,它和 Arduino 之間只傳輸各個 I/O 的值(腳位+內容, 編碼過),您說的按下 "空格鍵" 要觸發送出什麼,是由寫程式的人自訂,因此,我無從知道您要送出什麼。
本篇文章純屬以 Android App 來和 S4A 玩耍的記錄,其實它不具「生產力」的。
哈囉:
回覆刪除板主可以請教你一些問題嘛?
我可以拿你這個手機藍芽控制的APP去控制arduino上的馬達停止或啟動嗎?
還是我還要自己製作一個APP程式去控制?
您好:
刪除可不可以? 試了便知道啊! 玩電子的東西,坐而言,不如起而行。有實驗的精神,動手去試才有樂趣!
文章中提到的是以 Arduino 當 MCU,搭配 S4A 的 firmware,來控制 L293D 的動作,再利用本文中的 Android Apps 來遙控。您如果想自己寫 Apps 來控制,當然會最符合自己的需求。
Hello.
回覆刪除Thank you for using my app.
Unfortunately, "Bluetooth Serial Controller" was deleted.
So, I released "BlueTooth Serial Controller" as a new app.
If you're still using this app, try to check it.
K Sat :
刪除Thanks for your advice.
多謝分享!
回覆刪除請問版主,雖然App已經連到HC-06了,但為甚麼中間沒有顯示S4A傳來的資料呢??
回覆刪除您好:
刪除S4A內定的連線速率為 38400 , 如果您速率沒設定對, 即使藍牙已經匹配成功了,可能還是無法正確的解譯資料。