TtyUSB0 এ ডিটিআর অক্ষম করুন


11

আমি পাই থেকে আরডুইনো-ক্লোন বোর্ডে সংযোগ করছি। সমস্যাটি হচ্ছে, আরডুইনোকে সংযোগটি পুনরায় সেট করা থেকে আটকাতে আমার ডিটিআর লাইনটি অক্ষম করতে হবে।

আমি পড়েছি যে আরপিআইতে ডিটিআর, ডিসিডি এবং অন্যান্য লাইনগুলি নিয়ন্ত্রণ করা সম্ভব নয়। এটি কি বিশ্বব্যাপী আরপির পক্ষে সত্য বা কেবল জিপিআইও পিনের জন্য সিরিয়াল যোগাযোগের জন্য ব্যবহৃত হয়?

যদি ইউএসবি পোর্টে ডিটিআর অক্ষম করা সম্ভব হয় তবে আপনি কীভাবে এটি সম্পাদন করবেন?

উত্তর:


6

ইউএসবি সিরিয়াল কনভার্টারের বৈশিষ্ট্যগুলির হোস্টিং সিস্টেমের হার্ডওয়্যারের সাথে কোনও সম্পর্ক নেই , তবে কেবল ইউএসবি সিরিয়াল চিপ নিজেই এবং হোস্টিং সিস্টেমের সফ্টওয়্যার স্ট্যাকের সাথে।

পাই স্টক লিনাক্স ইউএসবি সিরিয়াল ড্রাইভার ব্যবহার করা উচিত।

অতএব, আপনি hupclআরডুইনো সাইট এবং অন্য কোথাও নথিবদ্ধ হিসাবে সেটিংসটি সাফ করার সাধারণ লিনাক্স পদ্ধতির মাধ্যমে পোর্ট ওপেন / ক্লোজ করতে ডিটিআর সংযোগ সক্ষম / অক্ষম করতে পারবেন :

stty -F /dev/ttyUSB0 -hupcl

অথবা ডিভাইস ফাইলটি আসলে আপনার ইউএসবি সিরিয়াল পোর্টের সাথে সামঞ্জস্যপূর্ণ যেকোনো কিছু দিয়ে / dev / ttyUSB0 প্রতিস্থাপন করা (উদাহরণস্বরূপ, প্রথম ইউনো সংযুক্ত সম্ভবত সম্ভবত / dev / ttyACM0 হবে)

এমনকি পিআই-এর নিজস্ব নেটিভ সিরিয়াল বন্দর সম্পর্কিত, ডিটিআর এর আচরণটি শেষ পর্যন্ত সফ্টওয়্যার নিয়ন্ত্রণের অধীনে রয়েছে - যে কেউ অন্যথায় যুক্তি দেয় সে সত্যটি উপেক্ষা করে যে এটি কেবল লিনাক্স ড্রাইভার, এবং হার্ডওয়্যার নয়, যার বন্দর সম্পর্কে কোনও জ্ঞান রয়েছে খোলা বা বন্ধ প্রকৃত পোর্ট হার্ডওয়্যার কেবল এটিই বলতে পারে যে এটি পড়ে বা লিখিত হয়েছে বা পুনরায় কনফিগার করা হয়েছে, যার মধ্যে কোনওটিই আসলে সিরিয়াল ডিভাইস খোলার সমার্থক নয়।


হোস্টিং পাই পুনরায় চালু না হওয়া পর্যন্ত এটি কি কেবল কাজ করবে?
ব্যবহারকারী 2395126

6

@ ক্রিসট্রেটটন পোস্টstty -F /dev/ttyUSB0 হ্যাঙ্গআপ এড়াতে কীভাবে ব্যবহার করতে হয় তার পুনর্নির্মাণের ফলাফল বর্ণনা করে । পাইথনে এটি করার জন্য এখানে একটি স্নিপেট রয়েছে:

import termios

path = '/dev/ttyACM0'

# Disable reset after hangup
with open(path) as f:
    attrs = termios.tcgetattr(f)
    attrs[2] = attrs[2] & ~termios.HUPCL
    termios.tcsetattr(f, termios.TCSAFLUSH, attrs)

ser = serial.Serial(path, 9600)
# etc.

নোট করুন যে ইউএসবি কেবলটি পুনরায় প্লাগ করার সময় সঠিক সংখ্যাটি হতে পারে, তাই আমি গ্লোববিং করে পথটি সনাক্ত করতে পারি:

try:
    path = glob.glob('/dev/ttyACM*')[0]
except IndexError:
    # retry, error out, etc.
    pass

আমি নিশ্চিত করেছি যে এটি উবুন্টুতে জেনেরিক x86_64 ল্যাপটপ এবং রাস্পবেরি পাই 2 এর উপর কাজ করে
সেরিন

termiosওভার ব্যবহার করার কি কোনও কারণ আছে , বলুন os.system("stty -F /dev/ttyUSB0 -hupcl")? এছাড়াও, বিটিডব্লু, আমি লক্ষ্য করেছি যে হোস্ট সিস্টেমটি চালিত হওয়ার পরে আপনি এটির সাথে প্রথম বার সংযোগ করার পরে আরডুইনোকে পুনরায় সেট করা আটকাবে না; এটি পরবর্তী সংযোগগুলিতে পুনরায় সেট করা থেকে এটি প্রতিরোধ করে। কোন কিছুর চেয়ে ভাল। তবে আমি ইচ্ছা করি ডিটিআর টগল করা থেকে কীভাবে এটি থামাতে পারি figure
জেসন সি

2
@ জেসনসি ব্যবহার termiosএকটি বহিরাগত প্রোগ্রামে ( stty) কলতা / এক্সিকিউটিভ (কল) সংরক্ষণ করে । ডিটিআর জিনিসটি সম্পর্কে কী করা উচিত তা নিশ্চিত নয়, আমি মনে করি আমি এই "বৈশিষ্ট্যটি" স্বীকার করেছি এবং পাইটিতে আড়াদিনো এবং অ্যাপ্লিকেশন সিঙ্ক হয়েছে কিনা তা সনাক্ত করার জন্য আমি কিছু যুক্তি (লেখার / পড়া দ্বারা কাস্টম হ্যান্ডশেক) যুক্ত করেছি।
লেকেনস্টেইন

আমার চূড়ান্ত সমাধানটি ছিল স্টি কমান্ডটি যুক্ত করা যখন পাই বুট হয়, তারপরে বন্দরে প্রতিধ্বনি পরে সেই প্রথম পুনরায় সেট করতে বাধ্য করা হয় এবং আরডুইনো রিসেটের জন্য অপেক্ষা করতে 3 সেকেন্ড বিলম্ব হয়। তারপরে আর এর পরে আর এ নিয়ে আমাকে ভাবতে হবে না বা পাইথন স্ক্রিপ্টগুলিতে এটি নিয়ে চিন্তা করতে হবে। আমি rc.local এ করেছি কিন্তু যেখানেই। ব্যয় +3 দ্বিতীয় পাই বুট সময়।
জেসন সি

3

আপনি এর মধ্যে একটি 120Ohm (বা 120Ohm তৈরির জন্য সংমিশ্রণ) যুক্ত করতে পারেন RESETএবং 5Vএটি পুরোপুরি পুনরায় সেটাকে আটকাবে । এটি সর্বনিম্ন আক্রমণাত্মক কারণ অন্যান্য সমাধানগুলির জন্য হয় বোর্ড থেকে একটি প্রতিরোধক বা ক্যাপাসিটর অপসারণ করা প্রয়োজন, এটি আপলোডগুলিকে জটিল করে তোলে। আপনি যদি প্রোগ্রামিং করেন তবে রেজিস্টার রাখবেন না। এটা মুছুন.

এখানে চিত্র বর্ণনা লিখুন

লিওনার্দো বোর্ডগুলি DTRট্রিগার হওয়া সত্ত্বেও পুনরায় সেট করে না তবে সমস্যাটি তখনই শুরু হয় যখন আপনাকে এটি দূরবর্তীভাবে পুনরায় সেট করতে হবে কারণ কখনও কখনও এটি রাস্পবেরির সাথে সংযোগ হারিয়ে ফেলে এবং আপনাকে এটি শারীরিকভাবে পুনরায় সেট করতে হবে।


3
আমি নিশ্চিত নই যে এটি ডাউনটা পাওয়ার যোগ্য। এটি এটি করতে সফল হয় এবং এটি সফ্টওয়্যার ভিত্তিক নয়, তবে কিছু গবেষণার পরে দেখা যায় এটি চলমান হার্ডওয়্যার সমাধান হিসাবে চলেছে।
জেসন সি

0

আপনি যদি সেরিয়া এবং পাইসারিয়াল লাইব্রেরি ব্যবহার করেন তবে আপনি ব্যবহার করতে পারেন:

সার্ = সিরিয়াল.আরশিয়াল ('/ dev / ttyACM0', 9600, dsrdtr = সত্য)


-1

আপনি পাইসারিয়াল ব্যবহার করতে পারেন। পাইথন কোডে এখানে একটি উদাহরণ রয়েছে:

port =serial.Serial(
    "/dev/ttyUSB0",
    baudrate=57600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    dsrdtr = False
    )

আরও বিকল্পের জন্য পরীক্ষা করুন পাইসিরিয়াল check


1
এটি গ্রন্থাগারের সমস্যা নয়। আমি অ্যাল্রেডজ 4 টি বিভিন্ন লিব চেষ্টা করেছি, সর্বদা একই ফলাফল - ডিটিআর কমান্ড উপেক্ষা করা হয়।
jnovacho

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

1
এটি কাজ করে না। লিনাক্সে, এটি এখনও আরডুইনোগুলিকে পুনরায় সেট করার কারণ করে।
সেরিন

1
এটি পাই এবং আরডুইনো যা আছে তার কোনও সংস্করণে এটি কাজ করে না তা নিশ্চিত করতে পারি (আমি জানি না, দুঃখিত, আমি এই বিষয়গুলির কিছুই জানি না, আমি জানতে চাই না, আমাকে কিছু কোড ডিবাগ করার জন্য একটি সিস্টেম দেওয়া হয়েছিল অন, হি।) এছাড়াও, এটি সম্পর্কিত কিনা তা নিশ্চিত নন, তবে stty -F /dev/ttyUSB0 -cdtrdsrরিপোর্ট করেছেন invalid argument: -cdtrdsr
জেসন সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.