Portál AbcLinuxu, 8. května 2025 15:38
#!/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:
#!/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'
[Errno 13] Permission denied: '/dev/ttyAMA0'=> pridej se do skupiny 'dialout':
sudo usermod -a -G dialout pi
read -n 200 LINE < /dev/ttyAMA0 9600-bash: /dev/ttyAMA0: Permission denied
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 deniedNemáš k tomu práva. Jako uživatel musíš být ve skupině dialout nebo tak něco.
read -n 200 LINE < /dev/ttyAMA0 9600To 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()
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? :(
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.