Datalogging, Timestamp, & Monitor Arduino Data With an Incredible Bash-One-Liner

10,267

21

4

Posted

Introduction: Datalogging, Timestamp, & Monitor Arduino Data With an Incredible Bash-One-Liner


The description doesn't fit on one line -- but the code does!

This is a bash one-liner for logging data from the Arduino, and for processing (e.g. timestamping, reacting to sensor readings, etc.) and then redirecting data file.

I have tried this out on Mac Os X, but I'll verify it on the Raspberry Pi right away (as linux can perform nanosecond timestamping).

Code:

cat /dev/cu.usbmodem1421 | awk '{ for (i=0; i<NF; i++) printf $i + system("date +,%s")}'

To use with your arduino:

Just replace the /dev/cu.usbmodem1421 with your arduino's serial port (an easy way to find this is to see which is checked in the Tools -> Port  of the Arduino IDE menu)

(If you have both /dev/cu.usbmodem and /dev/tty.usbmodem, then use the /dev/cu.usbmodem one)

Real-Time Monitoring:

Real-time monitoring and command line reactions are simple to add-on, for these examples visit (and please star) the project's github.

Share

Recommendations

  • Epilog Challenge 9

    Epilog Challenge 9
  • First Time Author Contest 2018

    First Time Author Contest 2018
  • Sew Warm Contest 2018

    Sew Warm Contest 2018
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

4 Comments

Hi

Thank you so much for this interesting project. But, did you manage to try it on raspberry?

And, if I want to to timestamp sensor readings using GPS synchronized timing do you know how it can be implemented?

Thank you,

Alireza, Geophysicist

Do you need an internet connection for the timestamp to work?

Hi Jsonius,

Thanks for the question: no internet connection is required for this method to work. It uses the system's own `date` utility, and can be used completely offline.

-- Greg

Good effort here - there's a lot to learn and use in Linux!

The command ts (in the Debian/Raspbian/Ubuntu package moreutils) might also do what I think you're trying to do here. Also, if you use gnu awk, it has a strftime function, so you can avoid the system() call and do

gawk '{print strftime("%s ") $0}'

You might also want to try grabserial.