Tag Archives: ble

[ 介紹文 ] 2018.10.04- 我挖!我挖!!我挖挖挖!!!Tamiya怪手大改造 從線控成為BLE遠端控制

作者

SmallpTsai

圖片

pixabaySmallpTsai

撰稿

宗諭

審閱

鈺莨

說明

感謝專案作者SmallpTsai開放授權,讓CAVEDU教育團隊能撰寫本文,特此致謝!若想更進一步了解專案詳細檔案、資料,請點這裡

 

這次的挑戰,是改裝Tamiya 70170線控怪手,安裝上LinkIt 7697開發板,使手機能透過低功耗藍牙(BLE),遠端控制。看看作者SmallpTsai如何製做。

圖1 SmallpTsai專案的目標

 

第一步:Tamiya 70170怪手組裝

主要按照產品的使用者說明書,一步步組裝。但記得略過步驟1至4,因為這個專案不需線控。至於該如何確認怪手組裝成功呢?必須透過手動接電池測試,確認怪手內的三顆馬達都能正常運作。

 

第二步:電腦端環境設定

如果您過去沒有使用過Arduino IDE,請Google搜尋「Arduino IDE」,接著下載並安裝。近一步Google搜尋「7697設定Arduino IDE」,並根據聯發科技的教學文件設定。而在聯發科技的教學文件中,提供了一個範例程式,請依照教學文件一步步操作,便可將範例程式燒錄至LinkIt 7697。但我們可以在程式中的LRemote.setName(),把括號內的名稱改成自己喜愛的名字。

 

第三步:手機端環境設定

請至App Store(iOS)或Play商店(Android),下載「LinkIt Remote」並安裝。開啟LinkIt Remote後,請按右上角的「refresh」按鈕,讀者們應該會看到自己的裝置名稱,請選擇它。如果一切運作順利,讀者們應會看見下圖:

圖2 LinkIt Remote初始時的使用者介面

 

經過電腦端和手機端的環境設定後,我們需確定能以手機遙控LinkIt 7697上的LED燈。測試方法就是點擊USR LED這個切換按鈕,應該會看見 LinkIt 7697 開發板上內建的USR LED亮起來。

 

第四步:接電路

這個專案運用2個L293D馬達控制板,控制3顆馬達。而控制3顆馬達需用到6個腳位,運用到的腳位,請見下表:

馬達A腳位B腳位
Left1716
Right1514
ARM1312

表一

接線圖:

圖3

 

電路接好後,應能以手機控制馬達正轉或反轉。若讀者在接電路部分想更多了解,請至作者的GitHub頁面上交流,謝謝。

 

接下來,就是把程式碼燒錄至Linkit 7697開發板,然後就可用手機遠端控制怪手了。以下是不同學員的作品,給大家參考。雖然Tamiya 70170怪手的外型和結構基本上是固定的,仍可發揮一些巧思,使作品更有創意。

圖4 學員Hanny的怪手

 

圖5 Hanny設計的控制介面

Hanny的控制介面的原始碼

 

圖6 學員Jenny的作品

 

圖7 Jenny設計的控制介面

Jenny的控制介面的原始碼

 

備註:若想購買LinkIt 7697,歡迎洽詢機器人王國商城。

 

相關文章

 

[App Inventor IoT] 使用BLE控制LinkIt 7697 LED燈

 

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

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

 

App Inventor Extension 安裝

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

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

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

 

本範例的aia檔請到此處下載(https://drive.google.com/open?id=0B0HNqd_8V0OlNjJDTGx0dVNKOTg)。

(建議先下載後重新上傳到app inventor tw的檔案庫上)

 

App Ineventor 程式設計

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

接下來請看到Desginer的部份,connect按鈕主要是用來連線到7697的,而下面有兩個按鈕,分別用來控制LED燈的ON跟OFF。

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

再來當按鈕connect按下去之後,就會嘗試連上指定mac address的控制板,如果成功的話就,按鈕就會切換到Disconnect,以等待下一次使用者按下時,就會斷線。

至於定義連線時與斷線時的功能有哪些,則是用下面的when block來決定,只有成功連線時,才能夠控制控制LED的開關。

接下來是本範例的重點部份,當按下ON/OFF開關時,會透過BLE元件的WriteIntValue來傳送訊息給7697,並且是已經指定好service跟characteristic的uuid了,而這個uuid其實是跟Arduino端裡面寫的UUID是一致的,詳情請看下面的範例程式碼。

 

而我們送出的整數數值1或者是0則分別代表LED是要亮或者是暗。

 

LinkIt 7697 程式設計

本範例程式可以在Arduino IDE的範例code上找到,請先確定您的控制板在編輯器中切換成7697,再點選Files->Examlpes->LBLE->SimplePeripheral。

/*
  This example configures LinkIt 7697 to act as a simple GATT server with 1 characteristic.

  To use it, open AppInventor project:

    * 

  Build & install it on Android id

  created Mar 2017
*/
#include <LBLE.h>
#include <LBLEPeriphral.h>

// Define a simple GATT service with only 1 characteristic
LBLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

void setup() {

  // Initialize LED pin
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  //Initialize serial and wait for port to open:
  Serial.begin(9600);

  // to check if USR button is pressed
  pinMode(6, INPUT);

  // Initialize BLE subsystem
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");

  Serial.print("Device Address = [");
  Serial.print(LBLE.getDeviceAddress());
  Serial.println("]");

  // configure our advertisement data.
  // In this case, we simply create an advertisement that represents an
  // connectable device with a device name
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE LED");

  // Configure our device's Generic Access Profile's device name
  // Ususally this is the same as the name in the advertisement data.
  LBLEPeripheral.setName("BLE LED");

  // Add characteristics into ledService
  ledService.addAttribute(switchCharacteristic);

  // Add service to GATT server (peripheral)
  LBLEPeripheral.addService(ledService);

  // start the GATT server - it is now 
  // available to connect
  LBLEPeripheral.begin();

  // start advertisment
  LBLEPeripheral.advertise(advertisement);
}

void loop() {
  delay(1000);

  Serial.print("conected=");
  Serial.println(LBLEPeripheral.connected());

  if (digitalRead(6))
  {
    Serial.println("disconnect all!");
    LBLEPeripheral.disconnectAll();
  }

  if (switchCharacteristic.isWritten()) {
    const char value = switchCharacteristic.getValue();
    switch (value) {
      case 1:
        digitalWrite(LED_BUILTIN, HIGH);
        break;
      case 0:
        digitalWrite(LED_BUILTIN, LOW);
        break;
      default:
        Serial.println("Unknown value written");
        break;
    }
  }


}

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

範例影片

([Appinventor ]使用手機BLE控制7697 LED燈)

 

相關文章:

 

 

[LinkIt 7697 iOS 方案] 寫出 Arduino code自動生成手機介面!

作者/攝影  曾吉弘
時間  3小時
成本
  • LinkIt 7697開發板
難度  * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板
  • iphone

本文要介紹聯發科技實驗室推出的LinkIt Remote iOS小程式,透過BLE來與 7697開發板互動,特色在於可以輕鬆設計各種簡易的控制界面喔!

 

LinkIt Remote iOS app

LinkIt Remote 是一個用來產生app介面的iOS小程式,是以 BLE 與 LinkIt 7697開發板搭配使用。只要在7697端設定好,就可以在兩者連線之後產生對應的介面。您需要做兩件事:

  • Arduino IDE 的 7697 SDK需要升級到9.5,才可使用最新LRemote 函式庫與本文的範例。

View post on imgur.com

  • 找一隻 iphone 安裝 LinkIt Remote iOS app,可用於掃描鄰近的 7697 開發板(需執行類似於本文的程式),並彼此溝通。

重點就是這一句:

寫Arduino code 可以自動生成 app 介面!

1.請開啟 File > Examples > LRemote > RemoteControl 範例,並上傳至您的 7697開發板。

2.下載 LinkIt Remote 到您的 iphone上,目前版本需要 iOS 10。

3.啟動 LinkIt Remote app,會看到 中的 7697 顯示在畫面的裝置清單中。

View post on imgur.com

4.點選這個 LinkIt 7697。item, the app connects to LinkIt 7697 and display the following remote UI control: (如果範圍裡有多台的話,就會看到多個項目,後續程式碼中的#25 LRemote.setName(“LinkIt 7697”); 可以修改開發板所顯示的名稱)

 

View post on imgur.com

5.請點選畫面中的 USR LED 搖頭開關,就會觸發 7697 的 USR LED (P7腳位)亮起。

6.請開啟 Arduino 的Serial Monitor,並拖拉畫面中的 Value Slider 滑桿,就可以在Serial Monitor中看到數值的變化,我們後續可以拿這個數值來控制LED亮度(analogWrite)、伺服機角度等等都可以喔。

View post on imgur.com

完工了,開始玩吧~

 

7697程式碼

 

最後是7697的程式碼,路徑是 File/Exmaples/LRemote/RemoteControl

由此可以看到如何編寫Arduino code 去定義畫面上的元件

  //設定 app 端介面 UI canvas
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);         //設定螢幕棋盤格數 3行5列

  //加入按鈕
  button.setText("Press Me");   //加入文字
  button.setPos(1, 1);               //設定位置
  button.setSize(2, 1);              //設定元件尺寸
  button.setColor(RC_PINK);   //設定位置
  LRemote.addControl(button); //加入按鈕

  //加入大型圓形按鈕
  bigButton.setText("!BIG!");
  bigButton.setPos(0, 3);
  bigButton.setSize(3, 2);
  bigButton.setColor(RC_GREEN);
  LRemote.addControl(bigButton);

  //加入滑桿
  slider.setText("Value Slider(-100 ~ 1024)");    
  slider.setPos(0, 2);
  slider.setSize(3, 1);
  slider.setColor(RC_ORANGE);
  slider.setValueRange(-100, 1024, 0);   //設定滑桿範圍
  LRemote.addControl(slider);

  //加入文字標籤
  label.setText("Remote Test");
  label.setPos(0, 0);
  label.setSize(3, 1);
  label.setColor(RC_GREY);
  LRemote.addControl(label);

  //加入on/off搖頭開關
  switchButton.setText("USR LED");
  switchButton.setPos(0, 1);
  switchButton.setSize(1, 1);
  switchButton.setColor(RC_BLUE);
  LRemote.addControl(switchButton);

 

完整程式碼如下:

/*
  This example configures LinkIt 7697 to a reciver of the iOS LinkIt Remote App

  created Aug 2017
*/
#include <LRemote.h>

LRemoteButton button;
LRemoteSlider slider;
LRemoteLabel label;
LRemoteSwitch switchButton;
LRemoteCircleButton bigButton;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);

  Serial.println("Start configuring remote");

  // Initialize GPIO
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, 0);

  // Setup the Remote Control's UI canvas
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);

  // Add a push button
  button.setText("Press Me");
  button.setPos(1, 1);
  button.setSize(2, 1);
  button.setColor(RC_PINK);
  LRemote.addControl(button);

  // Add a big, round button
  bigButton.setText("!BIG!");
  bigButton.setPos(0, 3);
  bigButton.setSize(3, 2);
  bigButton.setColor(RC_GREEN);
  LRemote.addControl(bigButton);

  // Add a slider
  slider.setText("Value Slider(-100 ~ 1024)");
  slider.setPos(0, 2);
  slider.setSize(3, 1);
  slider.setColor(RC_ORANGE);
  slider.setValueRange(-100, 1024, 0);
  LRemote.addControl(slider);

  // Add a simple text label
  label.setText("Remote Test");
  label.setPos(0, 0);
  label.setSize(3, 1);
  label.setColor(RC_GREY);
  LRemote.addControl(label);

  // Add an on/off switch
  switchButton.setText("USR LED");
  switchButton.setPos(0, 1);
  switchButton.setSize(1, 1);
  switchButton.setColor(RC_BLUE);
  LRemote.addControl(switchButton);

  // Start broadcasting our remote contoller
  // This method implicitly initialized underlying BLE subsystem
  // to create a BLE peripheral, and then start advertisement on it.
  LRemote.begin();
  Serial.println("begin() returned");
}

void loop() {

  // check if we are connect by some BLE central device, e.g. an mobile app
  if(!LRemote.connected()) {
    Serial.println("waiting for connection");
    delay(1000);
  } else {
    delay(100);
  }
  
  // Process the incoming BLE write request
  // and translate them to control events
  LRemote.process();

  // Now we poll each control's status
  
  if(button.isValueChanged()){
    Serial.print("button new value =");
    Serial.println(button.getValue());
  }

  if(bigButton.isValueChanged()){
    Serial.print("big button new value =");
    Serial.println(bigButton.getValue());
  }

  if(switchButton.isValueChanged()){
    digitalWrite(LED_BUILTIN, switchButton.getValue());
  }

  if(slider.isValueChanged()){
    Serial.print("slider to new value = ");
    Serial.println(slider.getValue());
    analogWrite(7, map(slider.getValue(),-100, 1024, 0 , 255)); 
    //將slider的數值轉換之後用來控制LED
  }
}

 

相關文章:

[LinkIt 7697開發板教學]BLE藍牙簡介

本文要介紹聯發科技實驗室7697開發板的BLE藍牙4.0通訊機制,包含central、iBeacon 以及 peripheral 等三種角色。

作者/攝影 曾吉弘
時間  3小時
成本  LinkIt 7697開發板
難度  * * *
材料表
  • 個人電腦
  • LinkIt 7697 開發板

LinkIt 7697的BLE

LinkIt 7697支援藍牙低功耗通訊協定Bluetooth Low Energy),但不支援傳統的 profile 像是 Bluetooth BR 或 EDR。Bluetooth Low Energy 裝置可作為 central 或 peripheral 裝置。peripheral裝置(像是心跳計) 會把關於本身的資料廣播出去。central裝置則會尋找附近的peripheral裝置,並可進一步連到peripheral 來存取其屬性,例如服務(service)或特徵(chracteristic)。

*BLE peripheral 與 Central   001

LinkIt 7697 提供了以下 Arduino 函式庫類別:

  • LBLE:用來初始化 Bluetooth Low Energy子系統subsystem
  • LBLECentral:提供central裝置的基本功能,例如掃描鄰近的peripheral
  • LBLEPeripheral:提供peripheral裝置的基本功能:
    • 設定advertisement package
    • 設定 characteristic與service(UUID).

7697 可用作 Central、iBeacon 以及 peripheral,請看以下介紹:

 

7697作為Central

7697的LBLE 函式庫可讓 7697 成為一個central裝置來掃描附近的BLE裝置。如以下程式中的scanner

LBLE.begin();
while(!LBLE.ready())
{
delay(10);
}
Serial.println(“BLE ready”);

//開始掃瞄鄰近的廣播資料
LBLECentral scanner;
scanner.scan();

呼叫scan()之後,central裝置就會不斷蒐尋附近的Blueotooth裝置,掃描結果會更新在LBLECentral類別,後續可呼叫 getPeripheralCount() 來取得掃瞄到的 peripheral 裝置數量。

for(int i = 0; i < scanner.getPeripheralCount(); ++i)
{
Serial.println(scanner.getName(i));
}

請注意藍牙 peripheral 的廣播內容會因不同的裝置而異,例如,一台 iBeacon 裝置丟出來資料可能會有 connectivity flag 以及製造商資料,但心跳計則可能包含 service UUID 與裝置名稱。

常見的情境是 central 去掃描附近的 iBeacon 裝置,在此會用到兩個方法isIBeacongetIBeaconInfo,用來解析iBeacon廣播資料相當好用。有掃到裝置的話,就可由Arduino IDE 的 serial monitor 畫面看到該裝置的基本資料。

 

File > Examples > LBLE > ScanPeripherals

#include <LBLE.h>
#include <LBLECentral.h>

LBLECentral scanner;

void setup() {
  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(10);
  }
  Serial.println("BLE ready");

  //開始掃瞄鄰近的廣播資料
  scanner.scan();
}

void printDeviceInfo(int i) {
  Serial.print("Addr: ");
  Serial.println(scanner.getAddress(i));
  Serial.print("RSSI: ");
  Serial.println(scanner.getRSSI(i));
  Serial.print("Name: ");
  Serial.println(scanner.getName(i));
  Serial.print("UUID: ");
  if (!scanner.getServiceUuid(i).isEmpty()) {
    Serial.println(scanner.getServiceUuid(i));
  } else {
    Serial.println();
  }
  Serial.print("Flag: ");
  Serial.println(scanner.getAdvertisementFlag(i), HEX);
  Serial.print("Manu: ");
  Serial.println(scanner.getManufacturer(i));

  if (scanner.isIBeacon(i)) {
    LBLEUuid uuid;
    uint16_t major = 0, minor = 0;
    uint8_t txPower = 0;
    scanner.getIBeaconInfo(i, uuid, major, minor, txPower);

    Serial.println("iBeacon->");
    Serial.print("    UUID: ");
    Serial.println(uuid);
    Serial.print("    Major: ");
    Serial.println(major);
    Serial.print("    Minor: ");
    Serial.println(minor);
    Serial.print("    txPower: ");
    Serial.println(txPower);
  }
}

void loop() {
  delay(3000);

  //顯示找到的peripheral裝置
  Serial.println(scanner.getPeripheralCount());
  for (int i = 0; i < scanner.getPeripheralCount(); ++i) {
    Serial.println("---");
    printDeviceInfo(i);
  }

  Serial.println("----------------------");
}

 

7697作為iBeacon

iBeacon是一個只會廣播(advertise)資料的BLE裝置,廣播的資料格式可以自訂。請注意做為 iBeacon 的 BLE 裝置無法被連接。

請用LBLEAdvertisement類別就能產生所需的iBeacon廣播資料。並可呼叫configAsIBeacon方法將廣播資料設定為iBeacon格式,如以下程式碼所示:

LBLEAdvertisementData beaconData;
beaconData.configAsIBeacon(“E2C56DB5-DFFB-48D2-B060-D0F5A71096E0”, 01, 02, -40);

  • E2C56DB5-DFFB-48D2-B060-D0F5A71096E0是您的 iBeacon UUID。這個值您可以自行產生。E2C56DB5-DFFB-48D2-B060-D0F5A71096E0因為是iOS AirLocate iBeacon example 中所用的UUID,因此許多 iOS 工具程式都有內建設定來搜尋這組UUID。
  • 01與02是 major ID 與 minor ID,可用來區別不同的iBeacon裝置。例如,您可能會在會議室或辦公室放置多台7697。您可把 major number 設為樓層,minor number 則是房間編號等。這樣一來iBeacon scanner只要透過這兩個數字就能知道使用者現在是在哪一層樓的哪一間房間了。
  • 最後一個數字Tx Power,-40,代表該裝置的發送功率。beacon scanner只要去比較這個數值與實際的訊號強度就能約略估算距離。實際的發送功率會根據天線設定方式而有異,所以建議這個數值要與 scanner 一併校正。

廣播資料設定完成之後,只要呼叫LBLEPeripheral的 advertise方法就能開始廣播資料:

LBLEPeripheral.advertise(beaconData);
LinkIt 7697 會馬上開始廣播資料,呼叫 stopAdvertise() 即可停止廣播。

7697 有現成的範例(BeaconAdvertisement),您可運用Locate Beacon這類的 ibeacon 工具來搜尋。以下是這個 app 的搜尋畫面擷圖:

File > Examples > LBLE > BeaconAdvertisement

#include <LBLE.h>
#include <LBLEPeriphral.h>

void setup() {
  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");

  //將廣播資料設定為iBeacon.
  LBLEAdvertisementData beaconData;

  //以下是AirLocate通用的UUID.
  LBLEUuid uuid("E2C56DB5-DFFB-48D2-B060-D0F5A71096E0");
  beaconData.configAsIBeacon(uuid, 01, 02, -40);

  Serial.print("Start advertising iBeacon with uuid=");
  Serial.println(uuid);

  //開始廣播
  LBLEPeripheral.advertise(beaconData);
}

void loop() {
  // The underlying framework will advertise periodically.
  // we simply wait here.
  // You can use iBeacon apps such as
  // "Locate Beacon" by Radius Networks on iOS devices to locate this beacon.
  delay(3000);
}

7697作為peripheral

第三種應用是將 7697 作為周邊,這時我們就能從別的裝置去連接它。這也是CAVEDU之前在使用LinkIt ONE較常用的方式,搭配手機來與開發板互動。

 

peripheral device裝置上需要先建立一個 GATT 伺服器,才能讓其他的 BLE central 連到這個peripheral。GATT伺服器包含了一組屬性:service與characterstic。像是心跳帶這類的服務就是用UUID來區分。一個服務可能包含多個具有數值(value)的特徵(characteristic),例如心跳帶服務就應該會有一個heart rate measurement value特徵。BLE central裝置就可以發送需求來讀寫這些數值。

關於GATT屬性,請參考Bluetooth.com 或 https://learn.adafruit.com/introduction-to-bluetooth-low-energy/gatt#services-and-characteristics

啟動GATT伺服器之前,需要定義這個服務以及我們要用到的特徵。由於服務與特徵都是永久性(persistent),並且應該會被其他central裝置頻繁讀寫,在此把service與characteristic定義為global是比較好的做法,如下所示:

#include <LBLE.h>
#include <LBLEPeriphral.h>

//定義具備一個特徵GATT服務
LBLEService ledService(“19B10010-E8F2-537E-4F6C-D104768A1214”);
LBLECharacteristicInt switchCharacteristic(“19B10011-E8F2-537E-4F6C-D104768A1214”, LBLE_READ | LBLE_WRITE);

  • 19B10010-E8F2-537E-4F6C-D104768A1214是服務UUID,可供其他central裝置尋找到它。
  • 19B10011-E8F2-537E-4F6C-D104768A1214是特徵UUID。. GATT通訊協定會把特徵視為一個緩衝器,長度最大可到512位元組。 LBLECharacteristicInt可用來定義整數型別的特徵,您再用setValue() 去設定其整數參數即可,不必去動到緩衝器內部。

定義好服務與特徵之後,接著要定義它們的關係,再把這些服務加入peripheral裝置,如下所示:

void setup() {
//將特徵加入ledService
ledService.addAttribute(switchCharacteristic);

//將服務加入GATT伺服器(即一個 BLE peripheral)
LBLEPeripheral.addService(ledService);
使用以下語法來初始化GATT伺服器:

LBLEPeripheral.begin();
請注意一旦呼叫begin()之後,就無法加入更多service,也無法修改service與characteristic之間的關係了。

peripheral裝置現在已準備好由central裝置來連線,並可藉由isWritten()檢查特徵值是否有被外部裝置來修改:

 

File > Examples > LBLE > SimplePeripheral

 

為了安全性起見,裝置的addr 不會直接寫在板子上(當然也是有這麼做的)。本範例透過以下語法將 7697 addr 顯示於 serial monitor 中,您再修改 App Inventor 即可。

 

Serial.println(LBLE.getDeviceAddress());

 

#include <LBLE.h>
#include <LBLEPeriphral.h>

// Define a simple GATT service with only 1 characteristic
LBLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214");
LBLECharacteristicInt switchCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", LBLE_READ | LBLE_WRITE);

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  Serial.begin(9600);

  //初始化BLE
  Serial.println("BLE begin");
  LBLE.begin();
  while (!LBLE.ready()) {
    delay(100);
  }
  Serial.println("BLE ready");
  Serial.print("device address is:");
  Serial.println(LBLE.getDeviceAddress()); //顯示7697 BLE addr

  //設定廣播資料
  // In this case, we simply create an advertisement that represents an
  // connectable device with a device name
  LBLEAdvertisementData advertisement;
  advertisement.configAsConnectableDevice("BLE LED");

  // Configure our device's Generic Access Profile's device name
  // Ususally this is the same as the name in the advertisement data.
  LBLEPeripheral.setName("BLE LED");

  // Add characteristics into ledService
  ledService.addAttribute(switchCharacteristic);

  // Add service to GATT server (peripheral)
  LBLEPeripheral.addService(ledService);

  //啟動GATT伺服器,此時已可被連線
  LBLEPeripheral.begin();

  //開始廣播
  LBLEPeripheral.advertise(advertisement);
}

void loop() {
  delay(100);
  if (switchCharacteristic.isWritten()) {
    const char value = switchCharacteristic.getValue();
    switch (value) {
      case '1':
        digitalWrite(LED_BUILTIN, HIGH); //7697就是D7, 其他Arduino為D13
        break;
      case '0':
        digitalWrite(LED_BUILTIN, LOW);
        break;
      default:
        break;
    }
  }
}

Android端(App Inventor)

要寫一個小程式來與7697互動,在此推薦使用App Inventor來編寫Android端程式,一方面是圖形化介面開發非常快,另一方面則是手機端有許多豐富的資源,可以讓您的專題更完整。別忘了參考CAVEDU所開發的App Inventor中文學習網喔!

請登入App Inventor (http://ai2.appinventor.mit.edu) 之後建立一個新的專案,或由此下載本範例所需之 .aia 檔

 

Designer 頁面

本範例用到的元件有多個按鈕、顯示訊息用的 Labe; 當然也需要用到最新的 BluetoothLE 元件。Designer 頁面完成如下圖,您只要做得差不多就好,不需要一模一樣。

 

Blocks 頁面

STEP1:

宣告 addr 變數,代表所要連線的7697 藍牙位址。

Screen1初始化時,要求 BluetoothLE元件開始掃瞄,連線成功的話會自動呼叫BluetoothLE.Connnected事件,並修改相關元件的設定。

STEP2:

按下連線按鈕時,根據按鈕的文字來決定要連線或斷線。您也可以使用兩個獨立的按鈕來做到這件事。

STEP3  :

斷線時呼叫BluetoothLE事件,並將元件回復到初始狀態等候下一次連線。

 

STEP4  :

按下按鈕時,透過 WriteIntValue 方法分別發送 1 與 0 出去,7697 接到這兩個整數值之後就會執行對應的動作。您可以依照這樣的架構加入更多按鈕或其他二元觸發條件(例如Google語音辨識、感測器值等等)。別忘了 7697 端也要加入更多case 來接收您新增的控制碼。

操作

請先上傳7697端的程式並開啟serial monitor來看看狀態,在此7697是一個peripheral。請點選App端的 Connect按鈕就會連線,連線成功即可點選ON/OFF按鈕(在連線成功之前不可按)來控制7697的 D7 USR LED燈亮滅。

 

相關文章:

[Arduino/Genuino101 專題] Arduino101 x BLE x MeArm x App Inventor 使用手機藍牙遙控機械手臂

本文將帶領讀者認識Arduino/Genunio101的功能,以及如何使用I2C界面來控制機械手臂MeArm、用BLE(Bluetooth Low Energy)來跟手機溝通,並使用MIT App Inventor來撰寫手機的應用程式來跟控制板溝通。

作者/攝影 袁佑緣
時間  3小時
成本  約1,850(不含101)
難度  * * * * *
材料表

 

1.Arduino/Genuino 101 介紹

2015年10月,Arduino與Intel合作發表了一塊名為Arduino/Genuino 101的開發板,使用x86的核心並搭載BLE(Bluetooth Low Energy)以及IMU(Inertial Measurement Unit),也就是內建加速度感測與陀螺儀,而本次範例將使用101上面的BLE功能,如果想要了解IMU在101上面的應用,可以參考部落格上的另外一篇文章[ Arduino101 專題實作計畫] Arduino101二輪平衡小車DIY

 

101 的詳細規格介紹

 

2. Arduino IDE 環境準備

首先請到Arduino的官網下載最新版本的IDE,https://www.arduino.cc/en/Main/Software
以筆者為例,最新的Arduino IDE版本是8.3,Windows使用者如果不想要系統安裝Arduino IDE的話,可以直接點選Windows zip的選項,下載後解壓縮,點選裡面的.exe檔也可以直接執行。

 

打開Arduino IDE後,我們要來安裝最新的101套件包,因為驅動程式也會包含在裡面,所以不需要在額外安裝囉。請打開Tools -> Board -> Boards Manager,並搜尋101,應該就會有最新版本的Intel Curie Boards跳出來,以筆者為例,最新版本為2.0.2版。

接下來因為我們的101在連接到機械手臂之間,會經過一塊16通道的伺服馬達控制板PCA9685,所以我們必須先下載PCA9685的函式庫才能控制我們的伺服馬達。

請到Adafruit的github上面下載Adafruit-PWM-Servo-Driver-Library

請點選Download,並將下載後的壓縮檔解壓縮後,放到Arduino資料夾裡面的libraries資料夾裡面。

 

3.硬體電路

接下來請準備好若干條母對公的杜邦線,以及電池提供額外的電源(6v),以防驅動機械手臂時電源供應不足,導致101控制板無法正常運作。

完整的電路接線圖如下,基本機械手臂上的四顆伺服馬達只要把接頭正確的接上PCA9685上就行了,PCA9685上面黑色的部份表示接地線,紅色部份表示電源線,黃色則是訊號線,我們可以透過此腳位輸入PWM訊號來控制伺服馬達。

PCA9685接到101的部份只要把SDA、SCL這兩個腳位接起來,好讓101可以透過I2C來跟PCA9685溝通,另外再接上VCC跟GND以提供PCA9685工作時所需的電壓就行了。

接完之後大概就會如下完成圖,因為這塊伺服馬達控制板的關係,所以我們不需要一塊額外的麵包板跟很多條的杜邦線互相接,是不是很方便啊?

 

4.Arduino 程式設計

請在Arduino IDE 上面完成以下的程式碼。

#include <CurieBLE.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

#define SERVOMIN  150 
#define SERVOMAX  600 

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

BLEService BLE_serv("19B10010-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedIntCharacteristic BLE_char("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);

void setup() 
{
    Serial.begin(9600);
    pwm.begin();
    pwm.setPWMFreq(60);

    BLE.begin();
    BLE.setLocalName("mearm");
    BLE.setAdvertisedService(BLE_serv);
    BLE_serv.addCharacteristic(BLE_char);
    BLE.addService(BLE_serv);
    BLE_char.setValue(0);
    BLE.advertise();

    Serial.println("Waiting for connections...");
}

void loop() {
    BLEDevice central = BLE.central();
    if(central)
    {
        Serial.print("Connected to central");
        Serial.println(central.address());
        while(central.connected())
            if(BLE_char.written())
            {
                int servo_num = BLE_char.value();
                int pulse_len = BLE_char.value();
                pwm.setPWM(servo_num, 0, pulse_len);
            }
        Serial.println("disconnected");
    }
}

程式說明:

以上的程式碼主要會引入兩個函式庫,一個是用來控制馬達的<Adafruit_PWMServoDriver.h>,另一個則是待會要用來跟手機溝通的<CurieBLE.h>,接下來的程式碼就是初始化一個BLE的Service,然後裡面

包一個Characteristic,主要負責來接收手機端傳送過命令。來馬達編號,還有指定的馬達PWM訊號,藉此來操控我們的機械手臂。

在while(central.connected())迴圈當中,101會一直去確認是否有新的訊息送過來,如果有收到訊息,就會把收到的來馬達編號,還有指定的馬達PWM訊號,透過pwm.setPWM(servo_num, 0, pulse_len);來控制指定的伺服馬達,藉此來操控我們的機械手臂。

 

5.App Inventor 程式設計

App Inventor是一款圖形化的Android App設計界面,只要您有google帳號,就可以直接線上編輯,雲端儲存,還可以打包下載成APK檔,然後傳到手機裡安裝,如果想要知道App Inventor的教學與應用,可以參考App Inventor中文學習網

接下來我們就要實際動手來寫我們的應用程式了,請先連到MIT App Inventor官網

接下來請新建一個專案,並進到Designer界面,開始進行我們的手機界面佈置。

因為本次專案會用到BLE的元件,所以我們必須用到App Inventor的擴充元件功能,請複製以下的網址http://iot.appinventor.mit.edu/assets/edu.mit.appinventor.ble.aix

並在extension中把BLE元件import進來,如下圖。

接下來請完成以下的元件佈置,其中Slider的最大數值是600,最小數值是150,跟前面Arduino 程式碼裡面定義的一樣,另外Connect按鈕其實是一個清單(而非一般的按鈕元件),按下去之後可以讓使用者去選取要連哪一個藍牙裝置,最下方有一個scan的按鈕,可以用來掃描新的藍牙裝置,掃描附近的裝置後,app就會自動更新清單中可以連線的裝置列表。

 

接下來我們進到Blocks界面,開始設計我們的後台程式。

首先是初始化以及連線清單的設定,在初始化的過程就會先進行一次掃描的動作,並把掃描的結果更新在清單上,此外,當清單被點選之後,程式就會呼叫BLE元件去連線清單內的指定的裝置。

讀者可能會好奇,其中有一個叫做is_connected的函式,這個自定義的元件是有什麼功能呢?其實它就是會根據是否連接到裝置來做一些按鈕跟拉桿的設定,以及此刻狀態的提示,如下圖。

以下則是基本的連線、斷線功能,以及掃描附近裝置與更新的實作。

接下來的這四個Blocks,讀者可以直接從字面上的意思去解讀他的功能,也就是當編號1到4的拉桿被拖動時,就會執行update_and_send的函式,也就是更新拉桿上面馬達狀態的提示以及送出指定的馬達脈波長度。

update_and_send的實作如下,基本上就是會根據拉桿的位置對應到的數值,送出指定的控制指令,這邊值得注意的是要記得把serviceUuid跟characteriscUuid改成跟前面Arduino程式碼裡面指定的一模一樣喔,不然BLE會無法進行資料的溝通。

到此為止已經大功告成囉,接下來就剩下把App下載到手機上就完成了,您可以點選Build -> App(provide QR code for apk,讓App Inventor把編譯好的程式碼暫時存到雲端,並顯示QRcode,讓您可以掃描它來安裝App。

 

注意:

由於BLE元件是App Inventor相當新的功能,所以對於一些手機較舊的讀者可能會發現無法安裝或者是無法使用的問題,這只能換更新版本的Android系統或者是看看App Inventor官方未來是否會有相關的計畫來支援舊版本的手機。

 

相關文章:

[101專題計畫分享] Arduino101(Genuino 101)&App Inventor – RGB LED控制

本文延伸自 App Inventor 中文學習網的[取得像素顏色]範例,將觸碰點的RGB值經由藍牙丟給Arduino 101 去點亮 RGB 燈,您可以擴充多顆RGB LED或其他彩色模組來達到更有趣的效果,可以說是極簡易版的 Philip HUE 照明系統喔!

本範例使用 Arduino 101,如果您是使用HC05 06 這類型的藍牙模組,則需使用 App Inventor 的 BluetoothClient元件,兩者不可混用。

程式碼請由此下載

 

作者/攝影  曾吉弘
時間  3~4小時
成本
  • Arduino 101 $1575 (購買連結)
  • RGB LED模組(本範例使用共陰) $30~50
  • 跳線  (一綑單芯線,$100左右,也可以買公公/公母杜邦線)
  • 400孔麵包板 ($80~100)
難度  * * * * *
材料表
  • 個人電腦 (作業系統可用 Windows, Mac OSX 與 Linux,本範例使用 Windows 7)
  • Arduino 101開發板
  • RGB LED模組(本範例使用共陰)

本文將介紹如何取得觸碰點的 RGB 參數之後透過 BLE 送給 Arduino 101 來點亮 RGB LED。

先來看影片吧

App Inventor

Designer

  • 使用 Canvas 來取得觸碰點座標。
  • 兩個連線斷線用的按鈕:Btn_Connect /  Btn_DisConnect
  • 三個用來呈現RGB值的 Slider (無法拖動)
  • BletoothLE:處理BLE通訊
  • Clock:定期要求 BluetoothLE 將資料(RGB參數)發送給 Arduino 101

Blocks

1.初始化

宣告相關變數,其中addr 代表您所要連線之Arduino 101 藍牙位址,印在板子背面。程式初始化時,要求BluetoothLE元件開始掃瞄。

2.連線與斷線

按下連線按鈕,BluetoothLE元件對指定位址裝置(Arduino 101)連線,並設定相關畫面元件是否可操作,並顯示”Connected”於螢幕狀態列。

斷線則剛好相反,斷開與Arduino 101之BLE連線之後將相關畫面元件恢復原狀,這樣才能重新操作。

 

3.滑動手指取得觸碰點RGB參數

使用 Ball.Dragged 事件,當拖動這個小球(代表您手指的位置)時,會執行以下動作:

  1. 清除畫面
  2. 將該觸碰點的GetPixelColor結果顯示在Canvas上,會是一個相當大的負整數後續使用select list item 去解出來之後就會是 0~255 的整數了。
  3. Ball 移動到觸碰點位置
  4. 使用select list item 搭配 split 指令去分別取得該點的紅色、綠色與藍色值,顯示於Label上即可。

接著在 Ball.Dragged 事件的下半,分別更新每一個 Slider 的指針位置(ThumbPosition)以及更新 r g b 三個變數的內容為該觸碰點的 r g b 顏色強度,準備要發送出去囉!
如果您覺得這裡的程式碼相當冗長的話,可以用一個副程式包起來讓主程式流程更簡潔易讀。

4.發送訊號

使用 Clock 元件每1秒鐘觸發一次 Clock.Timer事件,其中會使用 BluetoothLE.WriteIntValue 將 r g b 值的組合結果發送出去,例如 (128, 34, 255) 的組合結果就是 128034255,Arduino 收到之後再拆解即可。
Clock.Timer 事件的1秒鐘您可以自行修改為較小的數字,看看是否有比較好的操作體驗。

 

Arduino 101 code

重點在於 line 53~67 之間的if (LEDStatus.written())判斷式中,使用 incom = LEDStatus.value(); 來取得 App Inventor 送過來的整數值,並以 1000 為單位來拆開並顯示於 Serial Monitor,最後使用 analogWrite 指令去控制對應的 RGB LED 腳位就完成囉!

#include <CurieBLE.h>
#include <stdlib.h>
#define LEDr 6
#define LEDg 5
#define LEDb 3

BLEPeripheral blePeripheral;  // BLE Peripheral Device (the board you're programming)
BLEService ControlLED("19B10010-E8F2-537E-4F6C-D104768A1214"); // BLE AnalogRead Service

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEUnsignedIntCharacteristic LEDStatus("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite  );

int incom = 0;
int r, g, b ;

void setup() {
  Serial.begin(9600);
  // set Light pin to output mode
  // set advertised local name and service UUID:
  blePeripheral.setLocalName("ControlLED");
  blePeripheral.setAdvertisedServiceUuid(ControlLED.uuid());

  // add service and characteristic:
  blePeripheral.addAttribute(ControlLED);
  blePeripheral.addAttribute(LEDStatus);

  // begin advertising BLE Light service:
  blePeripheral.begin();

  Serial.println("BLE RGBLED control.");

  pinMode(LEDr, OUTPUT);
  pinMode(LEDg, OUTPUT);
  pinMode(LEDb, OUTPUT);

}

void loop() {
  // listen for BLE peripherals to connect:

  BLECentral central = blePeripheral.central();
  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());


    // while the central is still connected to peripheral:
    while (central.connected()) {
      //Serial.println(LEDStatus.written());
      if (LEDStatus.written())
      {
        incom = LEDStatus.value();//110225101
        r = incom / 1000000 ;//110
        g = (incom / 1000 - r * 1000) ; //110225-110000=225
        b = (incom - r * 1000000 - g * 1000) ; //110225101-110000000-2250000=101
        Serial.println(incom);
        Serial.println(r);
        Serial.println(g);
        Serial.println(b);
        analogWrite(LEDr, r);
        analogWrite(LEDg, g);
        analogWrite(LEDb, b);
        delay(10);
      }
    }
    digitalWrite(LEDr, LOW);
    digitalWrite(LEDg, LOW);
    digitalWrite(LEDb, LOW);
    delay(100);
  }

  // when the central disconnects, print it out:

  Serial.print(F("Disconnected from central: "));
  Serial.println(central.address());
}

 

相關文章:

Arduino 101結合 App Inventor 控制@海洋大學與台北商業大學

學期到了中段,阿吉老師在海洋大學機械系與台北商業大學數位多媒體系的相關課程也進入了應用的階段。我的概念很簡單,同樣學一種,當然是採用變化多的方案,手機(App Inventor)搭配各種硬體平台都有很棒的應用,不管是作為控制器(手機根據某些條件觸發與否來通知開發板)或是顯示器(手機顯示開發板感測器狀態) 都可以喔!

本系列課程的 Arduino 101 開發板感謝台灣 Intel 公司贊助

14938270_1187934111277461_6879868924925435470_n

1478146067382

14900477_1187934257944113_3656068376457863047_n

 








 

160625 Arduino 101 / App Inventor 工作坊@Maker Faire Singapore (Intel Taiwan贊助)

今年是CAVEDU第一次參加新加坡 Maker Faire,認識很多新朋友也看到不同國家在 maker 這方面的差異以及文化的衝擊,也深刻感受到新加坡政府對於創新、教育真的是彈性高速度快。不敢說決策上樣樣都對,但是如果能修正得快一點的話,相信會有一番積極作為的氣象

與台灣的狀況相同,新加坡的小朋友玩過 Scratch 的比例相當多,但聽過 App Inventor 的就明顯少很多。我們很自不量力地申請了 workshop,希望能和更多國外朋友分享如何使用 App Inventor 來控制開發板做到各種簡易互動。(事實上是發現自己的英語口語退步好多啊…)

感謝 Intel Taiwan 支援本次活動用的所有 Arduino  101 開發板

IMG_5392 - 複製

活動內容首先介紹 App Inventor 的開發環境、簡易範例。由於 workshop 只有 1.5 小時,因此 Arduino 101 的程式是事先上傳好。學員做完手機程式之後就可以直接連線。透過 app 畫面上的按鈕來控制 LED 亮滅(老梗但是經典範例),也示範如何把按鈕改成 Google 語音辨識。

我們已經寫好教學了,想要進一步認識的朋友請點我本日投影片放在文章最後

IMG_5381

IMG_5374




[App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 5 – 讀取DHT22 溫溼度模組資料

App Inventor BLE 元件教學文第五發!本專題要告訴您如何讀取DHT22 溫溼度模組資料的狀態。BLE 與樂高EV3機器人控制元件已經正式發布,請多多使用吧!實際app執行畫面如下圖,先來看執行畫面吧:

[youtube=”https://youtu.be/rs5_5-LH2JA”]

Arduino 101 是 Arduino.cc (注意不是 .org) 與 Intel 合作的最新開發板,在美國以外的區域稱為 Genuino 101

延伸閱讀:

[Make雜誌國際中文版]Arduino 101 介紹

Arduino.cc 論壇的 callbackLED 教學(手機端並非使用 App Inventor )

Arduino 101 購買連結

Arduino 101 開箱文

Arduino 101 BLE 第一課 LED閃爍

Arduino 101 BLE 第二課 LED呼吸燈(PWM)

Arduino 101 BLE 第三課 讀取類比腳位A0

Arduino 101 BLE 第四課 控制機器手臂

Continue reading

[App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 3 – 讀取Arduino 101類比腳位狀態

App Inventor BLE 元件搭配 Arduino 101 的教學文來了,本系列專文是介紹如何使用 App Inventor 的 BLE (Bluetooth Low Energy) 元件搭配 Arduino 101 開發板的各種互動專題。請用 http://ble-test.appinventor.mit.edu 這個測試用伺服器來測試,實際app執行畫面如下圖,先來看執行畫面吧:

[youtube=”https://youtu.be/uuapPq8GZYQ”]

Arduino 101 是 Arduino.cc (注意不是 .org) 與 Intel 合作的最新開發板,在美國以外的區域稱為 Genuino 101

延伸閱讀:

[Make雜誌國際中文版]Arduino 101 介紹

Arduino.cc 論壇的 callbackLED 教學(手機端並非使用 App Inventor )

Arduino 101 購買連結

Arduino 101 開箱文

Arduino 101 BLE 第一課 LED閃爍

Arduino 101 BLE 第二課 LED呼吸燈(PWM)

Arduino 101 BLE 第四課 控制機器手臂

 

Continue reading

[App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 4 – 機器手臂

本篇文章示範如何使用 App Inventor 之 BLE (Bluetooth Low Energy) 元件控制 Arduino 101 機器手臂 (架構比照 mearm,為四個自由度之桌上型機器手臂)。請注意,BLE元件尚未正式發布,請用 http://ble-test.apinventor.mit.edu 這個測試用伺服器來測試。

13161730_1434718456554194_3789265564649173881_o

相關文章請點我

[Make雜誌國際中文版]Arduino 101 介紹

Arduino.cc 論壇的 callbackLED 教學(手機端並非使用 App Inventor )

Arduino 101 購買連結

Arduino 101 開箱文

Arduino 101 BLE 第二課 LED呼吸燈(PWM)

Arduino 101 BLE 第三課 讀取類比腳位狀態

Arduino 101 BLE 第四課 控制機器手臂

Continue reading

[App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 2 – LED PWM呼吸燈

App Inventor BLE 元件搭配 Arduino 101 第二篇文章來囉!本系列專文是介紹如何使用 App Inventor 的 BLE (Bluetooth Low Energy) 元件搭配 Arduino 101 開發板的各種互動專題。請用 http://ble-test.appinventor.mit.edu 這個測試用伺服器來測試,實際app執行畫面如下圖,先來看執行畫面吧:

[youtube=”https://www.youtube.com/watch?v=ihMyDoxapBQ”]

 

Arduino 101 是 Arduino.cc (注意不是 .org) 與 Intel 合作的最新開發板,在美國以外的區域稱為 Genuino 101

延伸閱讀:

[Make雜誌國際中文版]Arduino 101 介紹

Arduino.cc 論壇的 callbackLED 教學(手機端並非使用 App Inventor )

Arduino 101 購買連結

Arduino 101 開箱文

Arduino 101 BLE 第一課 LED閃爍

Arduino 101 BLE 第三課 讀取類比腳位狀態

Arduino 101 BLE 第四課 控制機器手臂

Continue reading

[App Inventor 物聯網應用-藍牙4.0 BLE] Lesson 1 – LED 閃爍

話說從 MIT 回來之後一樣沒閒著,今天要介紹的是還沒正式公布的秘辛 – App Inventor 的 BLE (Bluetooth Low Energy) 元件。請用 http://ble-test.apinventor.mit.edu 這個測試用伺服器來測試,當然您得先買一片 Arduino 101才行

MIT App Inventor 之後會使用 Arduino 101 作為物聯網教學套件核心開發板,套件包還在規劃中,大家有沒有想要套件包裡面放那些東西呢?說不定可以美夢成真喔

2016-01-26-14.50.47-1024x768

 

 

Arduino 101 是 Arduino.cc (注意不是 .org) 與 Intel 合作的最新開發板,在美國以外的區域稱為 Genuino 101

延伸閱讀:

[Make雜誌國際中文版]Arduino 101 介紹

Arduino.cc 論壇的 callbackLED 教學(手機端並非使用 App Inventor )

Arduino 101 購買連結

Arduino 101 開箱文

Arduino 101 BLE 第二課 LED呼吸燈(PWM)

Arduino 101 BLE 第三課 讀取類比腳位狀態

Arduino 101 BLE 第四課 控制機器手臂

Continue reading