Community /

v3.0.0 Cyton Firmware Now Available

Major Firmware Update

The next major release for the OpenBCI Cyton is now here!

We at Push The World have been working on v3.0.0 for over 11 months and are so happy to report it’s stable and working well!

Getting the New Firmware

Tutorial to update Cyton to latest firmware can be found on our learning pages here.

New Features

  • Add wifi shield support.
    • Simply add OpenBCI_Wifi_Master to your `DefaultBoard.ino` and add `wifi.loop()` to your loop function. If you want to read from it checkout the `DefaultBoard.ino` for it’s simple interface.
    • Send channel gains to wifi shield at start of stream
    • Takes ~4 seconds for the wifi shield to be reachable
  • Add ability to turn external serial port `Serial1` on through commands. Not for use with EEG recording, used for DEBUG. If you want to use external serial port, please use opto-isolators to protect from electric shock.
  • Change board types on the fly! No longer do you have to upload new code to the Cyton’s Pic32 just to do an analog read. You can now read from analog or digital pins with the press send of a code! `’/x’` now sets the board mode, where x can be one of the following:
    • BOARD_MODE_DEBUG is `1`
    • BOARD_MODE_ANALOG is `2`
    • BOARD_MODE_MARKER is `4`
    • BOARD_MODE_BLE is `5`
  • A new board mode called MARKER. In this mode, if a command in the format of “’`n’“ (where n is ASCII ‘0’:’9′) is received by the Cyton over any of the serial streams (including wifi) then a marker of int(n) is inserted in the AUX1 channel. Note that this mode is mutually exclusive to the DEFAULT (accelerometer mode) as it uses the AUX1/ACCELX channel.
  • A new board mode called BLE. In this mode, the board will switch `Serial0` to `9600` and will downsample 2 channels to 125Hz and send them 3 samples in a packet for a total of 18 data bytes. The RFduino would then take this packet and send it over BLE. Still in dev, don’t use in production systems.
  • Add loop function for internal timing operations related to power on reset for wifi shield, remove `loop` to free up pins and such and remove wifi capability.
  • Add function to turn time stamps on `useTimeStamp(true)`, time stamps are disabled by default. Note the Wifi shield will use NTP time stamps.
  • Add wifi commands:
    • OpenBCI Wifi Attach – `{`
    • OpenBCI Wifi Remove – `}`
    • OpenBCI Wifi Status – `:`
    • OpenBCI Wifi Reset – `;`
  • Variable sample rate in the format of **~(COMMAND)**. This works similar to the Channel Settings commands, however, there is no latching character. Changing the sample rate requires sending a `v` or soft-reset to ensure all systems are correct. Power cycling the OpenBCI board will cause the sample rate to reset back to default of 250Hz. **IMPORTANT!** The Cyton cannot and will not stream data over 250SPS. Plug in the wifi shield to get speeds over 250SPS streaming. You may still write to an SD card though, the firmware will not send EEG data over the Bluetooth radios. Check out the new commands:
    • 0 = 16000 Hz
    • 1 = 8000 Hz
    • 2 = 4000 Hz
    • 3 = 2000 Hz
    • 4 = 1000 Hz
    • 5 = 500 Hz
    • 6 = 250 Hz
    • ~ = Get current sample rate
    • **EXAMPLE**
      • First, user sends ~~
      • returns Sample rate is 250Hz$$$
      • Then, user sends ~5
      • returns Sample rate set to 500Hz$$$


  • hasDataSerial0 and hasDataSerial1 use new properties SerialInfo to determine if data should be received. Now safe to call every loop.

Breaking Changes

  • Removed boolean useAccel in support of new mode paradigm. To use the accel, do nothing, it’s enabled by default, to not use the accel simply call useAccel(false) and this library will automatically send the contents of auxData array each packet.
  • Removed sniffMode in place for curBoardMode == BOARD_MODE_DEBUG
  • Removed public waitForNewChannelData()
  • Removed public timeSynced and private sendTimeSyncUpPacket
  • Setting internal test signal now, when not streaming, returns a success message, with EOT `$$$`
  • Sending multi char messages now times out after a second of not completing the multichar message.

Leave a Reply