Sida 1 av 1

Läsa seriadata UNO från RPi

Postat: 22 september 2022, 15:11:31
av Repaterion
Hejsan!

Sitter med ett väderstation på skolan och vi skall läsa data från en UNO/Arduino med hjälp av en RPi B+ i mitt fall.
Allt funkar och datan kommer på löpande band via USB, men jag får en massa extra tecken jag inte vill ha.
RPi kör ett python3 program för att skriva ut på terminalen.

Temperaturen är 22.1 C <- Kommer från RPi som läser en DS18B20
Vindhastighet: b'28.30 m/S\r\n' <- Kommer via USB från en UNO.
Jag vill ha bara ha 28,30 m/s kvar, har testat metoder likt print (f'Vindhastighet: {readText[0:11]}') men det jälper inte, koden ser ut så här.

Det är säkert ett skitfel som vanligt. Men idéer och tips mottages.

Kod: Markera allt

 1 #!/usr/bin/python3
 2
 3 import time
 4 import serial
 5
 6 while 1:
 7    ser = serial.Serial('/dev/ttyACM0', 9600)
 8    readText = ser.readline()
 9    print (f'Vindhastighet: {readText[0:11]}')
10
11
12    tempfil = open('/sys/bus/w1/devices/28-0000095c963e/temperature')
13    temperatur = tempfil.read()
14    print(temperatur)
15    if len(temperatur) > 0:
16       temperaturprint = (float(temperatur) / 1000)
17       temperaturprint = str(temperaturprint)
18       print(f'Temperaturen är {temperaturprint[:4]} C')
19    time.sleep(0.15)
20    tempfil.close()
21

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 15:28:03
av Kulla
\r\n är new line så du kan egentligen göra nåt i stil

hastighet = readText[0:11]
print (f'Vindhastighet: {hastighet.strip()}')

Strip borde ta bort new line char, annars du kan använda sig av split för att få det i array och ta bara första medlem av arrayen.

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 15:39:41
av Fortran
Såhär ser det ut i ett program jag gjort som gör något liknande.
Hoppas det hjälper.

Kod: Markera allt

#!/usr/bin/env python

import time
import serial


arduino = serial.Serial(
    port='/dev/ttyACM0',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)

def arduinoRead(channel): # Send a port name (D2 A0) and get its value returned. 
    arduino.write(channel.encode()) 
    time.sleep(2)
    data=arduino.readline() # Recieve port status
    data=data[:-2] # Trim away carriage return and newline
    data=data.decode() # make readable
    return (int(data))
    

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 16:22:49
av Repaterion
Att skriva strip hjälper en bit, men har ju fortfarande "b"kvar sedan. :humm:
Som att det skrivs ut en sträng b'DATA'

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 16:23:52
av Repaterion
Fortran skrev: 22 september 2022, 15:39:41 Såhär ser det ut i ett program jag gjort som gör något liknande.
Hoppas det hjälper.

Kod: Markera allt

#!/usr/bin/env python

import time
import serial


arduino = serial.Serial(
    port='/dev/ttyACM0',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1
)

def arduinoRead(channel): # Send a port name (D2 A0) and get its value returned. 
    arduino.write(channel.encode()) 
    time.sleep(2)
    data=arduino.readline() # Recieve port status
    data=data[:-2] # Trim away carriage return and newline
    data=data.decode() # make readable
    return (int(data))
    
Åt vilket håll sker kommunikationen? Är inte så haj på Python än.
Vi skall hämta data FRÅN Arduino TILL RPi.

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 16:27:24
av Repaterion
Ser att det står arduinoRead nu

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 16:29:35
av Repaterion
20220922_162757.jpg

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 17:55:47
av Fortran
b'...' verkar vara att den skriver ut vilken datatyp det är.
https://www.studytonight.com/post/signi ... -in-python

Re: Läsa seriadata UNO från RPi

Postat: 22 september 2022, 19:45:39
av N3M0
Det stämmer b’…’ betyder att det är binär data. Testa detta för att konvertera till en ”vanlig” sträng:

Kod: Markera allt

 readLine = ser.readline().decode('ascii')

Re: Läsa seriadata UNO från RPi

Postat: 29 september 2022, 10:19:49
av Repaterion
Tack för svar och förslag, nu ser det ut att fungera. :D
Nu skall data upp på en hemsida och ut på nätet för VG nivå.