Sponsored Content
Top Forums Programming Arduino UNIX Time - Syncing Computer UNIX Time to Arduino Time with Python Post 303042410 by Neo on Tuesday 24th of December 2019 12:20:18 AM
Old 12-24-2019
Here is the Python 2.7.16 code I quickly put together to send unix time to the Arduino UNO.

I assume it also works on Python3, but I have not tested it because I have not completely upgrade python on my mac pro yet, sorry about that.

Code:
# -----------------------------------------------------------
# Sync Unix Time with Arduino Initial Draft 0.1
# Written on macOS, tested with Python 2.7.16
# Neo, December 2019
# This code needs refinement to be more general
# I will improve this code later when I need to use it in an Arduino project
# For now, it works "OK" and serves it purpose
# Feel free to improve, modify as you like.
# -----------------------------------------------------------
import serial
import time

ser = serial.Serial(
    port='/dev/cu.usbserial-40',  #change this for your device
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=0)

print("connected to: " + ser.portstr)

# this will store the line
line = []
ux = 0
a = False
debugScript = False
offset = 2 .  #adjust this time offset (in seconds) to account for various time delays in script and transferring via the serial port, etc. to insure the Arduino is in closer sync to the computer
time_int = 1000  # this can be any number greater than zero and less than recent unix time
count = 0
while True:
    if debugScript:
        print(str(int(time.time())))
    for c in ser.read():
        if not a:
            if ux < time_int:
                ser.write("T")
                ux = int(time.time())+offset
                ser.write(str(ux))
                ser.write("\n")
                ser.flush()
                if debugScript:
                    print("unixtime: " + str(ux))
        line.append(c)
        count += 1
        if c == '\n':
            print("Line("+str(count)+"): " + ''.join(line))
            x = int(time.time())+offset
            print("time("+str(count)+"): " + str(x) + "\n")
            line = []
            a = True
            break
ser.close()

 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Help me!First time use UNIX.

I am assigned a programming work.It is my first time to use unix. The task is writing a shell script to interrogate the university Unix operating system to determine the number of "Runnable" processes at any given time.Then append the result,along with a time-stamp,on a log file. Also there are... (1 Reply)
Discussion started by: zhshqzyc
1 Replies

2. UNIX for Advanced & Expert Users

How To Provide Time Sync Using Nts-150 Time Server On Unix Network?

can anybody tel lme,how to instal NTS -150 on a unix network,it needs some patch to fetch time frm serve,,?? (2 Replies)
Discussion started by: pesty
2 Replies

3. Shell Programming and Scripting

Convert Unix Time to Standard Time

I have a list of interfaces and time the interface was last active. I can't figure out how to convert the time in the second column, Fa1/14 0 Se0/0/0 0 Fa1/11 0 Fa1/9 0 Fa1/0 0 Se0/0/1 1240401408 Gi1/0 0 Fa0/0 1240401408 Fa1/3 0 Fa1/8 0 Fa1/15 0 Fa1/13 0 Fa1/10 0 Fa1/1 0 Fa1/12... (7 Replies)
Discussion started by: mrlayance
7 Replies

4. Shell Programming and Scripting

Unix time

how do i convert unix time to show normal eg i have unix time 1297702242 and i want it converted to normal time. how do i do that (2 Replies)
Discussion started by: blackzinga80
2 Replies

5. Shell Programming and Scripting

How to get time duration between two human readable time stamp in Unix?

Here is two time I have: Jul 12 16:02:01 Jul 13 01:02:01 and how can I do a simple match to get difference between two time which is 09:00:00 Thanks in advance. (3 Replies)
Discussion started by: ford99
3 Replies

6. UNIX for Dummies Questions & Answers

Converting string date time to unix time in AWK

I'd like to convert a date string in the form of sun aug 19 09:03:10 EDT 2012, to unixtime timestamp using awk. I tried This is how each line of the file looks like, different date and time in this format Sun Aug 19 08:33:45 EDT 2012, user1(108.6.217.236) all: test on the 17th ... (2 Replies)
Discussion started by: bkkid
2 Replies

7. Shell Programming and Scripting

Adding time to date time in UNIX shell scipting

I needed some help in adding a duration (in seconds) to a start time (in hhmmss format) and a start date (in mmddyy format) in order to get an end date and end time. The concept of a leap year is also to be considered while incrementing the day. The code/ function that I have formed so far is as... (3 Replies)
Discussion started by: codehelp04
3 Replies

8. Shell Programming and Scripting

Convert UTC time into current UNIX sever time zone

Hi guys thanks for the help for my previous posts.Now i have a requirement that i download a XMl file which has UTC time stamp.I need to convert UTC time into Unix server timezone. For ex if the time zone of unix server is CDT then i need to convert into CDT.whatever may be the system time... (5 Replies)
Discussion started by: mohanalakshmi
5 Replies

9. Programming

Arduino-cli - Uploading to Unknown Chinese Arduino Boards using the Arduino Command Line Interface

In my further exploration of Arduino, today I decided to install the arduino-cli on my mac today. https://github.com/arduino/arduino-cli I followed the instructions for macOS but when I got to this part: arduino-cli board list I got the dreaded "Unknown" Fully Qualified Board Name... (1 Reply)
Discussion started by: Neo
1 Replies
JPNEVULATOR(1)							   User Commands						    JPNEVULATOR(1)

NAME
jpnevulator - Just another serial sniffer SYNOPSIS
jpnevulator [OPTION]... <FILE> DESCRIPTION
jpnevulator is a handy serial sniffer. You can use it to send data on a serial device too. You can read or write from/to one or more serial devices at the same time. In write (--write) mode data to be sent on the serial device(s) is read from a file or stdin in hexadecimal notation. The input format is FD or 0xFD. Of course all input is treated case-insensitive. Spaces may or may not be included in the input. So DEADBEEF is exactly the same as DE AD BE EF. Data is sent on the serial device(s) line by line. In read (--read) mode data to be read from the serial device(s) is written to a file or stdout in hexadecimal notation. Skim through the options for several enhancements in the output. It's even possible to pass(--pass) on the data between the several serial devices. Mandatory arguments to long options are mandatory for short options too. Generic options: -f, --file=NAME In write mode read the contents of the file given and send them on the serial device(s) and in read mode write the contents of the serial device(s) to the file given. -h, --help Shows a brief list of options. -l, --alias-separator Use the given string as the alias separator. See --tty for more information. -r, --read Put the program in read mode. This way you read the data from the given serial device(s) and write it to the file given or stdout if none given. See the read options section for more read specific options. -t, --tty=NAME:ALIAS The serial device to read from or write to. Use multiple times to read/write from/to more than one serial device(s). For handy ref- erence you can also separate an alias from the tty name with a collon ':'. If a collon is for some strange reason part of your device name, you can use the --alias-separator option to specify another separation string. If an alias is given it will be used as the name of the serial device. -v, --version Output the version information, a small GPL notice and exit. -w, --write Put the program in write mode. This way you read data from a given file or stdin if none given and write it to the serial device(s) given. See the write options section for more write specific options. Read options: -a, --ascii Besides the hexadecimal output also display an extra column with the data in the ASCII representation. Non printable characters are displayed as a dot '.'. The ASCII data is displayed after the hexadecimal data. -b, --byte-count Besides the hexadecimal output also display an extra column with the current index number of the byte in the output. These numbers are displayed in front of the hexadecimal data. When readin from multiple serial devices at the same time the index number will increase per serial device. -e, --timing-delta=MICROSECONDS The timing delta is the amount of microseconds between two bytes that the latter is considered to be part of a new package. The default is 100 miliseconds. Use this option in conjunction with the --timing-print option. -g, --timing-print Print a line of timing information before every continues stream of bytes. When multiple serial devices are given also print the name or alias of the device where the data is coming from. -i, --width-delta=WIDTH The number of bytes to display on one line. The default is 16. -P, --pass This one passes all the data between the serial devices. Handy if you want to put your serial sniffer in between the serial devices you want to sniff. Write options: -c, --checksum Append a single checksum byte to the line of data written to the serial device(s) chosen. This checksum is a simple modulo 256 addi- tion of all input bytes on a line. -d, --delay-line=MICROSECONDS This delay is an optional amount of microseconds to wait in between every input line is sent on the serial device(s). -k, --delay-byte=MICROSECONDS This delay is an optional amount of microseconds to wait in between every input byte is sent on the serial device(s). -j, --fuck-up This is the special fuck up option. When the calculation of a checksum is chosen (see checksum and crc* options) the checkum will be crippled on purpose. Carefully named after the special Jan Arie de Bruin 'fuck up crc' button. -n, --no-send Do not actually send the bytes on the serial device(s). Rather pointless, but seemed one day long ago to be a rather handy feature. -p, --print Besided sending the data on the serial device(s) also write the data to stdout. -s, --size=SIZE The maximum number of bytes per line to send on the serial device(s). The default is 22, coming from back in the Cham2 days of the program. -y, --crc16=POLY Append a crc16 checksum to the line of data written to the serial device(s) chosen. Use the optionally given poly as the polyno- mial. Specify the polynomial as hexadecimal value, as in 0xA001 (the default). -z, --crc8=POLY Append a crc8 checksum to the line of data written to the serial device(s) chosen. Use the optionally given poly as the polynomial. Specify the polynomial as hexadecimal value, as in 0x07 (the default). DIAGNOSTICS
Normally, exit status is 0 if the program did run with no problem whatsoever. If the exit status is not equal to 0 an error message is printed on stderr which should help you solve the problem. BUGS
Order of bytes broke when reading several tty devices at once The display of incoming bytes can be broke if you use multiple tty devices to read from. At the moment I do not have a solution for this problem. Since I use select() to watch the several tty devices and after the select() I have to read() them one by one, I can not com- pletely 100% display which bytes came after which on different tty devices. Take the example below: $ jpnevulator --ascii --timing-print --tty /dev/ttyS0 --tty /dev/ttyUSB0 --read 2006-05-30 13:23:49.461075: /dev/ttyS0 00 00 05 3B 0D 00 00 05 ...;.... 2006-05-30 13:23:49.461113: /dev/ttyUSB0 00 05 3B 0D 00 00 05 3B 0D ..;....;. 2006-05-30 13:23:49.473074: /dev/ttyS0 3B 0D 00 00 05 3B 0D ;....;. 2006-05-30 13:23:49.473105: /dev/ttyUSB0 00 12 05 06 39 00 12 05 06 39 1F 00 22 80 00 0E ....9....9.."... $ And now see the order in which things really got sent on the line: /dev/ttyS0: 00 00 05 3B 0D /dev/ttyUSB0: 00 00 05 3B 0D /dev/ttyS0: 00 00 05 3B 0D /dev/ttyUSB0: 00 00 05 3B 0D /dev/ttyS0: 00 00 05 3B 0D /dev/ttyUSB0: 00 00 05 3B 0D 00 12 05 06 39 00 12 05 06 39 ... As you can see /dev/ttyUSB0 receives the echo of all things sent by /dev/ttyS0. This is exactly what happens. But since there does exist a small time between the select() who is happy expressing something is available and the read() who does get the available data, some extra data will be available. I have no idea on how I can use high level system call like select() and read() and be still able to put the bytes in the correct order. Anyone an idea? AUTHOR
Written by Freddy Spierenburg. REPORTING BUGS
Report bugs to <freddy@snarl.nl>. COPYRIGHT
Copyright (C) 2006-2012 Freddy Spierenburg jpnevulator 1.3.1 January 2012 JPNEVULATOR(1)
All times are GMT -4. The time now is 06:46 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy