Git Product home page Git Product logo

ble_hci's Introduction

BLE_HCI

Allows external systems or MCUs to control BLE chip (CC2540) using Bluetooth HCI mode such as Windows/Linux/Mac, Arduino (AVR), Teensy 3.0 (ARM Cortex-M4), Respberry Pi (ARM11), etc.

This library was written for Python (Tested on Windows, Linux and Mac OSX) and Arduino platforms.

This is in beta and still a work in progress, not all HCI commands and events have been implemented or fully tested.

The HCI firmware is built from TI CC254x SDK, refer to the HostTestApp project if you want to study the firmware code.

You can use it to connect to other BLE devices such as our BLE Mini and BLE Shield. Note that, it is also possible to connect to other BLE devices but modify the source code is required.

To learn more about HCI mode, you can refer to BTool in TI CC254x SDK.

Example 1

PC/Mac as BLE central role and via the BLE link, connecting to BLE Mini running Biscuit firmware as peripheral role

Typical connections:

  1. PC <-> USB <-> BLE Mini (HCI) <----- BLE Link ------> BLE Mini (Biscuit) <-> Serial <-> Ardino
  2. Mac <-> USB <-> BLE Mini (HCI) <----- BLE Link ------> BLE Mini (Biscuit) <-> USB <-> Raspberry Pi
  3. Raspberry Pi <-> USB <-> BLE Mini (HCI) <----- BLE Link -----> BLE Mini (Biscuit) <-> Serial <-> Arduino

Requirements:

  1. A PC running Windows, Linux or a Mac running Mac OS X
  2. Raspberry Pi with Linux is also possible
  3. HCI firmware (USB) and Biscuit firmware (USB or Serial)
  4. Two BLE Mini boards, first one running the HCI firmware, another one running the Biscuit firmware
  5. Install Python 2.7.2 32-bit
  6. Install PySerial 2.5
  7. For Windows, install USB CDC driver
  8. Biscuit central Python script

How it works:
When you connect the BLE Mini (HCI) to your PC via the USB port, it will function as an USB CDC (Virtual COM Port). On Windows, it will ask for a device driver, so you need to install the USB CDC driver. It shows as a COM port (e.g. COM5). For Linux or Mac OS X, it will work as a tty device (e.g. ttyACM0 or tty.usbmodem1311).

The Biscuit central Python script controls the virtual COM port, sending BLE command over the port, and listening to the HCI events.

You need to change the following lines to match your COM port and bardrate:

if os.name == 'posix':
    TX.port = '/dev/tty.usbmodem1431'
else:
    TX.port = 'COM5'
TX.baudrate = 115200

Press 'd' to start discovery, it will show if any device is found, and then press 'e' to establish a BLE link with the device, you need then enable the notification before you can receive data from the device.

Press '1', it will send a string 'Hello World!' to the device and press '2' will send 'I love BLE!'.

You can do many other interesting things as you want with BLE.

Supported systems:

  1. Windows
  2. Linux (includes Raspberry Pi)
  3. Mac OS X

Example 2

Arduino as BLE central role and via the BLE link, connecting to BLE Mini running Biscuit firmware as peripheral role

Typical connections:

  1. Arduino (A) <-> Serial <-> BLE Mini (A) <----- BLE Link -----> BLE Mini (B) <-> Serial <-> Arduino (B)
  2. Arduino (A) <-> Serial <-> BLE Mini (A) <----- BLE Link -----> BLE Mini (C) <-> USB <-> Raspberry Pi
  • Suggest to use Arduino Leonardo or other boards with more than one serial to try this example.
  • We use the USB CDC serial for debug/UI and one for connecting to the BLE Mini on Leonardo board.
  • Uno has only one serial and we do not use SoftwareSerial because sometimes data recevied incorrectly.
    -> We used AltSoftSerial, so Uno works now, but the baudrate limited to 57600bps.
    -> http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
  • Tested with Uno (use pin 8, 9), Leonardo (use pin 0, 1), Mega 2560 (use TX1, RX1)

Requirements:

  1. BLE HCI library for Arduino
  2. Arduino (A) running HCI library
  3. AltSoftSerial (requred for Arduino Uno)
  4. BLE Mini (A) running HCI firmware (Serial)
  5. BLE Mini (B or C) running Biscuit firmware (Serial or USB)

How it works:
Similar to the Example 1, the Arduino will keep tracks of HCI events from the serial port. You can see those events and send command using the Arduino IDE's Serial Monitor.

Supported Arduino boards or compatible:

  1. Arduino UNO (R3)
  2. Arduino Leonardo (R3)
  3. Arduino Mega 2560 (R3)
  4. Seeeduino V3.0 (Atmega 328P)
  5. Teensy 3.0
    Write to us if any other boards you tested.

ble_hci's People

Contributors

cheong2k avatar alexbonhomme avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.