Portál AbcLinuxu, 8. května 2025 15:38

Dotaz: Čtení z pinu TX na GPIO na Raspberry

10.2.2016 21:08 cvp | skóre: 18
Čtení z pinu TX na GPIO na Raspberry
Přečteno: 1236×
Odpovědět | Admin
Mám propojený Arduino s Raspberry a potřebuji z něj číst data. Propojeno mám přes GPIO přes pin TX (obrázek zde).

Můj python script:
#!/usr/local/bin/python
# -*- encoding: utf-8 -*-

import serial
ser = serial.Serial('/dev/ttyACM0', 9600)

state=ser.readline()
print(state)
Bohužel dostávám chybu, že port /dev/ttyACM0 neexistuje, což nechápu. Zapojeno mám správně.
serial.serialutil.SerialException: could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

10.2.2016 21:34 NN
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Odpovědět | | Sbalit | Link | Blokovat | Admin
/dev/ttyACM0 v systemu existuje nebo ne?
10.2.2016 21:37 cvp | skóre: 18
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Ve složce /dev/ jsem ttyACM0 nenašel. Je tam pouze ttyAMA0.
10.2.2016 22:38 cvp | skóre: 18
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
#!/usr/bin/env python

import serial

ser = serial.Serial('/dev/ttyAMA0', 9600)
state=ser.readline()
print(state)
Dostanu ale opět chybu. Přitom serial mám na Raspberry povolen.
pi@raspberrypi:~ $ python senzor.py
Traceback (most recent call last):
  File "senzor.py", line 5, in module
    ser = serial.Serial('/dev/ttyAMA0', 9600)
  File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 261, in __init__
    self.open()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 278, in open
    raise SerialException("could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: could not open port /dev/ttyAMA0: [Errno 13] Permission denied: '/dev/ttyAMA0'
10.2.2016 22:49 NN
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
AMC jsi opravil na AMA, ale tentokrat nemas prava:
[Errno 13] Permission denied: '/dev/ttyAMA0'
=> pridej se do skupiny 'dialout':
sudo usermod -a -G dialout pi
Jendа avatar 10.2.2016 23:42 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Dále kdysi mi na RPi sériák nechodil, dokud jsem nesestřelil getty, které tam defaultně poslouchalo (a možná i jadernou konzoli).
18.2.2016 14:31 cvp | skóre: 18
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
No já za boha nemohu komunikovat s Arduinem přes sériák. Už jsem se přepnul do root přes sudo -i a zkoušel komunikaci, ale nic nedostávám. Přitom mám odzkošené, že Arduino funguje a data generuje každou sekundu. Arduino LX bliká právě každou sekundu.

Raspberry mlčí a s Arduino nechce přes sériák ani slyšet :(

Zkoušel jsem komunikaci i přes:
read -n 200 LINE < /dev/ttyAMA0 9600
-bash: /dev/ttyAMA0: Permission denied
Jendа avatar 18.2.2016 15:13 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
No já za boha nemohu komunikovat s Arduinem přes sériák.
Arduino je 5V, při připojení přímo na RPi hrozí zničení jeho 3.3V logiky.

Na low-level problémy s komunikací se hodí logický analyzér a/nebo osciloskop, možná by pomohla alespoň zvukovka.
-bash: /dev/ttyAMA0: Permission denied
Nemáš k tomu práva. Jako uživatel musíš být ve skupině dialout nebo tak něco.
read -n 200 LINE < /dev/ttyAMA0 9600
To je blbost, co tam dělá to 9600? Parametry linky musíš nastavit přes stty, napsat to jen tak za jméno souboru asi těžko pomůže.

Osobně používám na komunikaci po sériáku screen (screen /dev/ttybla 9600), pro čtení delších výpisů pak svůj vlastní skript
#!/usr/bin/python3
import time
import serial
import sys

from datetime import datetime
from time import gmtime, strftime

def toascii(s):
  return s.decode('ascii', 'ignore')

def fromascii(s):
  return s.encode('ascii', 'ignore')


br=int(sys.argv[2])

ser = serial.Serial(port=sys.argv[1], baudrate=br, timeout=21)

wow=datetime.now().strftime("%Y-%m-%d-%H%M%S")
l=open("./serial-%s.txt"%(wow), "ab")

while True:
  line = ser.readline()

  wow=datetime.now().strftime("%Y-%m-%d-%H%M%S")
  l.write(fromascii(wow))
  l.write(fromascii(" "))
  l.write(line)

  sys.stdout.write(line.decode("utf-8", 'ignore'))

  sys.stdout.flush()
  l.flush()
18.2.2016 15:34 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Arduino je 5V, při připojení přímo na RPi hrozí zničení jeho 3.3V logiky.

To arduino mini pro může být i 3,3V. Nicméně na tom obrázku je vidět bi-di level shifter ve směru arduino 5v - rpi 3,3V.
18.2.2016 14:29 cvp | skóre: 18
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Nepomohlo, stále mám chybu: serial.serialutil.SerialException: could not open port /dev/ttyAMA0: [Errno 13] Permission denied: '/dev/ttyAMA0'
18.2.2016 21:08 NN
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Permission denied
randy avatar 18.2.2016 20:48 randy | skóre: 21 | Hviezdoslavov
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co to bude ked to bude? Ten snimac gp2y10 mam tu tiez na stole, no akosi som to nedotiahol do konca :d
R>
18.2.2016 22:17 cvp | skóre: 18
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Dvě teplotní čidla Dallas DS18B20 a optický senzor prachu Sharp GP2Y1010AU0F.
23.2.2016 15:49 cvp | skóre: 18
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Odpovědět | | Sbalit | Link | Blokovat | Admin
Čtení již funguje, ale mám problém.

Arduino kód:
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  if(Serial.available())
  {
    byte value = Serial.read();
     if(value == '1')
     {
      Serial.print("25.4"); 
     }
  }

}
Na Raspberry PI mám python script, který odešle číslo 1 a Arduino zašle 25.4. Uvádím to jako příklad, protože na Arduino mně zasílá více teplot a dokonce informaci o prachu z Dust senzoru. Arduino to trvá pár milisenkud.

Bohužel na Rapsberry dostávám prázdný řádek a nevím proč. Přitom na Arduino to vypisuje správně, leč se malinko čeká (milisekundy).

Python kód:

#!/usr/bin/env python
import serial
s = serial.Serial("/dev/ttyAMA0", 9600)
s.write('1')
response = s.read()
print response

s.close()

Zkoušel jsem vložit i timeout=0.5, ale stále prázdný řádek. Poradíte? :(
23.2.2016 16:30 NN
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Uz jsi dostal odpoved na arduino.cc ..
14.3.2016 21:15 Skokan | skóre: 11
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Tu odpověď tam nedostal, upozorňují tam, aby nezaměňoval číslo 1 a znak '1', ale to už ve vzorku kódu tady v diskusi má správně.
14.3.2016 22:14 NN
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
To teda nema, porovnava byte a char. Predevsim proto, ze nema vubec tuseni co dela..
15.3.2016 15:27 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jenom takový dotaz, když tak na to koukám, je nějaký důvod, proč ty periferie nepřipojit přímo k tomu raspberry? Přijde mi to trochu zbytečně složité, raspberry má I2C (DS18B20) pak lze číst přímo třeba z /sys/devices/w1_bus_master1/,.... a ten Dust senzor také https://github.com/zxkane/ZhyuIoT/tree/master/GP2Y10
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
17.3.2016 11:41 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
DS18B20 nepouziva I2C, ale 1-Wire.

Jinak bych take vetsinu veci pripojil primo na RPi.
22.3.2016 07:39 blondak | skóre: 36 | blog: Blondak | Čáslav
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Pravda 1wire, ale i ten jde na RPi, sám tyto čidla používám na RPi.
Každý problém ma své logické, snadno pochopitelné nesprávné řešení.
20.3.2016 21:34 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
Rozbalit Rozbalit vše Re: Čtení z pinu TX na GPIO na Raspberry
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebude lepsie to Arduino Nano pripojit cez USB ako sa hrat s level shifterom a viacmenej softwarovou implementaciou serioveho protokolu na RPi ? ... Ako bonus: pri pouziti spravneho bootloadera sa bude dat kod beziaci na Arduino Nano updatovat bez akehokolvek zasahu do zapojenia ...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.