> For the complete documentation index, see [llms.txt](https://khalil-lab.gitbook.io/evolver/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://khalil-lab.gitbook.io/evolver/software/overview-of-software-architecture.md).

# Overview of Software Architecture

All code is located in our [Github Repositories](https://github.com/FYNCH-BIO):

1. [eVOLVER Code](/evolver/software/server-raspberry-pi.md) (Raspberry Pi, Python)
2. [Arduino/Microcontroller Code](/evolver/software/arduino.md) (C/C++)
3. [Data Processing Unit](/evolver/software/dpu.md) (Python)
4. [eVOLVER GUI](https://github.com/FYNCH-BIO/evolver-electron) (Node, JS, Electron, React)

![](/files/WlNISGuVio6szZ3gSuLq)

### **Arduino (SAMD21)**

Responsible for collecting data from sensors and actuating culture vial components. A single [SAMD21 mini-breakout board](https://www.sparkfun.com/products/13664) is typically responsible for a single culture parameter. All of the SAMD21 boards are connected in parallel to a [Serial RS-485 bus](https://www.cuidevices.com/blog/rs-485-serial-interface-explained). They listen for commands from the Raspberry Pi and communicate only when the RPi asks them specifically for information.

All code is in C/C++.

### **Raspberry Pi**

The Raspberry Pi orchestrates the control of all connected components, keeps track of calibration data for those components, and serves as the interface between the hardware and any lab computers or users wanting to interact with the eVOLVER. It can communicate via a network and also interface with low-level hardware. It communicates with the connected Arduino's via Serial RS-485, and with users via a lab computer with [websockets](https://www.wallarm.com/what/a-simple-explanation-of-what-a-websocket-is), typically over a local network (router).

The server is written in python.

### **Lab Computer**

This is where the logic for experiments happens. Users can program culture routines in python (DPU) that are carried out as commands sent to the RPi via websockets typically over a local network (router).&#x20;

Additionally, users can use the electron GUI interface to send immediate one-off commands and see the current data being collected on the eVOLVER. The GUI is also used to carry out calibrations of connected components, mapping the currents and voltages that the sensors generate to real-world representation of what they are measuring like OD or temperature.

Lastly, the GUI is also capable of customizing and managing eVOLVER culture routine experiments, and can be used to view the data from current and past experiments.

The DPU code is all in python, and the GUI is written in Javascript using [Electron](https://www.electronjs.org/) and [React](https://reactjs.org/).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://khalil-lab.gitbook.io/evolver/software/overview-of-software-architecture.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
