Portál AbcLinuxu, 26. června 2025 21:24
Čtu ze čtečky RFID první čtyři byte, které jsou ID přiložené karty. Sice jsem musel nejprve do EEPROM poslat nějaké nastavovací byte, aby se to ID odesílalo samo po TX ihned jakmile se objeví karta v dosahu antény, ale problém mám jiný.
Pokud použiji pyserial (viz výpis dále), je vše v pořádku:
#!/usr/bin/python import serial, string ser = serial.Serial(0) print ser.portstr if ser.getCTS() == False: print "Changing EEPROM" # Set output pin to Tx ser.write(chr(0x50)+chr(0x09)+chr(0x01)) # Set 1s beep ser.write(chr(0x50)+chr(0x07)+chr(0x18)) # Set ASCII output format ser.write(chr(0x50)+chr(0x10)+chr(0x01)) while 1: # Read for bytes ID output = ser.read(4) print "Mifare ID: ", mifare(output) ser.close() quit()
Snažím-li se ale přímo v BASHi číst např. přes cat /dev/ttyS1
nebo takto (viz výpis), nic se neděje:
#!/bin/bash while [ 1 ]; do read CARD_ID < /dev/ttyS0 echo $CARD_ID done
Jak mám to, co se mi podařilo v Pythonu, zajistit v BASHi? Jsem omezen pouze na použití BASHe. Data na seriovém portu, ty čtyři byte ID karty, jsou v HEX, má-li to mít nějaký vliv na konstrukci skriptu.
Předem moc díky, už nevím jak to udělat.
Dělám to na jednom embbed zařízení, setserial tam není, pouze stty, ale to by mohlo stačit, ne? V návodu k zařízení je 9600baud, 8bits, 1stop, no parity
- předpokládám, že řízené je tedy off. Bude stačit, pokud udělám toto (předtím, než spustím nekonečnou while
smyčku)?
stty 9600 cs8 -parenb -crtsdts -cstopb -echo -F /dev/ttyS0
read -n
dd
.
Řešení:
#!/bin/bash # Nastaveni prenosu dat stty -F /dev/ttyS1 raw speed 9600 # Smycka while [ 1 ]; do READ=`dd if=/dev/ttyS1 count=1` echo $READ done
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.