The BioBoard Protocol
In order for the Arduino, with all its cool sensors connected, to communicate to the outside world, there needs to be an agreement on how that data should look. Otherwise, all that great data would be lost. Hence, the BioBoard Protocol.
The best way to explain the details of the protocol is with some examples.
If we want to tell the server that the current temperature is 25.5 degrees C,
the Arduino sends the following packet:
TC is the tag for "temperature in degrees C". It is a floating point number (i.e. has a decimal point).
Besides that, the rest is really just syntactic sugar.
Here are some simple rules:
- All packets begin with @ and end with $ characters.
- Fields are separated with a : character.
- After the @ character, is a tag for the type of packet. The tags are typically in all capitals.
- If the tag indicates a type of probe or sensor, it is followed by a probe number. This is always an integer.
Here is a list of tags that we currently use:
- TC temperature in degrees C
- NIR near-infrared transmission (the range is from 0.00 to 1.00, where 1.0 is full transmission)
- PH pH (the range is from 0.0 [strongest acid] to 14.0 [strongest base])
- DO dissolved oxygen (the range is from 0.00 to 1.00)
All protocols need a way to get started. The BioBoard protocol is no different.
For starters, we first output a packet that is different than any of the other packets.
You'll notice that we also include a version number.
@PR:TC:0$ @PR:NIR:0$ @PREND$
@TC:0:25.5$ @TC:0:25.25$ @TC:0:24.75$ @TC:0:24.25$ @TC:0:23.25$
Finally, the BioBoard protocol is line-oriented, meaning that a newline or carriage return is sent after each packet. This makes it easier to view the data or to make up sample data in a simple text editor. Also, the communication speed is 19,200 baud. The Arduino, including older models, can easily handle this speed. Of course, this can be changed, but it would need to be adjusted on the receiving end as well. Remember, a protocol is an agreement between two sides of a communication link!