In this tutorial we will go through basic concepts of firmware for BigClown ecosystem. We are going to learn how to install and to work with tools which allow us to work with the firmware. With the help of practical examples we will take a look at how to make various peripherals to work together with API from BigClown SDK

Programming language

Firmware is implemented in pure C language, which is industrially accepted language for embedded and low-power devices. There are the main reasons for choosing this technology:

  • effective use of hardware resources
  • stability and long time available development environment
  • simple and understandable syntax

You can choose from wide variety of systems and tools. Windows, macOS a Ubuntu (and other Debian derivatives) are supported. For information how to install required tools, please see Toolchain setup. You can find more information on how to use them in Toolchain guide.

Introducing BigClown SDK

Basic pillar of every BigClown (software) project is an ecosystem of libraries, drivers and header files, so called SDK (which stands for https://en.wikipedia.org/wiki/Software_development_kit )

SDK can be found in this repository:

https://github.com/bigclownlabs/bc-core-module-sdk

Header files includes documentation, that can be generated by Doxygen. You can find the most recent version of generated documentation here:

http://sdk.bigclown.com

We try to stick to these principles when developing SDK:

  • consistent and clear API design

  • modular and object oriented approach

  • we prefer asynchronous, event-driven programming

  • well-named functions, data types, variables, etc.

  • simple way of access to low level hardware

SDK integration to your project

To your project, SDK is integrated as a Git Submodule. This has one advantage - your firmware can be "linked and locked" to specific version of SDK. This makes sure that it will be possible to compile your firmware at any time in the future. But if you need to, SDK can be updated to most recent version by simple git pull command.