Sh.K Sh.K - 6 months ago 37
Python Question

Python send data Serial to Microcontroller STM32F4

So this is the script I am using to send each 2 seconds for four time the Time in microsecond to the microcontroller stm32f4 but unfoturnately it only sends some numbers(from 1-->4) which are not the same as when I do a print,it is like random numbers .

import time
import serial from datetime
import datetime from time
import gmtime, strftime

ser = serial.Serial(
port='/dev/ttyACM0',
baudrate=115200,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS

)
ser.writeTimeout = 0
ser.isOpen()

TM1 = int(round(time.time()*1000000))
ser.write(str(TM1).encode())
#ser.write( str(TM1)+" \r\n")
time.sleep(2)
TM2 = int(round(time.time()*1000000))
ser.write(str(TM2)+" \r\n")
time.sleep(2)
TM3 = int(round(time.time()*1000000))
ser.write(str(TM3)+" \r\n")
time.sleep(2)
TM4 = int(round(time.time()*1000000))
ser.write(str(TM4)+" \r\n")

Answer

I cannot see anything obviously wrong at first sight. I have a almost identical snippet of code running here that works. My guess would be that the settings of the serial port do not match. Double check that the baudrate, parity and stopbit settings match.

Second guess would be a mess-up with encodings. Have you set your default encoding in python to utf-8? If so you could try

ser.write(str(TM1).encode('ascii'))

Posting the output you get would help as well.

Edit: to avoid the microcontroller skipping some characters. You could use a small function like this. (I used that to send commands to a sensor that had the same issues. When I sent a command like this `ser.write("start logging") it would receive something like "sart lgging".

def write_safe(cmd):
    for x in cmd:
        ser.write(x)
        sleep(0.05)
    ser.write('\r\n')
Comments