CyborgCore

✓ Programs with a free Arduino plugin

Build your ownBluetoothgadget.

A production-ready board for testing and building a stand-alone device. Use it for any commercial project you can dream up that needs Bluetooth, a motion sensor and a battery.

The nRF52810 is programmed with our free CyborgCore plugin for Arduino. Write normal Arduino code. Your phone talks to it.

Start building Buy now
The CyborgCore board shown from several angles

Make Real Products

The board is small and runs on a coin battery, so it fits where other gadgets cannot.

Running foot podClip it to a shoelace. Count steps and send them to a watch.
Watch bandHide it in a band. Notice taps and arm swings.
Smart boxRide inside a package. Find out if it got dropped.
Game controllerTilt it to move a paddle or a ball on a screen.
Swing sensorFix it to a racket or bat. Compare your swings.
Mailbox alertTell your phone when the lid moves.

These are drawings to spark ideas. Each one needs your own code and a case that holds the board and battery.

Free Arduino plugin. No extra software to buy.

See how to add the plugin

Power in the palm of your hand

The whole board is about 27 mm wide and 27 mm tall. That is a little over 1 inch on each side, and a bit wider than a US quarter.

It has a Bluetooth chip and a motion sensor on it, and it runs from a coin battery. All of that fits in a space this small, so it can ride inside a shoe, a helmet, a tool or a small box.

Size is an estimate. We worked it out from the USB-C socket, which is about 9 mm wide on every USB-C part. It could be off by a couple of millimeters.

27 mm27 mm

What is in the box

Tap each thing when you find it. Make sure you have all four.

Buy now

Everything in the kit: the CyborgCore board, the coin battery, the USB-C cable and the ST-Link V2 programmer

You also need

  • A Mac or a Windows computer
  • The free Arduino IDE app (Step 1 shows you where to get it)
  • The free CyborgCore plugin for Arduino (Steps 2 and 3 add it)
  • A phone with the free LightBlue app, so you can see your gadget

Meet the two chips

Your board has two small chips. One is the brain and talks Bluetooth. The other feels motion. Here are the facts, in plain words.

Find them on your board

  1. 1
    nRF52810The Bluetooth chip. It is the brain. It runs your code and talks to your phone.
  2. 2
    BMI270The motion sensor, also called an IMU. It feels tilt and shaking.
  3. 3
    USB-C socketThe kit cable plugs in here. It carries programming wires, not USB. Never plug it into a charger or computer.

nRF52810The brain and the Bluetooth radio, made by Nordic Semiconductor

BrainArm Cortex-M4, running at 64 MHz. That is 64 million ticks every second.
Memory192 KB for your program (flash) and 24 KB for working space (RAM)
RadioBluetooth 5 Low Energy at 2.4 GHz. Speeds of 1 and 2 Mbps.
ReachSends at −20 to +4 dBm. Hears signals down to −96 dBm.
PowerRuns on 1.7 to 3.6 volts. A coin battery fits right in that range.
SleepUses as little as 0.3 millionths of an amp when switched off, and 1.5 millionths of an amp while sleeping with a timer
PinsUp to 32 pins you can use, depending on the chip’s package. Your board shows only some of them.
ExtrasI2C, SPI and UART (ways to talk to other parts), a 12-bit ADC (reads voltages), PWM, timers, and hardware encryption (AES)
ProgrammingFree CyborgCore plugin for Arduino. Write normal Arduino code and upload it with the ST-Link.
Cannot doNo USB and no Wi-Fi. That is why you load code with the ST-Link.

Numbers come from the chip maker’s datasheet. Read the full Nordic page.

BMI270The motion sensor, made by Bosch

What it feelsTwo sensors in one: an accelerometer (pushes and gravity, 3 directions) and a gyroscope (spinning, 3 directions)
Detail16-bit readings. That means 65,536 steps from smallest to biggest.
AccelerometerYou choose a range: ±2 g, ±4 g, ±8 g or ±16 g. (1 g is the pull of Earth’s gravity.)
GyroscopeYou choose a range from ±125 to ±2000 degrees per second
PowerAbout 0.21 milliamps with just the accelerometer on. About 0.69 milliamps with both on (typical, normal mode).
Talks byI2C on this board (it can also use SPI)
Size2.5 × 3.0 mm and under 1 mm thick. Smaller than a pencil eraser.
Built-in tricksThe chip can notice walking and running, count steps, spot shakes and taps of the wrist, and wake up when it moves
Start-up fileIt needs an 8 KB file from Bosch loaded every time it powers on. Our motion sensor examples do this for you.

Our examples read the accelerometer only. The gyroscope and the built-in tricks are not turned on yet. The Step counter example counts steps with its own simple code, not the sensor’s built-in step counter, which is made for wrists. Read the Bosch datasheet.

How much room do your programs get?

The Bluetooth software uses part of the chip. After that, your program can be up to about 92 KB (94,208 bytes) and can use about 14 KB of working memory. That is plenty for Bluetooth and sensor projects. It is not much for big images or music.

What could you build?

Some ideas. “Ready now” means an example in this kit already does it. “Needs your code” means you would write it.

Bluetooth name tag

Your board shows up on every phone nearby with any name you pick.

Ready now: Example 1

Learn how Bluetooth works

Use LightBlue to see services and live numbers as they change.

Ready now: Example 2

Gravity and tilt lab

Watch the sensor numbers on your phone while you tilt the board. Gravity shows up as the number 100. Great for a science fair.

Ready now: Example 5

Running foot pod

Clip it to a shoe and send steps per minute to your phone. Example 2 counts steps and sends them in the standard foot pod message.

Ready now: Example 2

Foot-controlled game

Stomp, tap or tilt to control a game on a phone or computer.

Needs your code

Bump or drop alarm

Send a Bluetooth message when the board falls or gets hit.

Needs your code

Choose your CyborgCore

One kit to learn and build. A pack of three boards when you are ready to make more.

Where should we ship?

We only ship to the USA and Canada right now. Sales tax is added at checkout.

Everything in the kit: the CyborgCore board, the coin battery, the USB-C cable and the ST-Link V2 programmer

Starter kit

$45.00 USD plus shipping and tax

  • 1 CyborgCore board (nRF52810 and BMI270)
  • Coin battery
  • USB-C cable with loose wires
  • ST-Link V2 programmer
  • Free CyborgCore plugin for Arduino
Buy now

Online checkout for the kit is not open yet. Email cyborgsyndicatellc@gmail.com to order.

Three CyborgCore boards in a row, each tilted at an angle

3-board pack

$84.00 USD plus shipping and tax

That is $28.00 a board.

  • 3 CyborgCore boards, each with the nRF52810 and BMI270
  • Program every one with the free CyborgCore plugin for Arduino
  • Need a programmer? The starter kit has an ST-Link V2 and cable.
Buy now

Online checkout for the pack is not open yet. Email cyborgsyndicatellc@gmail.com to order.

Add the free plugin and start coding in 8 steps

The plugin is free and installs from inside Arduino. Go in order. Take your time. Press “I did this” when a step is finished.

  1. Get the Arduino app

    Arduino is the program where you write code. It is free.

    1. Go to arduino.cc/en/software.
    2. Download Arduino IDE 2 for your computer and install it.
    3. Open it.
  2. Tell Arduino where to find the free plugin

    Copy this web address. It tells Arduino where to download our free CyborgCore plugin.

    Board address
    https://cyborgsyndicate.com/cyborgcore/package_cyborgcore_index.json
    1. Open the settings. On a Mac, click Arduino IDE then Settings. On Windows, click File then Preferences.
    2. Find the box called Additional boards manager URLs.
    3. Paste the address. If the box already has something in it, click the little window icon next to it and paste ours on a new line.
    4. Click OK.
  3. Install the free CyborgCore plugin

    1. Click Tools, then Board, then Boards Manager. (You can also click the board icon on the left side.)
    2. Type CyborgCore in the search box.
    3. Click Install.
    4. Wait. It downloads a lot of files (about 250 MB), so it can take several minutes. That is normal.
  4. Connect the wires

    Do this with nothing plugged into your computer yet.

    • The USB-C cable with loose wiresUSB-C cable
    • The ST-Link V2 programmerST-Link V2
    • The CR2032 coin batteryCoin battery
    1. Push the USB-C plug on your cable into the USB-C socket on the board.
    2. Connect the four loose wires to the ST-Link, using the table. Each color goes to one pin. The pin names are printed on the ST-Link.
    3. Put the coin battery in the battery holder on the board. Press it down until it sits flat. Use a CR2032 only.
    4. Plug the ST-Link into your computer.
    The back of the CyborgCore board
    The battery holder may need a little help

    The metal prongs on the lid of the battery holder must press firmly on the battery. If it is loose, the board can work with the programmer plugged in, then go dark when you unplug it.

    • Push the battery down so it sits flat.
    • If the board still does not show up, take the battery out first. Then use a wooden or plastic stick to gently press the two metal prongs on the lid down a little, as in the close-up picture below.
    • Put the battery back in. The prongs should press on the battery with no gap.
    • Wipe the battery and the prongs with a dry cloth.
    Close-up of the two metal prongs on the battery holder lid being pressed down
    Close-up: gently press the two metal prongs down so they touch the battery.
    Wire colorGoes to this ST-Link pin
    Red5V
    BlackGND
    GreenSWDIO
    WhiteSWCLK
    ST-Link V2 5VGNDSWDIOSWCLK USB-C plug CyborgCore + battery
    The four wires connected to the pins on the ST-Link
    The wires connected to the ST-Link.
    The board with the USB-C cable plugged in, connected to the ST-Link
    The board, the cable and the ST-Link all connected.
    Check your wiresWire colors can be different on some cables. If yours do not match the table, stop and email us before you connect anything.

    Why does the cable carry wires, not USB?

    The board has no USB brain. It uses the two data wires in the USB-C plug to carry the programming signals (SWDIO and SWCLK) instead. Red brings 5 volts from the ST-Link. The board turns that into 3.3 volts for the chips.

    If you see the message “Target voltage may be too low” later, you can ignore it. It does not mean anything is broken.

    Read this first

    The USB-C plug on this board is not a normal USB port. It carries the programming wires instead.

    Never plug the board into a phone charger, a computer, or a power bank. Only use the cable from your kit, and only connect it the way this step shows.

  5. Pick the plugin’s board settings

    In Arduino, click the Tools menu. Choose these three:

    MenuChoose
    BoardCyborgCore nRF52810
    SoftdeviceS112
    ProgrammerST-Link V2

    Do not choose a port. This board does not use one.

  6. Put the Bluetooth brain on the chip (once)

    The chip needs a small helper program called the SoftDevice. It does the Bluetooth work. You only do this one time for each board.

    1. Click Tools, then Burn Bootloader.
    2. Wait until the black box at the bottom says it is finished.

    The name sounds scary, but it is safe. Nothing burns.

    Windows: if you see an error here If the black box says LIBUSB_ERROR_NOT_SUPPORTED or open failed, Windows gave the ST-Link the wrong driver. You fix it once:
    1. Download Zadig (free) from zadig.akeo.ie and open it.
    2. Plug in the ST-Link. In Zadig click Options, then List All Devices.
    3. Pick the ST-Link in the list. Its ID is 0483 3748.
    4. Choose WinUSB as the driver and click Replace Driver.
    5. Unplug the ST-Link, plug it in again, and click Burn Bootloader once more.
    If something still does not work, please email us. We will help.

    What is a SoftDevice?

    It is a ready-made Bluetooth program from Nordic. It sits at the start of the chip’s memory and handles the hard radio work. Your sketch goes after it and asks it to do things, like “start advertising.”

  7. Send your first code

    1. Open the Hello example in the Code section below. Click Copy.
    2. In Arduino, click File then New Sketch. Select everything in the window and paste over it.
    3. Click Sketch, then Upload Using Programmer.
    4. Wait for the message “Done uploading”.
    Use “Upload Using Programmer”The round arrow button on the top bar will not work with this board. Always use the Sketch menu.
  8. See it on your phone

    1. Install LightBlue on your phone. It is free.
    2. Turn on Bluetooth and open LightBlue.
    3. Look for a device named CyborgCore in the list.
    4. Tap it. You are connected to your own gadget!

    You made a Bluetooth device. Now try the other examples.

Code you can run

Every sketch here runs on the free CyborgCore Arduino plugin. Copy a sketch, paste it into a new Arduino sketch, then use Sketch → Upload Using Programmer.

Hello: show up on a phone

Your board sends out a Bluetooth signal that says “I am CyborgCore.” Open LightBlue and look for it.

Want a different name? Change it in two places: the letters near the top, and the name inside quotes in setup. Keep the new name exactly 10 letters long, like CyborgCore, or the sketch will need other changes too.

Good to know

This is called advertising. The board shouts its name about 10 times a second so phones can find it. It does this while it waits for someone to connect.

hello.ino
#include <Arduino.h>
extern "C" {
#include "nrf_sdm.h"
#include "nrf_soc.h"
#include "ble.h"
#include "ble_gap.h"
#include "ble_gatts.h"
}

#define LED_PIN 6   // blinks fast if something goes wrong
#define APP_RAM 0x20002800UL                 // must match the linker script RAM start

static uint8_t  adv_handle  = BLE_GAP_ADV_SET_HANDLE_NOT_SET;
static uint16_t conn_handle = BLE_CONN_HANDLE_INVALID;
static uint8_t  adv_buf[]  = {0x02, 0x01, 0x06, 0x0B, 0x09, 'C','y','b','o','r','g','C','o','r','e'};
static ble_gap_adv_data_t adv_data;
static uint8_t  evt_buf[128] __attribute__((aligned(4)));

static void spin(volatile uint32_t n) { while (n--) { __asm__ volatile("nop"); } }

static void check(uint32_t stage, uint32_t err) {
  if (err != NRF_SUCCESS) {
    bool led = false;
    for (;;) { led = !led; digitalWrite(LED_PIN, led); spin(40000); }
  }
}

extern "C" void sd_fault(uint32_t id, uint32_t pc, uint32_t info) {
  for (;;) {}
}

static void start_adv() {
  check(6, sd_ble_gap_adv_start(adv_handle, BLE_CONN_CFG_TAG_DEFAULT));
}

static void handle_evt(ble_evt_t *ev) {
  switch (ev->header.evt_id) {
    case BLE_GAP_EVT_CONNECTED:
      conn_handle = ev->evt.gap_evt.conn_handle;
      break;
    case BLE_GAP_EVT_DISCONNECTED:
      conn_handle = BLE_CONN_HANDLE_INVALID;
      start_adv();
      break;
    case BLE_GAP_EVT_PHY_UPDATE_REQUEST: {
      ble_gap_phys_t ph;
      ph.tx_phys = BLE_GAP_PHY_AUTO;
      ph.rx_phys = BLE_GAP_PHY_AUTO;
      sd_ble_gap_phy_update(ev->evt.gap_evt.conn_handle, &ph);
      break;
    }
    case BLE_GAP_EVT_SEC_PARAMS_REQUEST:
      sd_ble_gap_sec_params_reply(ev->evt.gap_evt.conn_handle,
                                  BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL);
      break;
    case BLE_GATTS_EVT_EXCHANGE_MTU_REQUEST:
      sd_ble_gatts_exchange_mtu_reply(ev->evt.gatts_evt.conn_handle, BLE_GATT_ATT_MTU_DEFAULT);
      break;
    case BLE_GATTS_EVT_SYS_ATTR_MISSING:
      sd_ble_gatts_sys_attr_set(ev->evt.gatts_evt.conn_handle, NULL, 0, 0);
      break;
    default:
      break;
  }
}

void setup() {
  pinMode(LED_PIN, OUTPUT);

  nrf_clock_lf_cfg_t lf;
  memset(&lf, 0, sizeof(lf));
  lf.source   = NRF_CLOCK_LF_SRC_XTAL;
  lf.accuracy = NRF_CLOCK_LF_ACCURACY_50_PPM;
  check(1, sd_softdevice_enable(&lf, sd_fault));

  uint32_t ram = APP_RAM;
  uint32_t e = sd_ble_enable(&ram);
  check(2, e);

  ble_gap_conn_sec_mode_t sec;
  BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec);
  check(3, sd_ble_gap_device_name_set(&sec, (const uint8_t *)"CyborgCore", 10));

  memset(&adv_data, 0, sizeof(adv_data));
  adv_data.adv_data.p_data      = adv_buf;
  adv_data.adv_data.len         = sizeof(adv_buf);

  ble_gap_adv_params_t p;
  memset(&p, 0, sizeof(p));
  p.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED;
  p.filter_policy   = BLE_GAP_ADV_FP_ANY;
  p.interval        = 160;                   // 100 ms
  p.duration        = 0;                     // advertise forever
  p.primary_phy     = BLE_GAP_PHY_1MBPS;
  check(5, sd_ble_gap_adv_set_configure(&adv_handle, &adv_data, &p));
  start_adv();
}

void loop() {
  uint16_t len = sizeof(evt_buf);
  uint32_t e = sd_ble_evt_get(evt_buf, &len);
  if (e == NRF_SUCCESS) {
    handle_evt((ble_evt_t *)evt_buf);
  }
  uint32_t soc;
  while (sd_evt_get(&soc) == NRF_SUCCESS) {}
}

Stuck? Try these

Arduino cannot find the CyborgCore plugin in Boards Manager

Check that you pasted the whole address in Step 2, then click OK and look again. Make sure your internet works. Close and reopen Arduino.

The board works with the ST-Link, but disappears when I unplug it

The battery is probably not touching the holder well enough. Use a CR2032 battery. Press it down firmly. If that does not help, gently bend the top metal clip down a little so it presses harder, and wipe the battery and the clip with a dry cloth. Then scan again after 5 seconds.

Do not use a rechargeable LIR2032 battery. It is too strong and can harm the board.

The upload fails or says it cannot connect
  • Check that all four wires are firmly on the right pins.
  • Check that the battery is in.
  • Unplug the ST-Link and plug it in again. Try another USB port.
  • Check the three menu choices in Step 5.
  • Use Sketch → Upload Using Programmer, not the round arrow button.
It says “Target voltage may be too low”

You can ignore this message. It is normal with this kind of ST-Link. If the upload still finishes, everything is fine.

I cannot see CyborgCore in LightBlue
  • Make sure the upload said “Done uploading”.
  • Did you do Step 6 (Burn Bootloader) once? Bluetooth will not work without it.
  • Keep the battery in and the ST-Link plugged in. Hold your phone close to the board.
  • Pull down to refresh the list in LightBlue.
My Mac says a tool cannot be opened or is the wrong type

Make sure you have CyborgCore version 1.0.4 or newer. Click Tools, Board, Boards Manager, search for CyborgCore and click Update if you see that button. Then close Arduino, open it again and try again. Older versions need an extra Apple helper called Rosetta on Macs with an M1, M2, M3 or newer chip. Version 1.0.4 does not.

The ST-Link does not show up on Windows

Use the Zadig steps in Step 6: choose the ST-Link, pick the WinUSB driver and click Replace Driver. Then unplug and plug in the ST-Link. Make sure you have CyborgCore version 1.0.5 or newer; older versions cannot find the file to upload on Windows. If it still does not work, please email us and tell us what you see.

Something got warm, or I plugged the board into a charger

Unplug it right away. Do not plug the USB-C plug into a charger or computer again. Email us and tell us what happened.

Still stuck? Email cyborgsyndicatellc@gmail.com. Tell us which step you are on and what you see on the screen.