BeeHive-org / BeeHive

BeeHive: a flexible open hardware platform for behavioural experiments
MIT License
10 stars 6 forks source link

Communication modes ESP-host PC and communication protocols #17

Open amchagas opened 3 years ago

amchagas commented 3 years ago

We need to figure out a good way to establish communication in between BeeHive and the computer that will be used to analyse data/send commands/read data from BeeHive.

Here are three ideas on how this could be implemented also open to more suggestions:

1- All data generated by BeeHive gets stored locally in the ESP (or connected SD card system) and the data only gets transferred to a computer after the tasks/protocols/experiments are completed.

2 - Similar to Pyphotometry, the data generated during protocols get temporarily stored in ring buffers, and is transmitted at semi regular intervals, whenever one of the buffers is full. This is a more elegant solution and allows for virtually infinitely long experiments as data is transferred to a computer with very large storage. Here it would be interesting to program the ESP in a way that the computer can send commands and change the behaviour of the ESP, allowing for smart calculations to be done in real time on the computer, changing experiments on the go. In other words, this is closer to a closed loop application.

3 - We could program the ESP in a way that is basically waiting for commands from the computer which is connected to it. Once a command is received, the ESP executes said command and returns to this waiting mode. This is similar to the current flypi implementation, and also similar to the use of the FIRMATA protocol in Arduino the quesiton here would be how fast can we make this communication. Ideally we would like to get this to millisecond/submillisecond loops, so that we can still run behavioural experiments. Micropython has an imcomplete implementation of Firmata and circuit python (Adafruit's version of micropython, wih some mods) has another. In tihs case, we could even use a C++/arduino implementation of firmata, since the idea is that this stock code would be uploaded by the users once and they could forget about programming the the ESP.

communication protocols

Since the ESPs will be used either with the USB cable, or using wirelles connection, we have looked into two communicaiton protocols to start with:

1- Wireless communication with the OSC protocol, which is well established and used for audio and video applications, making it fast enough for our use cases.

2 - Serial communication via the USB cable to the host computer.