🤖
LinkIt 7697 BlocklyDuino 使用指南
  • LinkIt 7697 BlocklyDuino 使用指南
    • 認識 LinkIt 7697
    • 認識 BlocklyDuino
    • BlocklyDuino v2 & v3 比較
    • 安裝開發環境 (v2)
      • 安裝 Arduino 編輯器
      • 安裝驅動並連接開發板
      • 安裝 BlocklyDuino 編輯器
      • 連結兩個編輯器並上傳程式
    • 安裝開發環境 (v3)
    • BlocklyDuino 基礎操作
    • 實作範例教學
      • A01. 內建 LED 閃爍
      • A02. 外接 LED 閃爍
      • A03. 外接 LED 呼吸燈
      • A04. RGB LED 顏色變化
      • A05. 外部按鈕控制開關
      • A06. 蜂鳴器播放聲音
      • A07 .可變電阻控制電壓輸出
      • A08. 伺服馬達控制
      • A21. DHT: 溫濕度感應器
      • A22. HTU21D: 溫溼度感應器
      • A23. PMSX003: PM2.5 感測器
      • A24. HC-SR04P: 超音波測距
      • A25. ADXL345: 加速規(動態)
      • A26. ADXL345: 加速規(手勢)
      • A27. 1602/2004: 液晶顯示模組
      • A28. WS2812: RGB 彩色燈條
      • A29. MFRC522: RFID
      • B00. Grove 相關基礎知識
      • B01. Grove 光感應器
      • B02. Grove 超音波測距感應器
      • B03. Grove 溫溼度感應器
      • B04. Grove 繼電器
      • B05. Grove LED 燈條
      • B06. Grove OLED 顯示器
      • C01. 雲端控制 LED 開關
      • C02. 上傳溫溼度到雲端
      • D01. 手機透過 BLE 讀寫裝置資料
      • E01. 遙控器: 按鈕控制 LED
    • 資源鏈結
  • LinkIt 7697 - Arduino IDE 開發指南
    • 環境設定
      • 設定 Arduino IDE
      • 將 LinkIt 7697 連接到電腦
        • 在 Windows 上安裝 CP2102N 驅動程式
        • 在 macOS 上安裝 CP2102N 驅動程式
      • 執行第一個程式
    • 開發指南
      • GPIO
      • UART
      • ADC
      • EINT (外部中斷 / External Interrupt)
      • I2C
      • SPI
      • EEPROM
      • Timer
      • Flash (索引式儲存空間)
      • RTC (Real-Time Clock)
      • Software Serial
      • 使用 Wi-Fi 函式庫
      • 使用 MCS 函式庫
        • 連接到 MCS
        • 連接到 MCSLite
          • 建立可透過 MCS Lite 控制的 Beacon
        • MCS 函式庫 API 使用手冊
          • MCSDevice
          • MCSLiteDeviceMCSLiteDevice
          • MCSDataChannel 相關類別
      • 使用 BLE 低功耗藍牙
        • 藍牙信標
        • 主控裝置
        • 周邊裝置
        • 已知限制
        • LBLE API 指南
          • LBLE
          • LBLECentral
          • LBLEPeripheral
          • LBLEAdvertisementData
          • LBLEService
          • LBLECharacteristic
          • LBLEAddress
          • LBLEUuid
          • LBLEClient
      • 使用 LinkIt Remote
        • LRemote API
        • LRemote 控制元件 API
      • LinkIt 7697 腳位的初始狀態
      • LinkIt 7697 供電說明
      • 更新 Bootloader 與韌體
      • Flash 燒錄工具
      • FOTA 更新
      • LinkIt 7697 的功能限制
      • 自行編譯 Arduino Package
      • 回報問題
    • 週邊元件連接教學
      • SMD 按鈕
      • RGB 三色 LED
      • 可變電阻
      • 九軸感應器 (MPU-9250)
      • 溫度與濕度感應器 (AM2302)
      • 超音波距離感應器
      • 光感應器 (LM358)
      • 0.96 吋 OLED 顯示模組 (SSD1308Z)
      • 長條型 LED 顯示模組 (MY9221)
      • 繼電器
      • 伺服馬達 (EMAX 9g ES08A Servo)
      • 使用 74HC595 驅動七段顯示器
      • 使用 MAX7219 驅動七段顯示器
      • 使用 MAX7219 驅動 8x8 矩陣式顯示器
      • 使用 OLED 模組 (如 SH1106 / SSD1306... 等模組)
      • 使用 PCF8574 / PCF8574A 驅動 1602 LCD
    • 開發套件與擴充板
      • Grove Starter Kit
      • Robot Shield
        • OTTO97
    • 下載
    • 資源連結
    • BSP 版本更新資訊
  • LinkIt 7697 - Development Guide for Arduino IDE
    • Environment Setup
      • Setup Arduino IDE
      • Connecting LinkIt 7697 to Computer
        • Install CP2102N Driver on Windows
        • Install CP2102N Driver on macOS
      • Run Your First Sketch
    • Developer Guide
      • GPIO
      • UART
      • ADC
      • External Interrupt
      • I2C
      • SPI
      • EEPROM
      • Timer
      • Flash (Key-Pair Storage)
      • RTC (Real-Time Clock)
      • Software Serial
      • Using the Wi-Fi Library
      • Using MCS Library
        • Connecting to MCS
        • Connecting to MCSLite
          • Build a Beacon controlled by MCS Lite
        • MCS Library API Reference
          • MCSDevice
          • MCSLiteDevice
          • MCSDataChannel Classes
      • Using Bluetooth
        • Beacons
        • Central Devices
        • Peripheral Devices
        • Limitations of LBLE library
        • LBLE Library API Guide
          • LBLE
          • LBLECentral
          • LBLEPeripheral
          • LBLEAdvertisementData
          • LBLEService
          • LBLECharacteristic
          • LBLEAddress
          • LBLEUuid
          • LBLEClient
      • Using LinkIt Remote
        • LRemote
        • LRemote Control Classes
      • Initial Pin State of LinkIt 7697
      • Powering the LinkIt 7697
      • Update Bootloader and Firmware
      • Flash Uploading Tool
      • FOTA Update
      • Limitations of LinkIt 7697
      • Source Code of Arduino Package
      • Issue Report
    • Tutorial
      • SMD Buttons
      • RGB LED
      • Potentiometer
      • IMU 9DOF v2.0 (MPU-9250)
      • Temperature and Humidity Sensor Pro (AM2302)
      • Grove Ultrasonic Ranger
      • Light Sensor (LM358)
      • Grove OLED Display 0.96" (SSD1308Z)
      • LED Bar v2.0 (MY9221)
      • Relay
      • Mini Servo (EMAX 9g ES08A Servo)
      • Driving 7-segment Displays with 74HC595
      • Driving 7-segment Displays with MAX7219
      • Driving 8x8 Dot Matrices with MAX7219
      • Using OLED module (SH1106 / SSD1306... etc.)
      • Driving 1602 LCD with PCF8574 / PCF8574A
    • Kits and Shields
      • Grove Starter Kit
      • Robot Shield
        • OTTO97
    • Download
    • Resources
    • BSP Release Notes
Powered by GitBook
On this page
  • 範例程式
  • 進一步瞭解範例程式
  1. LinkIt 7697 - Arduino IDE 開發指南
  2. 開發指南

使用 LinkIt Remote

PreviousLBLEClientNextLRemote API

Last updated 3 years ago

LinkIt Remote 能讓開發者透過手機程式去遙控 LinkIt 7697。它主要由兩個部分構成:

  • LinkIt 7697 上面的 Arduino LRemote 程式庫,讓開發者指定手機上面的遙控器程式的介面外觀,並接收處理來自手機的遙控指令。

  • 在 iOS 與 Android 上面的 程式,它可以掃描附近有執行 LRemote 程式庫的 LinkIt 7697,並連線遙控它們。 請點擊下面的連結下載手機程式:

上述的兩個部分,中間是透過低功耗藍牙來進行資料與指令的傳輸。

範例程式

1.打開 Arduino IDE 的選單,並選擇 File > Examples > LRemote > RemoteControl,然後上傳此範例程式到 LinkIt 7697

2.打開 Arudino IDE 的 Serial Monitor。請維持 LinkIt 7697 的電源,讓他持續運作。

4.在手機上面打開 LinkIt Remote 程式。程式會開始掃描附近有運行 LRemote 程式庫的裝置。應該會在手機程式的介面上面看到一個名叫 "LinkIt 7" 或是 "LinkIt 7697" 的裝置。

為什麼名字會不一樣?

因為低功耗藍牙的裝置在廣播資訊時的長度非常有限,所以在廣播的時候,"LinkIt 7697"這樣的裝置名稱可能會被裁剪成 "LinkIt 7"。某些手機,比如 iOS,會在連線到低功耗藍牙裝置時,查詢並且暫存完整的裝置名稱,並再下一次的掃描時,自動顯示完整的裝置名稱。

5.點擊顯示的「LinkIt 7697」項目,程式會花一些時間連接到 LinkIt 7697,然後顯示如下的遙控器介面:

6.首先點擊 USR LED 這個切換按鈕。應該會看到 LinkIt 7697 板子上面的內建 USR LED 會亮起來。

7.然後,接著拖動 Value Slider 這個捲動軸。會看到 Arduino IDE 的 Serial Monitor 會印出捲動軸的目前數值。

這個範例簡單的展示了要怎麼利用 LRemote 與 LinkIt Remote 來建造可以用於 LInkIt 7697 的手機遙控程式。

進一步瞭解範例程式

在上面描述的範例程式中,我們首先建立了一個叫做 LinkIt 7697 的低功耗藍牙裝置,並且添加了數個對應到遙控器介面的 GATT 屬性。LinkIt Remote 手機程式會掃描並且解析這些 GATT 屬性,然後在手機畫面上顯示出相對應的遙控器控制元件。

使用 LRemote library 的第一步就是先設定欲建立的裝置。透過 LRemote 程式庫,可以直接指定開發者要呈現的裝置名稱、遙控器介面是橫向或是直向,以及在遙控器介面上的畫布的網格數目。

  // 設定遙控器的顯示介面
  LRemote.setName("LinkIt 7697");
  LRemote.setOrientation(RC_PORTRAIT);
  LRemote.setGrid(3, 5);

In the example above,

  • 我們把裝置取名為 LinkIt 7697

  • 並且指定了一個直向、等分為 3 x 5 的網格。這個網格並不會實際顯示出來,而是作為後續擺放遙控按鈕元件的參考座標。網格的示意圖如下:

設定好手機的方向以及網格數量之後,我們就可以開始把控制元件擺放到網格上面。比如說,如果我們要添加一個可以用來開關 USR LED 的開關按鈕,我們首先要在全域變數空間當中宣告一個 LRemoteSwitch:

#include <LRemote.h>
 
LRemoteSwitch switchButton;

and then we configure the text label, size, and position of the switch button:

然後我們接著要設定該按鈕的文字標籤、顏色、大小、以及位置:

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

在上面的範例中,

  • 我們將文字標籤設定為 "USR LED"

  • 我們將按鈕的顏色設定為 RC_BLUE

  • 位置座標設定為 (0, 1),也就是 X = 0、Y = 1,意思是要把這個按鈕擺放到第 1 欄的第 2 列,可以參考下面的圖片來瞭解座標系的編排方式:

  • 設定完成之後,我們要呼叫 LRemote.addControl(switchButton) 來將這個按鈕真正的加到控制器的介面裡面。

請注意,一定要將按鈕宣告為全域空間變數(global scope) ,並且呼叫 addControl。要不然,按鈕將會無法正確的運作。

當設定好所有的按鈕之後,我們可以呼叫 LRemote.begin() 來啟動我們的裝置,並向周圍發送廣播。

  // 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();

我們可以不斷的用 LRemote.connected() 來檢查是否已經有 LinkIt Remote 程式連接到我們的 LinkIt 7697 裝置:

  if(!LRemote.connected()) {
    Serial.println("waiting for connection");
    delay(1000);
  }

當 LinkIt Remote 連線到此裝置之後,手機程式會查詢有哪些控制元件,並且在手機畫面上面顯示出來:

接著,使用者可以透過點擊手機畫面上面的控制元件,來發送指令到 LinkIt 7697。在 LinkIt 7697 上面,我們需要不斷的在 loop() 函式當中定期呼叫 LRemote.process() ,來檢查並且處理來自手機的指令:

void loop() {

  // Process the incoming BLE write request
  // and translate them to control events
  LRemote.process();
 
  // ...
}

在存取控制元件的數值變化之前,請務必先呼叫 LRemote.process(),如此數值才會被正確的更新。

在手機傳送過來的指令都被處理完成之後, LRemote 會更新每一個控制元件的相關數值,比如說,針對開關按鈕,可以使用下列的 API:

  • LRemoteSwitch::isValueChanged() 可以得知使用者是否有撥動開關按鈕

  • LRemoteSwitch::getValue() 可以取得當前的開關狀態:

    • 0 表示「關」

    • 1 表示「開」

範例程式便是利用這兩個 API 來決定要不要打開或是關閉板子上內建的 USR LED。

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

針對捲動軸 (LRemoteSlider) ,也可以使用相同的 API,不同之處在於 getValue() 會回傳捲動軸的數字。

其他按鈕 (LRemoteButton and LRemoteCircleButton) 的 API 比較單純:

  • getValue() 回傳 0 表示按鈕沒有被按下

  • getValue() 回傳 1 表示按鈕處於被按下的狀態

另外,也可以使用 LRemoteLabel 來顯示單行文字。不過,因為使用者沒辦法跟標籤進行互動,所以這個類別不會提供 getValue() 這個 API。

開源軟體

LRemote 程式庫以及 LinkIt Remote app 使用了下列的函示庫:

3.用 iOS 或是 Android 手機,從下面的 app store 的連結下載並安裝 。

LinkIt Remote
JoystickView
Arduino Queue
virtual-joystick-android
LinkIt Remote