Advanced Topics Ahead!

The document below provides developers a picture of internal system implementation details. For most third-party software developers, in-depth knowledge of each component is not necessary.

Very few developers will interact with every component of the system. As such, an understanding of every tool listed below is not required.

Summary of our developer tools

The table below shows a rough overview of the developer tools used when working on various aspects of the FarmBot software system. Realistically, no one would need to know all of these tools; the actual tool set required will vary based on the task you want to perform.

Firmware Arduino microcontroller written in C++
FarmBot OS Elixir
Rest API Ruby on Rails
Web App ReactJS, Typescript, and WebPack

Which technologies must I learn to program a FarmBot?

For users who only need to control a FarmBot, any language that provides the following will suffice:

If you wish to write a Farmware, Python is the only language currently supported, but most developers do not need to write a Farmware.

The document that follows is not a list of required skills. It would be unrealistic for a new developer to learn all of these skills. Instead, it is an inventory of all languages and tools used by the project. The tools that a developer will need to know will vary depending on the task at hand.

Firmware

The Firmware runs on an Arduino microcontroller. It is written in C++.

The device firmware is often uploaded to the Arduino via FarmBot OS, but it can also be uploaded to the microcontroller via AVRDude.

FarmBot OS

FarmBot OS is written in Elixir. It uses the Nerves Framework to compile the source code into a single binary image and also handle low-level details such as cross-compilation and driver management.

It communicates with the Web App via HTTP and AMQP.

The source code for FarmBot OS is found here.

REST API

The REST API is a Ruby on Rails web server that stores data in a PostgreSQL database and uses RabbitMQ for real-time messaging. It can be configured to store image data on local disc or on Google Cloud Storage.

Aside from data storage and image manipulation, it also handles email delivery and user authorization.

The source code for the REST API is found here.

Web App

The user interface is written in ReactJS and Typescript. WebPack is used for compilation and asset management.

The Web App is found in the same repository as the REST API.