কীভাবে সিরিয়াল বন্দরে ডেটা প্রেরণ করবেন এবং কোনও উত্তর দেখুন?


37

লিনাক্সে, আমি একটি সিরিয়াল পোর্টে কমান্ড স্ট্রিং (অর্থাত্ কিছু ডেটা) প্রেরণ করতে চাই (নিয়ন্ত্রণের অক্ষর ধারণ করে), এবং প্রতিক্রিয়া শুনতে (এতে সাধারণত নিয়ন্ত্রণের অক্ষরও থাকতে পারে)।

আমি লিনাক্সে এটি যতটা সম্ভব সহজভাবে করতে পারি? একটি উদাহরণ প্রশংসা করা হয়!



আমার ইন্টারসেপটি ইনস্টল নেই।
অ্যালেক্স

পুনরায় খোলার জন্য মনোনীত করা - এটি প্রস্তাবিত হিসাবে সদৃশ নয়।
পিটার্ফ

কিছু লোক খুব বোকা তারা কেবল প্রজাতন্ত্র হিসাবে প্রশ্নগুলির পরামর্শ দেয়। প্রথমে প্রশ্নোত্তর পড়তে বিরক্ত করুন।
ডেনিস

উত্তর:


54

ইউনিক্সের সমস্ত ডিভাইস একটি ডিভাইস ফাইলে ম্যাপ করা হয়েছে, সিরিয়াল পোর্টগুলি হবে /dev/ttyS0 /dev/ttyS1...।

প্রথমে সেই ফাইলটির অনুমতিগুলি একবার দেখুন, ধরে নিই যে আপনি ব্যবহার করছেন /dev/ttyS1

ls -l /dev/ttyS1

আপনি পঠন-লেখার অ্যাক্সেস চাইবেন, যদি এটি একটি ভাগ করা সিস্টেম হয় তবে আপনার এটি সবার জন্য খোলার সুরক্ষা পরিণতি বিবেচনা করা উচিত।

chmod o+rw /dev/ttyS1

ফাইলটিতে লেখার জন্য একটি খুব সাধারণ অপরিশোধিত পদ্ধতি, সাধারণ echoকমান্ডটি ব্যবহার করবে ।

echo -ne '\033[2J' > /dev/ttyS1

এবং পড়তে

cat -v < /dev/ttyS1

আপনার কাছে একটি টার্মিনালে বিড়াল চলতে পারে এবং দ্বিতীয়টিতে প্রতিধ্বনিত হতে পারে।

যদি সবকিছু গীবের হয় তবে প্রেরণ শুরু করার আগে বিট সেটিংসের প্রয়োজন হতে পারে setting sttyএটা করবে। !! নোট স্টটি স্ট্যান্ডিনকে প্রভাবিত করতে ডিফল্ট ফাইল বর্ণনাকারী হিসাবে ব্যবহার করবে।

সমান কমান্ড।

stty 19200 < /dev/ttyS1
stty 19200 -F /dev/ttyS1

আপনার কিছু স্ক্রিপ্ট এবং লগ করার জন্য এটি যথেষ্ট হতে পারে? আপনি কী অর্জন করতে চাইছেন তা নিশ্চিত নন।

আরও ইন্টারেক্টিভের জন্য, আপনার ডিফল্ট সেটিংসের পদ্ধতির কথা মনে রাখবেন minicomএটি ব্যবহার করা কেবল একটি প্রোগ্রাম যা আমি এখনও অবধি উল্লেখ করা সমস্ত কিছু করে। (উইন্ডোজ হাইপারটার্মিনাল অনুরূপ, আপনি পরিচিত হতে পারে)।

একটি মধ্যবর্তী সমাধান, একটি টার্মিনাল প্রোগ্রাম ব্যবহার screenকরবে যা সিরিয়াল ডিভাইসে কাজ করবে।

screen /dev/ttyS1

man screen man minicom man stty আরও তথ্যের জন্য


আমি মোটেও কোনও আউটপুট পাচ্ছি না। কোন ধারণা আছে?
স্বর্ণের নাম

সম্ভবত হার্ডওয়্যার ফ্লো কন্ট্রোল, হয় অ্যাটি কমান্ড দিয়ে স্যুইচ অফ করুন বা সিরিয়াল তারের উচ্চ চাবুক, নাল মডেম তারের জন্য অনুসন্ধান করুন।
এক্স টিয়ান

1
# stty -speed 38400 -f /dev/ttyUSB1রিটার্নstty: invalid argument '-speed'
প্রো ব্যাকআপ

1
স্টেটি-তে ডিভাইস সেট করা -F (মূলধন এফ)। এছাড়াও আপনার গতির প্যারামিটারটি ভুল। আপনি বন্দরের বাউড রেট পেতে গতি ব্যবহার করতে পারেন, বা ইনপুট এবং আউটপুট গতি সেট করতে ইস্পিড বা অ্যাসপিড (বিয়োগ চিহ্ন ছাড়া) বা ইনপুট এবং আউটপুট উভয় গতি সেট করতে কেবল একটি সংখ্যক: stty 19200 -F / দেব / টিটিএস ....
পলাস

আশ্চর্যজনক কেউ এর আগে খেয়াল করেনি, আপনাকে ধন্যবাদ @ প্রো ব্যাকআপ আমি উদাহরণটি সংশোধন করেছি।
এক্স টিয়ান

11

আপনাকে যা করতে হবে তা হল দুটি টার্মিনাল খোলা। প্রথম টার্মিনালে আপনি catডিভাইস থেকে সমস্ত কিছু যেমন

cat /dev/ttyS0

অন্যান্য টার্মিনালে, আপনি নির্বিচারে হেক্স্স অক্ষর এবং টার্মিনালটিতে পাঠ্যটি যেমন পাঠাতে পারেন:

echo -e "\x7E\x03\xD0\xAF und normaler Text" > /dev/ttyS0

echo -eকমান্ড ব্যাকস্ল্যাশ বেরিয়ে ব্যাখ্যার দেয়।

অবশ্যই অবশ্যই তা নিশ্চিত করতে হবে যে (i) সিরিয়াল সেটিংস (গতি, শব্দের দৈর্ঘ্য, প্রবাহ ctrl ইত্যাদি) সঠিক এবং (ii) সিরিয়াল ডিভাইস (অন্য প্রান্তে) অবরুদ্ধ নয়।


আমি উপরে আমার উত্তর লেখার 10 মিনিটের পরে আপনি এই উত্তরটি দিয়েছেন এবং আপনি কোনও তথ্য আর যোগ করেননি!
এক্স টিয়ান

ওহ দুঃখিত, আমি আপনার উত্তর পুরোপুরি পড়িনি। আমি দেখেছি যে আমার উত্তরটি আপনার মধ্যে অন্তর্ভুক্ত রয়েছে, সুতরাং আমি আপনার উত্তরটিকে সঠিক হিসাবে গ্রহণ করব, আপনি যেমন বর্ণনা করেছেন ঠিক তেমনই আপনি বর্ণনা করেছেন।
অ্যালেক্স

আমি সিওএম বন্দর সম্পর্কে খুব বেশি জানি না। আপনি কি দয়া করে ব্যাখ্যা করতে পারবেন "সিরিয়াল ডিভাইস (অন্য প্রান্তে)" ব্লক করছে না "এর অর্থ কী? ফায়ারওয়াল নিয়ে কিছু ইস্যু?
সোপালাজো ডি অ্যারিরেজ

9

প্রোগ্রামগুলি যা সিরিয়াল ডিভাইসে কথা বলে:

picocom
minicom
socat

বা শেল থেকে আপনি এটি করতে পারেন:

stty -speed 19200 < /dev/ttyS0 # sets the speed of the port
exec 99<>/dev/ttyS0 (or /dev/ttyUSB0...etc)
printf "AT\r" >&99
read answer <&99  # this reads just a CR
read answer <&99  # this reads the answer OK
exec 99>&-

আপনার একটি দুর্দান্ত উত্তর যা আমাকে দ্বিদ্বায়ী ফাইল বর্ণনাকারী সম্পর্কে শিখিয়েছে। তবে, আপনি কি বর্ণনাকারীটি বন্ধ করার জন্য শেষ লাইন বাক্য গঠনটি ঠিক বলেছেন? আমি সিনট্যাক্স ত্রুটি পেয়েছি। আমি হয় মনে exec 99<&-বা exec 99>&-ব্যবহার করা উচিত। নাকি সম্ভবত দুটোই?
ইয়াঙ্কি

1
টাইপো .. আপনি ঠিক বলেছেন
জিব্রি

7

এটি আরও ভাল পদ্ধতির হতে পারে:

stty -F /dev/ttyUSB0 115200 raw -echo   #CONFIGURE SERIAL PORT
exec 3</dev/ttyUSB0                     #REDIRECT SERIAL OUTPUT TO FD 3
  cat <&3 > /tmp/ttyDump.dat &          #REDIRECT SERIAL OUTPUT TO FILE
  PID=$!                                #SAVE PID TO KILL CAT
    echo "R" > /dev/ttyUSB0             #SEND COMMAND STRING TO SERIAL PORT
    sleep 0.2s                          #WAIT FOR RESPONSE
  kill $PID                             #KILL CAT PROCESS
  wait $PID 2>/dev/null                 #SUPRESS "Terminated" output

exec 3<&-                               #FREE FD 3
cat /tmp/ttyDump.dat                    #DUMP CAPTURED DATA

এটি খুব ভাল কারণ এটি প্রক্রিয়াটি স্বয়ংক্রিয় করে তোলে! আমি কেবলমাত্র পরিবর্তন করব যা পুরোপুরি alচ্ছিক, প্রাপ্ত সামগ্রীগুলি প্রেরণের মতো একই তা নিশ্চিত করা - এটি কেবল একটি গণনা বা সম্পূর্ণ ভিন্ন হতে পারে confirm
হাইডিফললাইফ

4

আপনি একইভাবে কোনও ডিভাইসে পড়তে এবং লিখতে পারেন:

cat /dev/cu.usbmodem411 & cat > /dev/cu.usbmodem411

আপনার বার্তাটি দ্বিতীয় catথেকে প্রেরণ করা হয় stdin, এবং প্রথমটি আপনার টার্মিনালটিকে একটি চ্যাটরুমে পরিণত catকরে stdout, প্রতিক্রিয়াটির সাথে সম্পর্কিত করে ।

শেষ করতে, তারপরে আবার ctrl-cচালান ।fgctrl-c

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.