Communication
For the communication, we need a bus that puzzles can connect to and be removed from.
RS485 is a robust technology for this.
There are a lot of protocols for RS485Address, strongly focused on factories. ModBUS is one of the most well-known. It is however limited to what can be communicated. We will therefor write a small protocol ourselves.

The controller has to be able to:
- address individual puzzles
- send commands
- send data (solutions for the puzzle)
- receive updates on the status
This results in this protocol.
  graph LR
    A0[Address]---C0[Command]---D0[Data]---R0[Response]
s
Bits will be sent Most-Significant-Bit first (also known als Little Endian).
The address is a block of 8 bits. This allows for addressing 256 individual puzzles. The following addresses have been assigned:
| Address | Description | 
|---|---|
| 0x00 | Controller | 
| 0x01 | Master mind | 
| 0x02 | Digital safe | 
| 0x03 | Simon says | 
| …. | …. | 
| 0xFF | Broadcast | 
The command is a block of 8 bits. This allows for addressing 256 individual commands. The following command are defined:
| Command | Data | Response | Description | 
|---|---|---|---|
| 0x00 | null | <ACK> | Ident | 
| 0x01 | null | <status> | Get status | 
| 0x02 | null | <ACK> | Set active | 
| 0x03 | null | <ACK> | Set inactive | 
| 0x10 | <data> | <ACK> | Set solution | 
| 0xFF | null | <ACK> | Reset | 
The data is a blob of 32 bits, depending on the command being send.
If no data has to be send, it will be all zeros (0x00, 0x00, 0x00, 0x00).
| Response | Response | Description | 
|---|---|---|
| 0x00 | <ACK> | Message acknowledged, no further action | 
| 0x01 | <NACK> | Message received, but not acknowledged | 
| 0x02 | Solved | Status: puzzle solved | 
| 0x03 | Not solved | Status: puzzle solved | 
The communication will be encrypted, since people should not be able to fake signals and get to the treasure that way. AES-128 is a standard algorythm that can be implemented in a very light way on the microcontrollers. It will contain mechanisms to prevent sniffing, replay attacks and command injection.
 Erwin Kooi
                Erwin Kooi