Läsa seriadata UNO från RPi

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Repaterion
Inlägg: 459
Blev medlem: 4 februari 2011, 00:57:32
Ort: Gustavsfors (Lite till vänster om världens utkant)

Läsa seriadata UNO från RPi

Inlägg 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
Kulla
Inlägg: 1190
Blev medlem: 7 januari 2010, 10:06:11
Ort: Sandared
Kontakt:

Re: Läsa seriadata UNO från RPi

Inlägg 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.
Fortran
EF Sponsor
Inlägg: 1177
Blev medlem: 5 december 2011, 04:18:29
Ort: Åland

Re: Läsa seriadata UNO från RPi

Inlägg 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))
    
Användarvisningsbild
Repaterion
Inlägg: 459
Blev medlem: 4 februari 2011, 00:57:32
Ort: Gustavsfors (Lite till vänster om världens utkant)

Re: Läsa seriadata UNO från RPi

Inlägg 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'
Användarvisningsbild
Repaterion
Inlägg: 459
Blev medlem: 4 februari 2011, 00:57:32
Ort: Gustavsfors (Lite till vänster om världens utkant)

Re: Läsa seriadata UNO från RPi

Inlägg 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.
Användarvisningsbild
Repaterion
Inlägg: 459
Blev medlem: 4 februari 2011, 00:57:32
Ort: Gustavsfors (Lite till vänster om världens utkant)

Re: Läsa seriadata UNO från RPi

Inlägg av Repaterion »

Ser att det står arduinoRead nu
Användarvisningsbild
Repaterion
Inlägg: 459
Blev medlem: 4 februari 2011, 00:57:32
Ort: Gustavsfors (Lite till vänster om världens utkant)

Re: Läsa seriadata UNO från RPi

Inlägg av Repaterion »

20220922_162757.jpg
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Fortran
EF Sponsor
Inlägg: 1177
Blev medlem: 5 december 2011, 04:18:29
Ort: Åland

Re: Läsa seriadata UNO från RPi

Inlägg av Fortran »

b'...' verkar vara att den skriver ut vilken datatyp det är.
https://www.studytonight.com/post/signi ... -in-python
N3M0
Inlägg: 114
Blev medlem: 2 januari 2011, 21:03:44
Ort: Lund

Re: Läsa seriadata UNO från RPi

Inlägg 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')
Användarvisningsbild
Repaterion
Inlägg: 459
Blev medlem: 4 februari 2011, 00:57:32
Ort: Gustavsfors (Lite till vänster om världens utkant)

Re: Läsa seriadata UNO från RPi

Inlägg 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å.
Skriv svar