[ App Inventor IoT ] LinkIt 7697使用 BLE(藍牙4.0)控制伺服馬達

這次向各位介紹常用的雲端服務,分別是台灣聯發科技公司搭配旗下LinkIt系列開發板之MCS與ThingSpeak,我們透過LattePanda實作。你可以從遠端來控制板子的腳位狀態或是檢視板子狀態與感測器的數值變化。類似的雲服務近年來如雨後春筍般冒出來,對於想找尋免費方案的使用者或教學單位來說是相當好的事呢。

作者/攝影   袁佑緣
時間   1小時
成本
  • 約800元
難度   * *
材料表
  • LinkIt 7697*1
  • micro usb線*1
  • 伺服馬達*1
  • 電腦*1
  • Android手機*1

本文章教各位讀者如何用手機撰寫App Inventor的應用程式,並透過Buletooth Low Energy來遙控LinkIt 7697的伺服馬達。

App Inventor Extension 安裝 

請先進到App Inventor的網站,並建立一個專案,在左下角Extension的部份,點選import extension,如下圖。

並把從MIT App Inventor Extensions網站(http://appinventor.mit.edu/extensions/)上的BLE套件裝上去。

如果讀者想要直接取用本範例的aia檔也可以,這樣就不需要再手動安裝Extension,因為已經包含在aia檔中了。

 

本範例的aia檔請到此處下載-連結

 

App Ineventor 程式設計 

首先請確認您有按照前面的步驟將BLE元件新增App Inventor中,如下圖。

接下來請看到Desginer的部份,首先在第一行有TextBox元件,用來顯示現在控制的伺服馬達角度,接下來有兩個按鈕,左邊的connect按鈕主要是用來連線到7697,右邊的Disconnect則是斷線,最後,在最下面有一個滑桿,可以用拖曳來控制馬達的角度(注意因為這邊控制的伺服馬達可控角度為0~180度,所以在Slider元件上要設定最大值為180最小值為0)。

接下來看到後台的Blocks端,首先我們要先定義一個addr的變數,用來指定要連接的LinkIt 7697的mac address,至於這個mac address會根據每一塊不同的板子而有所不同,請讀者按照待會Arduino程式設計的部份所顯示的MAC Adress填入正確的位址。

再來當按鈕connect按下去之後,就會嘗試連上指定mac address的控制板,如果成功的話,滑桿跟計時器就會被啟動。

而斷線的部份則跟連線差不多,只是Enabled跟Disabled的元件會相反。

接下來是本範例的重點部份,Clock元件每隔一段時間就會啟動一次傳送BLE訊息的服務,而這個服務會將滑桿上此刻的數值先轉成整數後透過指定的Service跟Characteristic送出,而在這邊的UUID務必確認跟Arduino程式碼端的設定一樣,7697才能成功接收到數值喔!

LinkIt 7697 程式設計

 請打開Arduino IDE,並確定您的控制板在編輯器中切換成7697,再上傳以下的程式碼到7697上。 本範例的ino檔請到此處下載-連結

 

[pastacode lang=”c” manual=”%23include%20%3CLBLE.h%3E%0A%23include%20%3CLBLEPeriphral.h%3E%0A%23include%20%3CServo.h%3E%0A%0AServo%20my_servo%3B%0Aint%20servo_position%20%3D%2090%3B%0A%0A%2F%2F%20Define%20a%20simple%20GATT%20service%20with%20only%201%20characteristic%0ALBLEService%20servoService(%2219B10010-E8F2-537E-4F6C-D104768A1214%22)%3B%0ALBLECharacteristicInt%20positionCharacteristic(%2219B10011-E8F2-537E-4F6C-D104768A1214%22%2C%20LBLE_READ%20%7C%20LBLE_WRITE)%3B%0A%0A%0Avoid%20setup()%20%7B%0A%0A%0A%20%20%2F%2FInitialize%20serial%20and%20wait%20for%20port%20to%20open%3A%0A%20%20Serial.begin(9600)%3B%0A%0A%20%20%2F%2F%20to%20check%20if%20USR%20button%20is%20pressed%0A%20%20pinMode(6%2C%20INPUT)%3B%0A%0A%20%20my_servo.attach(10)%3B%0A%20%20my_servo.write(servo_position)%3B%0A%0A%20%20%2F%2F%20Initialize%20BLE%20subsystem%0A%20%20LBLE.begin()%3B%0A%20%20while%20(!LBLE.ready())%20%7B%0A%20%20%20%20delay(100)%3B%0A%20%20%7D%0A%20%20Serial.println(%22BLE%20ready%22)%3B%0A%0A%20%20Serial.print(%22Device%20Address%20%3D%20%5B%22)%3B%0A%20%20Serial.print(LBLE.getDeviceAddress())%3B%0A%20%20Serial.println(%22%5D%22)%3B%0A%0A%20%20%2F%2F%20configure%20our%20advertisement%20data.%0A%20%20%2F%2F%20In%20this%20case%2C%20we%20simply%20create%20an%20advertisement%20that%20represents%20an%0A%20%20%2F%2F%20connectable%20device%20with%20a%20device%20name%0A%20%20LBLEAdvertisementData%20advertisement%3B%0A%20%20advertisement.configAsConnectableDevice(%22BLE%20Servo%22)%3B%0A%0A%20%20%2F%2F%20Configure%20our%20device’s%20Generic%20Access%20Profile’s%20device%20name%0A%20%20%2F%2F%20Ususally%20this%20is%20the%20same%20as%20the%20name%20in%20the%20advertisement%20data.%0A%20%20LBLEPeripheral.setName(%22BLE%20Servo%22)%3B%0A%0A%20%20%2F%2F%20Add%20characteristics%20into%20servoService%0A%20%20servoService.addAttribute(positionCharacteristic)%3B%0A%0A%20%20%2F%2F%20Add%20service%20to%20GATT%20server%20(peripheral)%0A%20%20LBLEPeripheral.addService(servoService)%3B%0A%0A%20%20%2F%2F%20start%20the%20GATT%20server%20-%20it%20is%20now%20%0A%20%20%2F%2F%20available%20to%20connect%0A%20%20LBLEPeripheral.begin()%3B%0A%0A%20%20%2F%2F%20start%20advertisment%0A%20%20LBLEPeripheral.advertise(advertisement)%3B%0A%7D%0A%0Avoid%20loop()%20%7B%0A%20%20delay(300)%3B%0A%0A%20%20Serial.print(%22conected%3D%22)%3B%0A%20%20Serial.println(LBLEPeripheral.connected())%3B%0A%0A%20%20if%20(digitalRead(6))%0A%20%20%7B%0A%20%20%20%20Serial.println(%22disconnect%20all!%22)%3B%0A%20%20%20%20LBLEPeripheral.disconnectAll()%3B%0A%20%20%7D%0A%0A%20%20if%20(positionCharacteristic.isWritten())%20%7B%0A%20%20%20%20servo_position%20%3D%20positionCharacteristic.getValue()%3B%0A%20%20%20%20Serial.println(servo_position)%3B%0A%20%20%20%20my_servo.write(servo_position)%3B%0A%20%20%7D%0A%0A%0A%7D%0A%0A” message=”” highlight=”” provider=”manual”/]

成功上傳本隻程式碼到7697上後,請打開Serial Monitor,7697將會印出這塊板子的MAC Address,請務必記得把這段位址修改到App Inventor端的addr變數上喔。

範例影片:

 

相關文章:

發佈留言

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