This is the default firmware for the Andino X1 board. It can count impulses from the digital inputs, display the input states, switch or pulse relays and read temperature data from DS18B20 temperature sensors. Count stops are cyclically sent to the Raspberry. The digital inputs are additionally de-bounced.

This firmware and its correct configuration is also a prerequisite for using the Andino X1 Node-Red node to integrate digital inputs, temperature data and relay control into Node-Red flows.

The Communication runs with 38400 Baud.


To install the firmware, first install and configure the Arduino IDE on your PC as described here. Afterwards, download the INO-File of the most recent version from GitHub (see download section at the bottom) and open it in the IDE. When prompted, accept to create a folder with the same name as the INO file. This Sample also needs the TimerOne, OneWire and DallasTemperature libraries. To install those, click Tools, then Manage Libraries. Here, search for TimerOne and hit install on the library with the same name. Repeat the same process for the other two libraries. After checking that the firmware compiles correctly by clicking Verify (the checkmark button) in the top bar, the firmware can be uploaded by hitting Upload (the arrow to the right).

For the hardware installation instructions of the DS18B20 sensors (if you choose to use them), please refer to this hardware installation guide.

All commands or messages are sent and received via /dev/ttyS0. Every command has to be terminated by CR or LF. Message ends with CR and LF.

Command Arguments Action Example
RESET none Restart the Controller RESET
INFO none Prints the current settings INFO
HARD 0=noShield, 1=1DI2DO, 2=3DI, 3=5DI Set the Hardware configuration 0 - none
POLL Cycle in ms Sets the sampling cycle of the digital inputs [in ms] POLL 1000
SKIP Number of polls Skip n Scans after pulse reconized 0
EDGE HL(0) LH(1) Count on edge HL or LH EDGE
SEND Cycle in ms The counter will send all nnn milliseconds SEND 5000
SENDT Cycle in ms The counter will poll and send the busses every nnnn milliseconds SENDT 8000
CHNG Send on Change Send if any Pin changes. Carefull if many changes CHNG 1
CNTR Send Counter Send counter+states(1) or only states(0) (default 1) CNTR 0
DEBO Number of polls Sets the debounce count. The signal has to be stable for nn polls DEBO 100
POWR state (0 or 1) Power-Out Relay is switched on or off REL1 1
REL? on-off (0 or 1) Send the current state of the Relays
REL1 state (0 or 1) Relay 1 is switched on or off REL1 1
REL2 state (0 or 1) Relay 2 is switched on or off REL2 1
REL3 state (0 or 1) Relay 3 is switched on or off REL3 1
REL4 state (0 or 1) Relay 4 is switched on or off REL4 1
RPU1 pulse in sec Pulse the Relay 1 for nns seconds RPU1 2
RPU2 pulse in sec Pulse the Relay 2 for nns seconds RPU2 2
TBUS 1=one bus, 2=2 busses Sets the number of temperature sensor busses to 1 or 2 TBUS 2
ADDRT 1=bus1, 2=bus2 displays the addresses of all sensors connected to the specified bus ADDRT 1

:Message-ID{counter1,counter2,..}{state1,state2}

The Message starts with a ':'. After that follows a Message-ID. This is a modulo HEX Counter from 0..FFFF.
Then within a '{' '}' the counter follows. The number of counter depends on the Hardware shields.
The Counter are HEX encoded and runs from 0 to FFFF (modulo).
Then again within a '{' '}' the current state of the inputs follows. 0-off, 1-on.
If the Setting REL? = 1 then a third '{' '}' follows with the current state of the relays
The number depends on the Hardware shields. The Message ends with a CR / LF [0x0d + 0x0a]

Example:

:0040{0002,0000,000B}{0,0,0}  
:0041{0002,0000,000B}{0,0,0}  
:0042{0004,0000,000C}{0,0,0}  
:0043{0004,0000,000C}{0,0,0}  
:0044{0008,0000,000F}{0,0,1}  

or if REL? 1:

:0045{0008,0000,000F}{0,0,1}{0,1} 
:0046{000A,0000,0000}{0,0,1}{0,1}  
:0047{000C,0000,0000}{1,0,0}{0,1}   
:0048{0010,0000,0000}{0,0,0}{0,1}  

!Message-ID{Bus-Nr}{TemperatureSensor1,TemperatureSensor2,...}

Temperature sensor messages always start with an exclamation mark ( ! ), followed by the message ID. Like for the input messages, this ID is displayed in HEX format and iterated with every received message. This is then followed by the bus number in { }. After that, the temperatures are displayed in the next section. They are displayed in °C, with two decimal places and delimited by a comma.

Example:

!008D{1}{22.00,21.25}
!008E{1}{22.31,21.56}
!008F{1}{22.56,21.88}
!0090{1}{22.88,22.25}
!0091{1}{23.13,22.56}
!0092{1}{23.56,23.00}
!0093{1}{24.00,23.50}

or if TBUS 2:

!0173{1}{21.81,21.19}
!0173{2}{20.75}
!0174{1}{22.13,21.63}
!0174{2}{20.75}
!0175{1}{22.44,22.13}
!0175{2}{21.25}
!0176{1}{22.88,22.69}
!0176{2}{23.00}
!0177{1}{23.25,23.19}
!0177{2}{23.50}
!0178{1}{23.63,23.69}

?{1}{0*28-78-8D-51-1D-19-01-05}{1*28-49-2C-70-53-59-11-C6}

The temperature sensor addresses connected to a certain bus are displayed in {}. First, the index of the sensor is noted, followed by a * and the address in HEX format afterwards.

Latest Version: Version007.ino (210107)

For older versions and changelog, visit our GitHub repository.