AppInventor - 圖形化Android【雙A計劃】Part0:App Inventor 透過藍牙傳送訊號給 Arduino
由於智慧型手機的普及,幾乎人人都各自擁有一台,所以我將發一系列教導大家如何將手機與Arduino做結合。
若沒學過java的控制手機怎辦?別擔心,本系列所用的程式語言為appinventor,是給沒使用過java但想寫手機程式的玩家所使用。 想學習appinventor的玩家可以透過下列二個網址學習: 前往AppInventor官網。
雙A計畫文章總覽:
硬體接線
請根據下圖,將藍牙發射器及LED接上Arduino (藍牙RX - Arduino D11, 藍牙TX - Arduino D10腳位)
[caption id="attachment_19411" align="aligncenter" width="352"]

藍牙TX: Arduino D10 (RX)。藍牙RX: Arduino D11 (TX) 定義於I2CBT(10,11); 語法中[/caption]
App Inventor 介面設計
STEP1:App Inventor 編寫簡易的藍牙訊息發送程式。畫面上只有三個元件,由上而下依序為 ListPicker 與兩個Button。
app 程式說明
在程式初始化時,設定各元件可否點選。並在 ListPicker 點選之前設定其內容為藍牙(BLuetoothClient)的配對裝置位址與名稱。
當 ListPicker 被點選之後,則對該點選位置發起連線。成功的話則設定各元件可否點選。

當按下[sens a word]按鈕後,Android 手機會經由藍牙發送一個字元「a」給Arduino,您可在 Arduino IDE 的 Serial Monitor 中看看是否正確接收。
按下[disconnect]按鈕,則斷開藍牙連線,並將各元件恢復連線前狀態。
Arduino CODE
[pastacode lang="c" message="App Inventor send char to Arduino" highlight="" provider="manual" manual="%23include%20%3CSoftwareSerial.h%3E%20%0A%23include%20%3CWire.h%3E%20%20%2F%2F%E5%BC%95%E7%94%A8%E4%BA%8C%E5%80%8B%E5%87%BD%E5%BC%8F%E5%BA%ABSoftwareSerial%E5%8F%8AWire%20SoftwareSerial%20%0ASoftwareSerial%20I2CBT(10%2C11)%3B%20%2F%2F%E5%AE%9A%E7%BE%A9PIN10%E5%8F%8APIN11%E5%88%86%E5%88%A5%E7%82%BARX%E5%8F%8ATX%E8%85%B3%E4%BD%8D%20%0Avoid%20setup()%20%7B%20%0A%20%20Serial.begin(9600)%3B%20%2F%2FArduino%E8%B5%B7%E5%A7%8B%E9%AE%91%E7%8E%879600%20%0A%20%20I2CBT.begin(57600)%3B%20%2F%2F%E8%97%8D%E7%89%99%E9%AE%91%E7%8E%8757600%0A%20%20%2F%2F(%E6%B3%A8%E6%84%8F%EF%BC%81%E6%AD%A4%E9%AE%91%E7%8E%87%E6%AF%8F%E5%80%8B%E8%97%8D%E7%89%99%E6%99%B6%E7%89%87%E4%B8%8D%E4%B8%80%E5%AE%9A%E7%9B%B8%E5%90%8C%EF%BC%8C%E8%AB%8B%E5%85%88%E7%A2%BA%E8%AA%8D%E5%AE%8C%E5%86%8D%E5%A1%AB%E5%AF%AB%E9%80%B2%E5%8E%BB)%20%0A%7D%20%0A%0Avoid%20loop()%20%7B%20%0A%20%20byte%20cmmd%5B20%5D%3B%20%0A%20%20int%20insize%3B%20%0A%20%20while(1)%7B%20%0A%20%20if%20((insize%3D(I2CBT.available()))%3E0)%0A%20%20%7B%20%20%2F%2F%E5%88%A4%E6%96%B7%E6%9C%89%E6%B2%92%E6%9C%89%E8%A8%8A%E6%81%AF%E6%8E%A5%E6%94%B6%20%0A%20%20%20%20Serial.print(%22input%20size%20%3D%20%22)%3B%20%0A%20%20%20%20Serial.println(insize)%3B%20%20%2F%2F%E9%A1%AF%E7%A4%BA%E6%8E%A5%E6%94%B6%E5%A4%9A%E5%B0%91%E8%A8%8A%E6%81%AF%20%0A%20%20%20%20for%20(int%20i%3D0%3B%20i%3Cinsize%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20Serial.print(cmmd%5Bi%5D%3Dchar(I2CBT.read()))%3B%2F%2F%E5%B0%87%E6%8E%A5%E6%94%B6%E7%9A%84%E8%A8%8A%E6%81%AF%E9%A1%AF%E7%A4%BA%E5%87%BA%E4%BE%86%0A%20%20%20%20%20%20Serial.println(%22%20%22)%3B%20%20%0A%20%20%20%20%7D%2F%2Fif%0A%20%20%7D%20%2F%2Ffor%20%0A%20%20%7D%2F%2Fwhile%0A%7D"/]
執行
執行時請先確認 Arduino 程式已正確上傳,再開啟 app,從選單中選擇 Arduino (其實是藍牙發射器) 的藍牙位址之後,就可以連線。
連線成功之後,點選
[send a word] 按鈕就會對 Arduino 發送字元 ‘a’,Arduino 端的 Serial Monitor 也會看到對應的訊息。後續與控制相關的教學,都會以這個架構作為出發點。
操作完畢,點選
[disconnect] 按鈕就會斷開藍牙連線,才可進行下一次操作。
留言 💬 (0)
還沒有留言,來當第一個。