در قسمت قبلی این آموزش، یک قفلکنندهی RFID مبتنی بر آردوینو ساختیم که در آن میتوانستیم قفل یک در را با استفاده از RFID تگ و یا کی پد باز کنیم. در این قسمت میخواهیم با افزودن یک ویژگی جدید به پروژه، پروسهی باز کردن قفل را حتی از این هم سادهتر کنیم، باز کردن از طریق گوشی هوشمند. امروزه کنترل اشیا از طریق گوشیهای همراه کار بسیار راحت و در دسترسی محسوب میشود. مخصوصا اینکه امکان کنترل اشیا مختلف همگی در یک جا که گوشی شما باشد، جمع شده و به راحتی قابل استفاده میباشد. اما برای اینکه چنین قابلیتی را به سیستم خود اضافه کنیم باید چه کاری انجام دهیم؟ کافیست یک ماژول بلوتوث را به مدار طراحی شدهی موجود اضافه کنیم و همچنین از یک قفل الکتریکی استفاده کنیم.
قطعات سختافزاری مورد نیاز
- ماژول بلوتوث HC-05
- قفل الکتریکی ABK-704L
- بورد Arduino Nano
- RFID RC522
- بازر پیزو الکتریک
- دو عدد LED
- دو عدد مقاومت ۳۳۰ اهم
- کی پد ۴×۴
- آداپتور I2C برای LCD
- LCD 16×2 BL
نرمافزارهای مورد نیاز
- MIT App Inventor 2
- Arduino IDE
- دسترسی به صفحهی گیت هاب پروژه (Github)
- اگر قبلا از گیتهاب پروژه دانلود نکردین پیشنهاد میکنم آموزش گیتهاب را مطالعه کنید.
قدم اول: وصل کردن ماژول بلوتوث
ابتدا بد نیست که آشنایی مختصری با ماژول HC-05 داشته باشیم.
این ماژول دو مود عملکرد دارد:
- Command Mode: در این مود با AT commandها با ماژول ارتباط برقرار میکنیم.
- Data Mode: در این مود ماژول میتواند به تبادل داده با ماژولهای بلوتوث دیگر بپردازد. مود پیشفرض ماژول HC-05 همین مود میباشد و تنظیمات اولیه آن به شرح زیر میباشند.
- بادریت: 9600 bps، عرض داده: ۸ بیت، stop bit: یک بیت، parity: ندارد.
- پسورد: ۱۲۳۴
- نام دستگاه: HC-05
در این پروژه ما از DATA mode استفاده میکنیم چون تنها کاری که قرار است انجام دهیم این است که از طریق ارتباط سریال، دادههایی را با موبایل به ماژول ارسال کنیم.
برای کسب اطلاعات بیشتر در مورد ارتباط سریال، میتوانید به آموزشهای قبلی که در مورد ارتباط سریال در بوردهای آردوینو داشتیم مراجعه کنید.
پایههای ماژول بلوتوث
پینهایی که ما برای این پروژه نیاز داریم و استفاده میکنیم در زیر آورده شده است.
- پین VCC: تغذیه ۵ ولتی.
- پین GND: به زمین مدار یا آردوینو متصل میشود.
- پین TX: دادههای سریال را از ماژول HC-05 به پین دریافت سریال بورد آردوینو انتقال میدهد.
- پین RX: برای دریافت دادههای ارتباط سریال از پین ارسال دادهی بورد آردوینو.
اتصال بین HC-05 و بورد Arduino Nano
نمایی از متصل شدن آردوینو و ماژول بلوتوث در مدار واقعی
کد پروژه
همان طور که گفتیم، ماژول بولوتوث HC-05 با ارتباط سریال کار میکند. بنابراین برای پینهای TX و RX آن به راحتی میتوانیم از دستور «;(()Serial.write(Serial.read» استفاده کنیم. اگر از ماژول بلوتوث دیگری استفاده شود که نوع ارتباط آن متفاوت باشد، باید از دستورات ارتباط Arduino IDE برای آن استفاده کنیم.
void setup(){ Serial.begin(9600); Serial.println("What did you say?:"); } void loop(){ if (Serial.available()) Serial.write(Serial.read()); }
ابتدا باید در Device Manager، پورت مربوط به پروگرم کردن بورد آردوینو را پیدا کنید. زمانی که ماژول بلوتوث را وصل میکنید، «Standard serial over Bluetooth link» ظاهر خواهد شد که باید در آن «USB-SERIAL» را انتخاب کنید تا بتوانید بورد آردوینو را پروگرم کنید. دقت داشته باشید که برای آپلود کردن برنامه هم، نمیتوانید از ارتباط وایرلس و بلوتوثی ماژول متصل به آردوینو استفاده کنید. بلکه باید این کار را به وسیلهی یک کابل سریال انجام دهید.
حال اگر پینهای RX و TX را وصل کنید، احتمالا با تعداد زیادی خطا مانند تصویر زیر مواجه خواهید شد.
برای رفع این خطاها، باید پین TX ماژول بلوتوث را که به بورد آردوینو وصل کردهاید، در حین پروگرم کردن بورد از آن جدا کنید. پین TX ماژول بلوتوث در حقیقت دارای یک امپدانس کوچک (LOW) و پین RX بورد آردوینو که TX بلوتوث به آن متصل است، دارای یک امپدانس بالا (HIGH) است. امپدانس معادل این دو، یک امپدانس LOW خواهد بود و در نتیجه ورودی RX بایپس میشود (یعنی جریان تولید شده در پورت USB، به جای آنکه وارد بورد آردوینو شود، در مسیر خروجی ماژول بلوتوث جریان پیدا میکند) به همین دلیل داده به مقصد درست خود نمیرسد. علاوه بر این، جریانی که در این حالت به سمت خروجی ماژول بلوتوث میرود، موجب خطا در اتصال میان ماژول و بورد شده و خطاهای الکتریکی نیز ایجاد میشود. (دقت داشته باشید که کاری که میخواهیم در اینجا انجام دهیم این است که بورد آردوینو را پروگرم کنیم، نه اینکه به ماژول بلوتوث چیزی ارسال کنیم)
با این توضیحات، اگر پین TX بلوتوث را قطع کنید، خواهید دید که همه چیز به درستی پیش رفته و برنامه بر روی بورد آپلود میشود.
خطا الکتریکی که در زمان متصل بودن پین TX بلوتوث و اقدام به پروگرم کردن بورد رخ میدهند.
اتصالات درست بین ماژول بلوتوث و بورد آردوینو در زمان پروگرم کردن بورد
پس از بارگذاری شدن کد بر روی بورد آردوینو، نوبت به وصل کردن ماژول بلوتوث به کامپیوتر میرسد. کاری که باید بکنید این است که پین TX ماژول بلوتوث را دوباره متصل کنید. چرا که از این لحظه به بعد ارتباط آن یک ارتباط وایرلس است و نقش کابل سریال تنها به عنوان تامینکنندهی تغذیهی ماژول است.
برای متصل کردن ماژول بلوتوث به کامپیوتر (ویندوز ۱۰) مراحل زیر را انجام دهید.
- Setting را باز کنید.
- بر روی Devices بزنید.
- بلوتوث را انتخاب کنید.
- آن را روشن کنید.
- HC-05 را پیدا کنید و روی PAIR بزنید.
- پسورد را ۱۲۳۴ وارد کنید.
وصل کردن ماژول بلوتوث به ویندوز ۱۰
پس از انجام مراحل بالا، ارتباط بین آنها برقرار میشود و شما میتوانید آن را تست کنید. برای این کار یک روش ساده وجود دارد، در Arduino IDE یک کلمه تایپ کنید و ببینید که آیا همان را برمیگرداند یا خیر. اگر برگرداند به معنای این است که ارتباط ماژول بلوتوث و کامپیوتر به خوبی برقرار شده است. در غیر این صورت به مرحلهی قبل برگردید و دوباره تلاش کنید که آنها را متصل کنید.
از آنجا که بیش از این از ارتباط serial استفاده نمیکنید، باید پورت COM ماژول بلوتوث را پیدا کنید. پس به Device Manager بروید و در بخش پورتها، Bluetooth deviceها را جستجو کنید. در اینجا برای ما COM بر روی PORT17 است.
حالا باید به Arduino IDE برویم و پورت COM را در آنجا نیز به همین پورتی که در Device Manager دیدیم تغییر دهیم. به این منظور به این مسیر زیر بروید.
TOOLS → PORT → COM 17
تنظیم COM در IDE
پس از انتخاب COM درست، میتوانید ماژول را تست کنید که آیا درست کار میکند یا خیر.
ابتدا اطمینان حاصل کنید که این دو مورد در سریال مانیتور انتخاب شده باشند.
- هر دوی NL & CR
- بادریت ۹۶۰۰
به عنوان نمونه، ما کلمهی Hello را تایپ میکنیم.
در خروجی هم باید همان پیغام را ببینیم.
قدم دوم: سیستم بازکنندهی قفل
اجازه دهید به جلسهی اول این آموزش برگردیم. مداری که در اینجا استفاده میکنیم دقیقا همان مدار است که باید ماژول بلوتوث را به آن اضافه کنیم. همان طور که گفتیم، این ماژول را برای تبادل داده با گوشی هوشمند به سیستم اضافه میکنیم.
توجه داشته باشید که در اینجا هم باید پین TX بلوتوث را قطع کنید وگرنه دقیقا همان خطاهای مرحلهی قبلی را در اینجا نیز خواهید داشت.
برای باز کردن قفل در، سه راه وجود دارد.
- پسورد قفل را از طریق کی پد وارد کنیم.
- تگ مخصوص را به ماژول RFID نزدیک کنیم.
- پسورد را از طریق گوشی هوشمند وارد کنیم.
دیاگرام اتصال تمام قطعات مدار
مصرف جریان قفل تقریبا بالا محسوب میشود (۸۰۰ میلیآمپر). یک LED سبز رنگ به مدار اضافه میکنیم که ببینیم آیا قفل کار میکند یا خیر. اگر کد «#123456*» را وارد کنیم، قفل باز شده و LED روشن خواهد شد.
اتصال بین قطعات
در قدم بعدی باید باتری و رله را اضافه کنیم. برای تامین تغذیهی در، از دو باتری ۹ ولتی استفاده میکنیم. یک راه دیگر هم که وجود دارد، که سیستم را در یک نقطهی ثابت فیکس کنید و یک مبدل ۲۲۰ ولت به ۵ ولت هم تهیه کنید که به وسیلهی آن تغذیه را از برق شهری تامین کنید.
همان طور که گفتیم، مصرف جریان قفل زیاد است پس باید باتریها را در حالت موازی استفاده کنیم. تغذیه بورد آردوینو هم باید از همین باتریها تامین شود و به همین دلیل، از یک ماژول کاهندهی ولتاژ DC به DC که ۹ ولت را به ۵ ولت کاهش دهد نیز استفاده میکنیم. ولتاژ به پین Vin بورد آردوینو وصل میشود و دیگر نیازی به تامین تغذیه از طریق پورت USB کامپیوتر نداریم.
خروجی ماژول کاهنده ولتاژ را باید خودمان بر روی ۵ ولت تنظیم کنیم. برای این کار به یک مولتیمتر نیاز داریم. ورودی ۹ ولتی را به ماژول میدهیم و مولتیمتر را روی خروجی نگه میداریم. سپس پتانسیومتری که روی ماژول قرار دارد را آنقدر میچرخانیم تا خروجی روی ۵ ولت ثابت شود.
ماژول کاهنده ولتاژ DC به DC (MP1584EN)
اندازهگیری باتریها
نمودار اتصالات مدار در مرحلهی نهایی
نمای نهایی مدار
کد کامل پروژه
#include <EEPROM.h> #include <SPI.h> #include <MFRC522.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> int state_bt=1; int relPin; int stare=0; byte COD[10]; byte AUX[10]; int k=0; String codacces="*123456#"; String codpairing="*654321#"; //nfc #define RST_PIN 9 // Configurable, see typical pin layout above #define SS_PIN 10 // Configurable, see typical pin layout above MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance #define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF} MFRC522::MIFARE_Key key; //lcd LiquidCrystal_I2C lcd(0x27,16,2); //TASTATURA const byte numRows= 4; //number of rows on the keypad const byte numCols= 4; //number of columns on the keypad //keymap defines the key pressed according to the row and columns just as appears on the keypad char keymap[numRows][numCols]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; //Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {2,3,4,5}; //Rows 0 to 3 byte colPins[numCols]= {A0,7,8,9}; //Columns 0 to 3 //initializes an instance of the Keypad class Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); void setup() { pinMode(A0,OUTPUT); digitalWrite(A0,HIGH); pinMode(A3,OUTPUT); digitalWrite(A3,HIGH); pinMode(A1,OUTPUT); digitalWrite(A1,HIGH); pinMode(A2,OUTPUT); digitalWrite(A2,LOW); pinMode(6,OUTPUT); digitalWrite(6,HIGH); //nfc Serial.begin(9600); // Initialize serial communications with the PC Serial.println("What did you say?:"); while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card for (byte i = 0; i < 6; i++) { key.keyByte[i] = 0xFF; } lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.clear(); lcd.print("BLOCKED"); } void citireNFC(){ for (byte i =0; i<(mfrc522.uid.size); i++) { COD[i]=mfrc522.uid.uidByte[i]; } Serial.print("COD"); Serial.print(COD[0]); Serial.print(COD[1]); Serial.print(COD[2]); Serial.print(COD[3]); } void pairNFC(){ Serial.println("COD in pair"); Serial.print(COD[0]); Serial.print(COD[1]); Serial.print(COD[2]); Serial.print(COD[3]); long r=0; int c=0; for(int i=1;i<=EEPROM.read(0);i++){ switch(i%4){ case 1 :{AUX[0]=EEPROM.read(i); break;} case 2 :{AUX[1]=EEPROM.read(i); break;} case 3 :{AUX[2]=EEPROM.read(i); break;} case 0 :{AUX[3]=EEPROM.read(i); break;} } if((i)%4==0) {Serial.println(r); if( AUX[0]==COD[0] && AUX[1]==COD[1] && AUX[2]==COD[2] && AUX[3]==COD[3] ){ lcd.clear(); lcd.setCursor(0,0); lcd.print("CODE ALREADY IN"); lcd.setCursor(0,1); lcd.print("SYSTEM"); delay(2000); c=1; break;} } } if(c==0){int ttt=EEPROM.read(0); Serial.println("CODE PAIRED"); Serial.print(COD[0]); Serial.print(COD[1]); Serial.print(COD[2]); Serial.print(COD[3]); EEPROM.write(ttt+1,COD[0]); EEPROM.write(ttt+2,COD[1]); EEPROM.write(ttt+3,COD[2]); EEPROM.write(ttt+4,COD[3]); ttt=ttt+4; Serial.println("ttt"); Serial.println(ttt); EEPROM.write(0,0); EEPROM.write(0,ttt); lcd.clear(); lcd.setCursor(0,0); lcd.print("CODE PAIRED"); delay(2000);} } boolean validareNFC(){ boolean c=false; for(int i=1;i<=EEPROM.read(0);i++){ switch(i%4){ case 1 :{AUX[0]=EEPROM.read(i); break;} case 2 :{AUX[1]=EEPROM.read(i); break;} case 3 :{AUX[2]=EEPROM.read(i); break;} case 0 :{AUX[3]=EEPROM.read(i); break;} } if((i)%4==0) { if( AUX[0]==COD[0] && AUX[1]==COD[1] && AUX[2]==COD[2] && AUX[3]==COD[3]) c=true; }} return c; } int comparareCOD(String a) { if(a.equals(codacces)) return 1; else if(a.equals(codpairing)) return 2; else return 0; } String iaCOD(char x) { char vec[10]; vec[0]=x; lcd.setCursor(0,0); lcd.clear(); lcd.print('X'); for(int i=1;i<8;i++) {vec[i]=myKeypad.waitForKey(); lcd.print('X');} vec[8]=NULL; String str(vec); return str; } void loop() { //Start BT autentification if(Serial.available()) { char c=Serial.read(); switch (state_bt) { case 1: if(c=='*') state_bt=2; else state_bt=1; break; case 2: if(c=='1') state_bt=3; else state_bt=1; break; case 3: if(c=='2') state_bt=4; else state_bt=1; break; case 4: if(c=='3') state_bt=5; else state_bt=1; break; case 5: if(c=='4') state_bt=6; else state_bt=1; break; case 6: if(c=='5') state_bt=7; else state_bt=1; break; case 7: if(c=='6') state_bt=8; else state_bt=1; break; case 8: if(c=='#') state_bt=9; else state_bt=1; break; case 9: lcd.init(); lcd.backlight(); lcd.print("OPEN"); digitalWrite(6,LOW); delay(5000); digitalWrite(6,HIGH); lcd.init(); lcd.backlight(); lcd.print("BLOCKED"); state_bt=1; break; default: break; } } switch(stare){ case 0: { mfrc522.PCD_Init(); if ( mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ){ citireNFC(); if(validareNFC()) {stare=1; lcd.clear(); lcd.setCursor(0,0); lcd.print("VALID NFC CODE"); delay(1000); return; } else{ lcd.clear(); lcd.setCursor(0,0); lcd.print("INVALID NFC CODE"); delay(1000); lcd.setCursor(0,0); lcd.clear(); lcd.print("BLOCKED"); return; } } char c=myKeypad.getKey(); if(c != NO_KEY){ String codcurent=iaCOD(c); int A=comparareCOD(codcurent); if(A==0) {lcd.clear(); lcd.print("INVALID CODE"); delay(2000); lcd.setCursor(0,0); lcd.clear(); lcd.print("BLOCKED"); return;} if(A==1) {lcd.setCursor(0,0); lcd.clear(); lcd.print("VALID CODE"); delay(2000); stare = 1; return;} if(A==2); {stare=2; lcd.clear(); lcd.setCursor(0,0); lcd.print("Pairing..."); delay(2000); return;} } break; } case 1:{ lcd.clear(); lcd.setCursor(0,0); lcd.print("UNLOCKED"); digitalWrite(A3,LOW); digitalWrite(A1,LOW); digitalWrite(A2,HIGH); //tone(6,3000,5010); digitalWrite(6,LOW); delay(5000); digitalWrite(6,HIGH); digitalWrite(A3,HIGH); digitalWrite(A1,HIGH); digitalWrite(A2,LOW); stare=0; lcd.setCursor(0,0); lcd.clear(); lcd.print("BLOCKED"); return; } case 2:{ mfrc522.PCD_Init(); if ( mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial() ){ citireNFC(); pairNFC(); stare=0; delay(2000); lcd.clear(); lcd.setCursor(0,0); lcd.print("BLOCKED"); } break; } } }
قدم سوم: اپلیکیشن
در این مرحله باید اپلیکیشن مورد نیاز برای سیستم بازکنندهی قفل را ایجاد کنیم. برای این کار از برنامهی MIT App Inventor 2 استفاده میکنیم. برنامهی سادهای که برای کار کردن با آن، اصلا نیازی به داشتن مهارتهای بالا در زمینهی برنامهنویسی اپلیکیشنها نیست. برای کار کردن با آن باید:
- آن را دانلود کنید. (میتوانید از این لینک استفاده کنید)
- با Google account خود وارد شوید.
- یک پروژهی جدید ایجاد کنید.
پس از اینکه آن را نصب کردید، یک اینترفیس گرافیکی مانند تصویر زیر خواهد داشت.
برنامهی MIT AppInventor
بسیار خب، حالا اپلیکیشن MIT AI2 را از طریق گوگل پلی بر روی گوشی خود دانلود و نصب کنید. این اپلیکیشن یک اپ رایگان برای سینک کردن اپلیکیشنهای تحت وب شما، با گوشی هوشمند شماست.
MIT AppInventor در گوگل پلی
برای اینکه بتوانید صفحهی اپلیکیشن را بر روی گوشی خود ببینید، به مسیر زیر بروید.
Connect → AI Companion
متصل کردن اپلیکیشن
بعد از اینکه بر روی آن کلیک کنید، اپلیکیشن دو روش عملکردی را به شما پیشنهاد میدهد.
- اسکن کردن بارکد (به این ترتیب که MIT AI2 Companion را بر روی دیوایس خود راهاندازی میکنید و سپس یا بارکد را اسکن میکنید و یا کد را تایپ میکنید تا اپلیکیشن را تست کنید)
- تایپ کردن یک کد ۶ حرفی در گوشی هوشمند.
به نظر میرسد که راه دوم راه سادهتری باشد. بله همان را انتخاب میکنیم و کد ۶ حرفی تولید شده در کامپیوتر را، در صفحهی اپلیکیشن در گوشی وارد میکنیم.
سینک کردن نسخه وب و نسخه گوشی
یک بار دیگر یادآوری میکنیم علت اینکه این اپلیکیشن را انتخاب کردهایم، این است که اولا کار کردن با آن بسیار ساده است و در ثانی نیاز به مهارتهای پیشرفتهی برنامهنویسی ندارد. اگر خودتان با آن کار کنید، حتما متوجه این سادگی و کاربردی بودن آن خواهید شد.
از رابط کاربری آن شروع کنیم.
رابط کاربری
اپلیکیشنی که برای باز کردن قفل در به صورت وایرلس داریم
شما میتوانید تمام المانهای اپلیکیشن نظیر دکمهها، عکسها، تکست باکسها، برچسبها و … را به صفحه اضافه کنید. در منوی سمت راست هم میتوانید انتخاب کنید که چه مشخصاتی را برای صفحه میخواهید. (مثلا اینکه نام اپلیکیشنها، عنوان گروهها، نحوه چینش آنها و موارد این چنینی چگونه باشند) حتی میتوانید در منوی «Background Image»، یک تصویر پشت زمینه هم برای صفحه انتخاب کنید. مثلا در اینجا ما اینطور تنظیم میکنیم که هرگاه ارتباط بلوتوثی تلفن روشن بود، پشت زمینه به رنگ سبز، و هرگاه خاموش بود، به رنگ قرمز درآید.
در تصویر زیر، سه مورد از آیتمهای اپلیکیشن را میبینید که در صفحه اضافه شدهاند.
آیتمهای نامرئی
آیتمهای مربوط به سنسورها و رابط کاربری
- Bluetooth Client1: وظیفهی این آیتم تشخیص و پیدا کردن دیوایسهای بلوتوث مجاور است و نتیجهی عملکرد آن بدین صورت است:
- آدرس و نام دستگاههای جفت شده را لیست میکند.
- مشخص میکند که آیا هر یک از این دستگاهها در حال حاضر در دسترس هستند یا خیر.
- مشخص میکند که آیا بلوتوث خود دستگاه فعال یا غیرفعال است.
- Clock1: کار این آیتم این است که براساس ساعت داخلی سیستم (گوشی هوشمند) زمان را در هر لحظه نمایش دهد. همچنین میتواند بر اساس تنظیمات زمان، محاسبات و دستورات مختلفی را اجرا کند.
- Notifier1: وظیفه این آیتم نمایش دادن دیالوگهای هشدار (آلارمها) و ایجاد یک لاگ فایل از ورودیهای سیستم است که آن را به این ترتیب انجام میدهد:
- ShowMessageDialog: پیامهایی که باید به اطلاع کاربر برسند را نمایش میدهد.
- LogError: خطاهای پیش آمده در سیستم را در لاگ فایل نگهداری میکند.
- LogInfo: گزارشی از اطلاعات و عملکردهای سیستم را در لاگ فایل ذخیره میکند.
بلوکهای صفحه
اگر بلوتوث وصل نباشد، یک پیغام خطا دریافت میکنید که در بخش «Link Status» نمایش داده میشود. به عنوان مثال اگر در حالی که ارتباط بلوتوثی میان دیوایس و گوشی برقرار نیست سريال پسورد باز شدن قفل را وارد کنید، یک پیغام خطا دریافت خواهید کرد مبنی بر اینکه اتصال برقرار نیست. وجود چنین هشدارهایی معمولا بسیار کاربردی است چرا که احتمال اینکه ما در موارد بسیاری فراموش کنیم ابتدا اتصال را برقرار و سپس پسورد را وارد کنیم، معمولا زیاد است.
ابزار Notifier و نشان دادن خطاها
سه دکمه هم در اپلیکیشن وجود دارند:
- Connect: زمانی که این دکمه را انتخاب کنید، لیستی نمایش داده میشود که باید از میان آنها انتخاب کنید. در واقع کار آن یافتن تمام دستگاههای بلوتوثی است که در مجاورت این دستگاه وجود دارند. در اینجا ما فقط یک دستگاه بلوتوثی دیگر داریم و آن ماژول HC-05 است.
جستجو برای بلوتوثها
بلوکهای مختلف نشان داده شده در لیست
- Disconnect: با انتخاب این دکمه، ارتباط بین اپلیکیشن و گوشی قطع خواهد شد و رنگ پس زمینه همان طور که تنظیم کرده بودیم قرمز میشود.
بلوکهای نمایش داده شده در ذیل دکمهی Disconnect
- Send text: این دکمه تنها زمانی قابل انتخاب و اجراست که ارتباط برقرار شده باشد. برای ارسال دادهها، اپلیکیشن از تابع SendText استفاده میکند. پس از ارسال هر داده، در صورت موفقیتآمیز بودن، در بخش status part پیغام «Message Sent» نشان داده خواهد شد.
بلوکهای بخش send text
توضیح کلی از چگونگی عملکرد اپلیکیشن
هر زمان که دستور Clock1.Timer وارد شود، اپلیکیشن بررسی میکند که آیا بلوتوث روشن است یا خیر. سپس دو متغیر ByteAvailable و CommandByte با مقدار اولیهی صفر مقداردهی میشوند که به این ترتیب برای تبادل داده آماده خواهند شد. هر زمان که داده آماده باشد، بایت اول آن با استفاده از ReceiveSigned1ByteNumber خوانده میشود. بایت خوانده شده بایت دستور (command byte) است که مشخص میکند از چه متد بلوتوثی برای خواندن بقیهی بایتها استفاده شود.
بلوکهای بخش تبادل داده
جمعبندی و نتیجهگیری
این پروژه هم به پایان رسید اما جالب است بدانید که آماده کردن و انجام آن بسیار چالشبرانگیز بود. چرا که در آن از ماژولهای مختلفی استفاده میشود و یافتن بهترین نحوهی اتصال و تعامل این ماژولها و المانهای مختلف با هم، کار سادهای محسوب نمیشود. با این وجود، انجام دادن این پروژه به شما کمک خواهد کرد که با انواع و اقسام خطاها و نحوهی برطرف کردن آنها آشنا شوید و تجربهی خوبی پیدا کنید؛ همان طور که برای ما هم همین گونه بود.
منبع: ترجمه از سایت deviceplus.com
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام ببخشید اموزش وصل کردن خود قفل در اموزش نبود میشه راهنمایی کنید
سلام چگونه موتور سروو را وصل کنیم؟