سلام
این جلسه تصمیم دارم در مورد SoftwareSerial باهاتون صحبت کنم .
اول برید از اینجا بخونید که ارتباط TTL چیه .
قدم بعد بیاین در مورد یه اشتباهی که به احتمال زیاد تا حالا هممون تو کار با آردوینو انجام دادیم حرف بزنیم .
******************************************************
اگه تا حالا با ماژول های GPS کار کرده باشید می دونید که پروتکل ارتباطی این دسته از سنسورها TTL هست. بنابراین باید اونا رو به پورت سریال آردوینو که همون پینهای دیجیتال 0 و 1 هست وصل کنید.
پین شماره 0 دیجیتال آردوینو پین RX و پین شماره 1 دیجیتال آردوینو پین TX هست . RX یعنی پین دریافت و TX یعنی پین ارسال . اگر قرار باشه داده ای از آردوینو ارسال بشه روی پین TX فرستاده میشه و اگر قرار باشه داده ای توسط آردوینو دریافت بشه (از یه دیوایس دارای ارتباط سریال دیگه ) روی پین RX دریافت میشه . این قانون توی تمام ماژول هایی که پروتکل ارتباطیشون سریال TTL هست وجود داره.
حالا وقتی قراره این آردوینو از طریق ارتباط سریال به یه ماژول دیگه که ارتباط اونم سریال هست وصل بشه باید پین 0 دیجیتال آردوینو (همون RX )به پین ارسال یعنی TX اون ماژول وصل بشه و پین دیجیتال شماره 1 آردوینو (یعنی همون TX ) به پین دریافت یعنی RX اون ماژول وصل بشه . اصطلاحا میگن در ارتباط سریال قطعات به صورت ضربه دری وصل میشن . TX به RX و RX به TX .
تو عکس بالا علاوه بر نشون دادن ضربه دری بودن ارتباط TTL به یه نکته خیلی مهم هم اشاره شده . اگه قرار باشه دو تا ماژول از طریق ارتباط سریال با هم ارتباط برقرار کنن علاوه بر رعایت اتصالات TX و RX باید زمین مشترک رو هم حتما حتما حتما رعایت کنین. علتش رو تو جلسه قبل گفتم می تونید برگردید و مطالعه کنید .
*****************************************************
خب حالا فرض کنید یه ماژول GPS رو با رعایت نکات گفته شده به آردوینو وصل کردیم یعنی این شکلی :
کد آردوینوشم کامپایل کردیم و حالا می خوایم آپلودش کنیم تو برد . هر چی می زنیم که آپلود شه ارور میده ! خب برمی گردیم تنظیمات نرم افزار رو چک می کنیم . برد رو درست انتخاب کردیم، شماره پورت کام رو هم درست انتخاب کردیم ولی کد آپلود نمیشه! مشکل کجاست؟
مشکل اون دو تا پین دیجیتالی هستن که وصلشون کردیم به GPS . میگید نه سیم ها رو از پین دیجیتال شماره 0 و 1 آردوینو جدا کنید و دوباره آپلود کنید . دیدید ؟ کد راحت آپلود میشه . دوباره سیم ها رو وصل کنید به آردوینو و سعی کنید که کد رو آپلود کنید، بازم آپلود نمیشه .
می دونید علتش چیه ؟ علت اینه که مسیر آپلود کد از کامیوتر به پردازنده از این دو پین سریال (یعنی 0 و 1 ) میگذره . وقتی این دو پین آزادن مشکلی نداره و کد آپلود میشه ولی وقتی این دو پین به ماژولی دیگه ای وصل باشن مسیر ارتباط سریال بین کامپیوتر و پردازنده اشغاله و کد نمیتونه روی پردازنده آپلود بشه .
شاید بگید این چه مسخره بازیه ایه ! یعنی هر بار بخوام از یه دیوایس سریال استفاده کنم باید موقع آپلود کد توی آردوینو هی سیم ها رو بکنم و وصل کنم ؟
جواب منفیه دوستان . راه حل استفاده از SoftwareSerial هست . هر جا دیوایسی داشتید که ارتباطش سریال TTL بود نیازی نیست حتما و فقط از پین های 0 و 1 آردوینو استفاده کنید . بلکه بسته به این که از کدوم برد آردوینو استفاده می کنید می تونید از پین های دیگه ای هم استفاده کنید. در مورد آردوینو UNO که بیس آموزش های ماست از هر پین دیجیتالی می تونید استفاده کنید . مثلا 2و 3 یا 5 و6 یا 10 و 11 و …. .
*****************************************************
حالا یه سوال فنی بوجود میاد :
این SoftwareSerial که من هی اسمشو میارم چیه اصن ؟
SoftwareSerial یه کتابخونه هست که ما به کمکش ارتباط سریالمون رو برقرار می کنیم. برای داشتن این کتابخونه نیازی نیست از هیچ جا دانلودش کنید چون کتابخونه پیش فرض آردوینو هست. باور نمی کنید ؟ مسیری که میگم رو پیش برید تا چشمتون به دیدارش روشن بشه :
FILE > Exapmles < SoftwareSerial
اینم عکسش :
روی همون مثالی که مشخص شده کلیک کنید تا باز بشه ، وقتی باز بشه با کد زیر رو به رو میشید ( من یه سری کامنتاشو حذف کردم تا کد خلوت تر بشه ) :
و اما معرفی قسمت های مختلف کد :
قسمت 1 : توی این قسمت خط اول کتابخونه SoftwareSerial رو معرفی می کنه . خط دوم که فوق العاده خط مهمیه دوتا کار رو انجام میده :
اول : معرفی اسم ارتباط سریال . توی کدی که دیفالت نرم افزار هست اسم ارتباط سریال جدید رو گذاشته mySerial .شما هر اسمی مثل GPS ، مثل NEWSerial یا هر اسم دیگه ای که دوست دارید ( در صورتی که از اسم های خاص نرم افزار نباشه ) رو می تونید استفاده کنید.
دوم : میاد شماره پینهایی رو که داره به جای سریال استفاده می کنه معرفی می کنه . اینجا از پین 10 و 11 استفاده کرده . در مورد آردوینو UNO به جای این دو تا پین هر دو پین دیجیتال دیگه ای میشه گذاشت . دقت کنید پینی رو که اول می نویسید در نقش RX ظاهر میشه و پین دوم در نقش TX . یعنی الان باید پین TX ماژول GPS به پین 10 آردوینو و پین RX ماژول GPS به پین 11 آردوینو وصل بشه .
قسمت 2 : اینجا Baud Rate ارتباط سریال اصلی کانفیگ میشه . ارتباط سریالی که دقیقا با نام Serial استفاده میشه اون ارتباط سریال بین کامپیوتر و آردوینو هست که ما در نهایت خروجیش رو تو کنسول آردوینو می بینیم .
این while که نوشته عملا فقط صبر می کنه تا ارتباط سریال بین کامپیوتر و اردوینو برقرار بشه که طبق کامندی که خودش نوشته فقط واسه آردوینو لئوناردو نوشتنش لازمه میتونید برش دارید.
بعدش هم که نوشته (” Serial.println(“Goodnight moon فقط برای تست اینه که ارتباط سریال بین کامپیوتر و آردوینو برقرار شده یا نه . دقت کنید چون نوشته Serial.println مربوط به سریال اصلی آردوینو هست و خروجیش تو کنسول آدوینو قابل دیدنه .
قسمت 3 : این قسمت اون سریال نرم افزاری که به صورت دیفالت اسمش رو گذاشته mySerial ( و قرار شد هر چی دوست داشتیم بزاریم ) کانفیگ می کنه . دقت کنید نوشته mySerial.begin این یعنی داره روی سریال نرم افزاری کار می کنه . اگر اسمش رو اول گذاشته بودیم GPS باید می نوشتیم GPS.begin .
قسمت 4 : این قسمت که توی تابع LOOP نوشته شده کد جالبیه .
if اول رو براتون ترجمه می کنم :
اگر داده از از سمت GPS واسه آردوینو فرستاده شده بود اون داده رو دریافت کن و تو کنسول سریال نمایش بده .
با دستور mySerial.available چک میشه که داده ای از GPS فرستاده شده یا نه .
با دستور mySerial.read اون داده دریافت میشه
با دستور Serial.write اون داده تو کنسول سریال آردوینو نمایش داده میشه .
ترجمه if دوم :
اگر داده از از سمت آردوینو واسه GPS فرستاده شده بود اون داده رو دریافت کن وبفرست واسه GPS .
با دستور Serial.available چک میشه که داده ای از آردوینو فرستاده شده یا نه .
با دستور Serial.read اون داده دریافت میشه
با دستور mySerial.write اون داده واسه GPS فرستاده میشه .
در صورتی که شماره پینها 11 (به عنوان RX ) و 10 (به عنوان TX ) باشه سیم بندی مطابق عکس زیر می شه :
*****************************************************
خب من تو این جلسه صرفا قصد داشتم این کتابخونه رو بهتون معرفی کنم و بس .
این که چجوری با استفاده از این کتابخونه کد بزنیم رو تو جلسه بعد که ارسال AT Command هست یاد میدم
پایان جلسه