Genuino101CurieBLEBatteryMonitor

Bu eğitimde, Arduino veya Genuino 101'in yerleşik Bluetooth Düşük Enerji özellikleri ile yapabileceğiniz en basit şeylerden biri gösterilmektedir. Çizim standart BLE “Battery Monitor” servisini uygular. Pil Monitörü hizmeti, akıllı telefonunuzdan veya tabletinizden BLE üzerinden pil seviyesi değerlerini okur ve bunları Arduino Yazılımının Seri İzleyicisi'nde (IDE) görüntüler. Bu Curie'nin BLE kütüphanesi ve akıllı telefon veya tablet üzerinde uygun bir uygulama ile elde edilir.

Gerekli Donanım

Yazılım Gerekli

  • Android ve iOS için nRF Ana Kontrol Paneli (BLE)

Devre

Kartta yerleşik bir Bluetooth Düşük Enerji modülü vardır, bu nedenle kartı bilgisayara bağlamak ve çizim tarafından gönderilen mesajları okumak için Seri Monitörü kullanmak yeterlidir. Bir pilin şarjını simüle etmek için 3.3V, GND ve A0'a bir potansiyometre bağlanır.

Yazılım Temelleri

Kütüphaneler

CurieBLE .h , 101 kartının BLE modülünün tüm parametrelerine, özelliklerine ve işlevlerine erişim sağlayan kütüphanedir. Bluetooth Düşük Enerji ile bu standardı destekleyen akıllı telefonlara, tabletlere ve çevre birimlerine bağlanmak ve bunlarla iletişim kurmak mümkündür. Bu öğreticide, çevre birimi olarak bağlandığımız cihazın pil seviyesini okumak için kullanılır.

updateBatteryLevel () - Bu işlev, ana döngüden her 200 milisaniyede bir çağrılır. A0'a bağlı bir potansiyometre ile bir pilin okunmasını simüle eder. Değer ilk olarak okunan önceki değere göre kontrol edilir. Değiştirilirse, kod Seri Monitöründe yeni değerin yazdırılmasını etkinleştirir ve Pil özelliğini batteryLevelChar.setValue(batteryLevel); ile günceller batteryLevelChar.setValue(batteryLevel); . Bu, akıllı telefondaki "Pil Servisi" altındaki BLE Kontrol Panelinde okunur.

Kod

Bu çizim örneği, standart Bluetooth Düşük Enerjili Pil Hizmetini kısmen uygular.

pinMode(13, OUTPUT); , LED'i pinMode(13, OUTPUT); ile çalıştırmak için pimi 13 bir çıkış olarak başlatırsınız pinMode(13, OUTPUT);
blePeripheral, kartı BLEPeripheral blePeripheral; ile BLE çevre birimi olarak başlatmak için kullanılır BLEPeripheral blePeripheral;
Bu çizim örneğini çok yakın mesafede birden fazla pano çalıştıracaksa, her birinin benzersiz şekilde tanımlanabilmesi için yerel adı değiştirmeniz gerekir.
Örneğin,
blePeripheral.setLocalName(" BatteryMonitorSketch ");
olur
blePeripheral.setLocalName(" BatteryMonitorSketch1 ");
Ana döngüde, merkezi cihaza bağlantı hatla tespit edildiğinde LED'i açarsınız:
digitalWrite(13, HIGH);
Her 200 ms'de bir bağlantı test edilir ve hala etkinse updateBatteryLevel çağrılır. Bağlantı kesildiğinde, LED'i şu hatla digitalWrite(13, LOW); : digitalWrite(13, LOW); bu, pin 13'ü 3.3V'den 0V'ye geri alır ve LED'i kapatır.

/*
 * Copyright (c) 2016 Intel Corporation.  All rights reserved.
 * See the bottom of this file for the license terms.
 */


#include <CurieBLE.h>

/*
   This sketch example partially implements the standard Bluetooth Low-Energy Battery service.
   For more information: https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx
*/


/*  */
BLEPeripheral blePeripheral;       // BLE Peripheral Device (the board you're programming)
BLEService batteryService("180F"); // BLE Battery Service

// BLE Battery Level Characteristic"
BLEUnsignedCharCharacteristic batteryLevelChar("2A19",  // standard 16-bit characteristic UUID
    BLERead | BLENotify);     // remote clients will be able to
// get notifications if this characteristic changes

int oldBatteryLevel = 0;  // last battery level reading from analog input
long previousMillis = 0;  // last time the battery level was checked, in ms

void setup() {
  Serial.begin(9600);    // initialize serial communication
  pinMode(13, OUTPUT);   // initialize the LED on pin 13 to indicate when a central is connected

  /* Set a local name for the BLE device
     This name will appear in advertising packets
     and can be used by remote devices to identify this BLE device
     The name can be changed but maybe be truncated based on space left in advertisement packet */

  blePeripheral.setLocalName("BatteryMonitorSketch");
  blePeripheral.setAdvertisedServiceUuid(batteryService.uuid());  // add the service UUID
  blePeripheral.addAttribute(batteryService);   // Add the BLE Battery service
  blePeripheral.addAttribute(batteryLevelChar); // add the battery level characteristic
  batteryLevelChar.setValue(oldBatteryLevel);   // initial value for this characteristic

  /* Now activate the BLE device.  It will start continuously transmitting BLE
     advertising packets and will be visible to remote BLE central devices
     until it receives a new connection */

  blePeripheral.begin();
  Serial.println("Bluetooth device active, waiting for connections...");
}

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());
    // turn on the LED to indicate the connection:
    digitalWrite(13, HIGH);

    // check the battery level every 200ms
    // as long as the central is still connected:
    while (central.connected()) {
      long currentMillis = millis();
      // if 200ms have passed, check the battery level:
      if (currentMillis - previousMillis >= 200) {
        previousMillis = currentMillis;
        updateBatteryLevel();
      }
    }
    // when the central disconnects, turn off the LED:
    digitalWrite(13, LOW);
    Serial.print("Disconnected from central: ");
    Serial.println(central.address());
  }
}

void updateBatteryLevel() {
  /* Read the current voltage level on the A0 analog input pin.
     This is used here to simulate the charge level of a battery.
  */

  int battery = analogRead(A0);
  int batteryLevel = map(battery, 0, 1023, 0, 100);

  if (batteryLevel != oldBatteryLevel) {      // if the battery level has changed
    Serial.print("Battery Level % is now: "); // print it
    Serial.println(batteryLevel);
    batteryLevelChar.setValue(batteryLevel);  // and update the battery level characteristic
    oldBatteryLevel = batteryLevel;           // save the level for next comparison
  }
}

/*
   Copyright (c) 2016 Intel Corporation.  All rights reserved.

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with this library; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
[Kodu Al]

See Also