Kirjoittaja Aihe: Miten sarjaportista tuleva tieto luetaan tietostoon?  (Luettu 1911 kertaa)

jarmala

  • Käyttäjä
  • Viestejä: 400
    • Profiili
Olen Ubuntu 10.04:ssä onnistuneesti lukenut Arduinolta sarjaportin kautta tulevaa tietoa tiedostoon komennolla

stty -F /dev/ttyACM0 9600 && tail -f /dev/ttyACM0 >>y

Mutta se ei enää toimi päivitettyäni Ubuntun versioon 12.04. Tiedosto y kyllä syntyy, mutta sen koko pysyy nollana eli sinne ei kerry tietoa.

Uudempaan 14.04:ään päivitän vasta kesäkuussa (tai sen jälkeen, kun tämä alkaa toimia tässä 12.04:ssä).

Tuo laitetiedosto kuuluu ryhmälle dialout ja olen kyseisen ryhmän jäsen:

$ groups ari
ari : ari adm tty uucp dialout cdrom ...

Nyt ei vaan tajua, miksi data ei kerry tiedostoon y... Mitä pitää vielä loitsuta tässä 12.04 -versiossa?
Tai onko muita helppoja helppoja tallettaa sarjaportista tuleva data tiedostoon?

T. Ari
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB

pata

  • Käyttäjä
  • Viestejä: 47
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #1 : 12.06.14 - klo:07.51 »
Laitoin kokeeksi Arduinon Duemilanove USB(sarja)-porttiin ja /dev alle ilmaantui ttyUSB0. Kubuntu 12.04.
Sitten taas Uno kanssa näyttää portti olevan /dev/ttyACM0. Hassua.

Kirjoitan tavallisesti tiedostoon Python skriptillä tähän tapaan (python-serial asennettu):

Koodia: [Valitse]
#! /usr/bin/python
import serial
from time import strftime, sleep
ser = serial.Serial('/dev/ttyUSB0', 19200, timeout = 0.01)
sleep (0.5)
#ser.write ('Reset'.encode('UTF8'))
while 1:
sleep(0.1)
if ser.inWaiting() >= 14: # messages 14 chars
lin = ser.readline()
line = lin.decode('utf8')
f = open( 'test.txt', 'a')
f.write (line)
f.close()

Code-tagit lisätty. Käytä niistä vastaisuudessa itse tuosta #-merkistä. -- Timo
« Viimeksi muokattu: 12.06.14 - klo:09.41 kirjoittanut Timo Tamminen »

antinimellinen

  • Käyttäjä
  • Viestejä: 18
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #2 : 12.06.14 - klo:16.34 »
itte oon käyttäny debianilla ja arduino leonardolla seuraavaa
Koodia: [Valitse]
tail -f /dev/ttyACM0 >> tiedostotoi tulostaa kivasti kaiken tiedostoon aina prosessin tappamiseen asti.  :)
sitä en tiedä kuinka hyvän tavan mukanen ratkasu mahtaa olla kun noissa yleensä aina määritellään noita nopeuksia yms.

ja toimii toiseenkin suuntaan

Koodia: [Valitse]
cat tiedosto >> /dev/ttyACM0
en tiedä toimiiko sun tapauksessas mut muistelisin että päädyin noihin komentoihin kun mulla oli jotain ongelmaa noiden "hienompien" komentojen (siis noi missä määritellään nopeus)  kanssa.

Debian Wheezy

jarmala

  • Käyttäjä
  • Viestejä: 400
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #3 : 13.06.14 - klo:05.32 »
itte oon käyttäny debianilla ja arduino leonardolla seuraavaa
Koodia: [Valitse]
tail -f /dev/ttyACM0 >> tiedostotoi tulostaa kivasti kaiken tiedostoon aina prosessin tappamiseen asti.  :)

Eli siis täsmälleen sama komento kuin minullakin, mutta täällä se vaan ei tee mitään.

Voisiko tämä sittenkin olla jokin oikeuskysymys? Tuo sarjaportti on:

$ ll /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 kesä  13 05:28 /dev/ttyACM0

ja

$ groups ari
ari : ari adm tty uucp dialout cdrom floppy

niin eikä minulla nyt pitäisi olla oikeus käpistellä tätä /dev/ttyACM0:aa?

Edelleen saa ehdottaa keinoja ongelman ratkaisemiseksi.
Kiitoksia jo etukäteen.
 
T. Ari
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB

jarmala

  • Käyttäjä
  • Viestejä: 400
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #4 : 13.06.14 - klo:05.50 »

Kirjoitan tavallisesti tiedostoon Python skriptillä tähän tapaan (python-serial asennettu):

Kiitoksia paljon. Tuo python -skripti lähti toimimaan. Käytänpä sitä sillä aikaa kunnes tailin ongelma ratkeaa.

T. Ari
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB

joonas60

  • Käyttäjä
  • Viestejä: 252
  • Tietotekniikan kanssa puuhastelua yli 30 vuotta
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #5 : 16.06.14 - klo:03.02 »
Kokeilin tail-komentoa virtuaakoneella (läppärissä Oraclen VirtualBox) Ubuntun versioilla 10.04 ja Ubuntu 12.04: samat vaivat Arduino Unolla (versio R3) ja Ubuntu 12.04:lla. Pitkän tutkailun tuloksena löytyi ratkaisu:

Koodia: [Valitse]
tail -f ---disable-inotify /dev/ttyACMO
Tosiaan optio vaatii KOLME tavuviivaa. Tätä disable-optiota ei ole dokumentoitu, sitä ei löydy siis tail-komennon manuaalista (man tail).

Sellaisen havainnon tein myös, että tail-komento toimi vasta, kun oli käyttänyt Arduino IDE:n Serial Monitoria. Ennen sitä komennolla:

Koodia: [Valitse]
cat /dev/ttyACM0
sai Arduinon tulostamaan päätteelle. Serial Monitorin jälkeen cat-komento lakkasi toimimasta Arduinon kanssa, mutta tosiaan tail-komento toimi, kunhan antoi tuon disable-option.

Ko. disable-optio on löytyy coreutils versiosta 7.6 lähtien (tail-komento on osa GNU:n coreutils-pakettia). Käytetyn coreutils version saa selville esim. komennolla:

Koodia: [Valitse]
tail --version
EDIT: lisäys/pieni korjaus
« Viimeksi muokattu: 17.06.14 - klo:01.48 kirjoittanut joonas60 »
terv. joonas60
Lenovo L430
Windows 7
Virtualbox & Ubuntu 16.04 LTS

jarmala

  • Käyttäjä
  • Viestejä: 400
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #6 : 17.06.14 - klo:01.34 »
Kokeilin tail-komentoa virtuaakoneella (läppärissä Oraclen VirtualBox) Ubuntun versioilla 10.04 ja Ubuntu 12.04: samat vaivat Arduino Unolla (versio R3) ja Ubuntu 12.04:lla. Pitkän tutkailun tuloksena löytyi ratkaisu:

Koodia: [Valitse]
tail -f ---disable-inotify /dev/ttyACMO
Tosiaan optio vaatii KOLME tavuviivaa. Tätä disable-optiota ei ole dokumentoitu, sitä ei löydy siis tai-komennon manuaalista.

Ko. disable-optio on löytyy coreutils versiosta 7.6 lähtien (tail-komento on osa GNU:n coreutils-pakettia). Käytetyn coreutils version saa selville esim. komennolla:

Koodia: [Valitse]
tail --version

Juu, nyt on:
$ tail --version
tail (GNU coreutils) 8.13

Ja tuon ehdottamasi option kanssa tail lähti taas pelittämään. Kiitoksia!

T. Ari
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB

joonas60

  • Käyttäjä
  • Viestejä: 252
  • Tietotekniikan kanssa puuhastelua yli 30 vuotta
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #7 : 17.06.14 - klo:01.51 »

Ja tuon ehdottamasi option kanssa tail lähti taas pelittämään. Kiitoksia!

T. Ari


Kiitokset kiitoksesta, oli mielenkiintoista tutkia asiaa.
terv. joonas60
Lenovo L430
Windows 7
Virtualbox & Ubuntu 16.04 LTS

jarmala

  • Käyttäjä
  • Viestejä: 400
    • Profiili
Vs: Miten sarjaportista tuleva tieto luetaan tietostoon?
« Vastaus #8 : 26.06.14 - klo:16.28 »

Koodia: [Valitse]
tail -f ---disable-inotify /dev/ttyACMO

Hmm, kokeilin tuota pari kolme päivää ja huomasin, että sinä aikana kone meni kaksi kertaa täysin jumiin: levy käy satasella koko ajan ja edes hiiren päivitys kuvaruudulla ei toimi. Kone siis tekee täysillä jotakin, mitä ei mitenkään pääse näkemään, kun kone ei vastaa mihinkään. Odottelin tilanteen loppuvan useiden tuntien ajan, mutta se vaan jatkui. Buutti virtanapista auttaa, mutta sama oire ilmestyi aina uudestaan öbaut seuraavana päivänä.

Palasin sitten takaisin perl-skriptin käyttöön ja se on nyt toiminut moitteetta jo monta päivää. Epäilen siis, että tuolla tail-komennolla oli jotain tekemistä koneen jumien kanssa. Eh?

T. Ari
Ubuntu 18.04 LTS, Gnome Flashback Metacity, Xeon E3-1245 V2, 8 GB