التحكم بالاردوينو من الاندرويد عن طريق USB ست طرق سهلة لتوصيل Arduino بجهاز Android. إنشاء تطبيق أندرويد

💖 هل يعجبك؟شارك الرابط مع أصدقائك

منذ فترة طويلة، أتاحت Google إمكانية توصيل أجهزة Android عبر USB بوحدات تحكم دقيقة مختلفة عن طريق فتح واجهة برمجة التطبيقات (API). الآن يمكن لكل من يشارك في إنشاء مشاريع مختلفة على Arduino أن يفرح، لأنه الآن سيكون من الأسهل بكثير تصحيح أخطاء نظام Android Arduino وتنظيم تفاعلهم من حيث المبدأ.

لقد بدأنا بالفعل في تعريف القراء بإمكانيات الجمع بين وحدة التحكم الدقيقة والهاتف الذكي - انظر.

ولكن حتى قبل ذلك، سمحت الوحدات المختلفة لـ Android وArduino بالتفاعل بسهولة. دعونا نتعرف على كيفية تنفيذ مشروع يتم التحكم فيه من الهاتف الذكي وما هو المطلوب لذلك.

أين يمكنني استخدام الاتصال بين Android وArduino؟

بادئ ذي بدء، عليك التفكير في كيفية استخدام القدرة على إرسال إشارة من Android إلى Arduino. بعد كل شيء، قبل دراسة أي مواد، يجب على كل شخص عاقل أن يفهم إلى أين سيقوده في النهاية. حتى لو كنا نتحدث عن هواية. في الواقع، لم يعد يُنظر إلى القدرة على التحكم في المعدات من هاتفك الذكي على أنها شيء غير عادي. في الوقت الحاضر، تتمتع معظم أجهزة التلفاز والثلاجات وحتى المكانس الكهربائية التي تشتريها الطبقة المتوسطة بالقدرة على نقل البيانات إلى الهاتف الذكي.

يتيح لك هذا الحل تبسيط حياة الشخص العادي بشكل كبير، لأنه بالنسبة للتلفزيون نفسه ليست هناك حاجة لشراء بطاريات لجهاز التحكم عن بعد باستمرار والبحث عنها في حالة ضياعها. نحن نقترب من المنازل الذكية العزيزة، لكن بعض الناس يفضلون عدم شراء هذه المعدات، ولكن تصميمها بأنفسهم.

في هذه الحالة، ينبغي النظر في حزمة Android Arduino في شكلين مختلفين:

  1. التحكم عن بعد في أي جهاز باستخدام الهاتف الذكي. ويسمى أيضًا اتصال الهاتف الذكي-MK. جميع المعدات نفسها، على سبيل المثال، الستائر المنزلقة أو الإضاءة في الغرفة، والتي سيتم إيقاف تشغيلها بنقرة واحدة. إذا كنت تريد أن تفعل هذا الأخير، فليست هناك حاجة لتغيير الأسلاك أو شراء مصابيح ذكية خاصة، والتي يمكن أن تحترق بعد شهر. يكفي شراء متحكم Arduino صغير ووحدة اتصال لاسلكية أو إنترنت لاسلكي وشريط كهربائي. وبعد ذلك سيكون كافيا لحام أبسط دائرة، والتي تغلق إذا تم إرسال إشارة إلى عضو الكنيست.
    سيتم إرسال هذه الإشارة من هاتفك، وإغلاق جهات الاتصال، وسيبدأ الضوء في الإضاءة. لتجنب المشاكل ولأمان إضافي لمنزلك، يمكنك كتابة برنامج نصي يمكنه فتح الدائرة تلقائيًا إذا تمت إزالة جهاز التحكم عن الأنظار. سوف تستمر المفاتيح العادية في العمل، ولكن فقط عندما تكون الدائرة مغلقة.
  2. نقل البيانات للحصول على معلومات أو اتصال MK-Smartphone. هنا لم تعد تتحكم في بعض المعدات، بل على العكس من ذلك، تسمح لك المعدات المختلفة بتلقي بيانات معينة على هاتفك الذكي. أول ما يتبادر إلى الذهن وأبسط تطبيق هو مستشعر الحركة. هذه الوحدة متوفرة في أجهزة الاستشعار القياسية لوحدات التحكم الدقيقة من Arduino؛ لن يكون شراءها مشكلة، وكذلك تثبيتها في الممر. بعد ذلك، كل ما تبقى هو كتابة رمز، موجود بالفعل في العديد من منتديات اللغة الإنجليزية، يرسل رسالة نصية قصيرة أو رسالة على الشبكات الاجتماعية، بالإضافة إلى أداة مساعدة خاصة إذا عبر شخص ما شعاع الأشعة تحت الحمراء.
    يمكنك إنشاء أنظمة أكثر تعقيدًا وآلية لا تنقل معلومات الوسائط حول شقتك فحسب، بل ستبلغ أيضًا عما إذا كانت الخضروات أو الفواكه تنضج في الدفيئة المنزلية الخاصة بك. كل شيء يعتمد فقط على خيال المهندس نفسه، ولكن أساس التكنولوجيا لا يزال هو نفسه - نقل البيانات من جهاز إلى آخر.

إذن لقد اخترت المشروع المناسب وبدأت في تنفيذه. لقد تم بالفعل طلب الوحدات ووحدات التحكم الدقيقة، وأثناء وجودها في الطريق، يمكنك البدء في تطوير البرامج. بعد كل شيء، لا يتفاعل Android العاري مع Arduino باستخدام السحر.

تطبيقات أندرويد للتفاعل مع الاردوينو

لن نقوم بتطوير الأداة المساعدة من الصفر، لأن هذا ليس الأساس للبرمجة في Java. أسهل طريقة هي استخدام محركات وبيئات جاهزة مع واجهة مستخدم، حيث لا يتعين عليك حرفيًا سوى إضافة سطر أو سطرين من التعليمات البرمجية للزر حتى يعمل. وبطبيعة الحال، فإن مثل هذا النهج يحد بشكل كبير من وظائف المنتج النهائي ويضعف حتما الإبداع، ولكنه سيكون مفيدا لأولئك الذين يرغبون في تنفيذ مشروع بسيط بسرعة دون مشاكل غير ضرورية.

أولاً، دعونا نلقي نظرة على الملفات الثلاثة الأساسية التي ستواجهها عند تصميم البرنامج:

  1. MainActivity.java هو رمز التطبيق بالكامل باللغة التي تحمل الاسم نفسه، ويتم حفظ جميع الوظائف والأساليب التي تكتبها هنا.
  2. Activity_main.xml – التخطيط، كما يمكنك تخمينه بسهولة من امتداد الملف. يتم هنا تخزين موقع الأزرار والنصوص والمكونات التفاعلية الأخرى، والتي يتم بعد ذلك تفعيلها باستخدام التعليمات البرمجية.
  3. AndroidManifest.xml - يرتبط هذا الملف أيضًا بالتخطيطات، ولكن في منطقة مختلفة قليلاً. فهو يحدد المعلمات الأساسية لبدء تشغيل التطبيق والأذونات التي سيحتاجها. في حالتنا هذه هي الحاجة إلى تشغيل البلوتوث لأننا من خلاله سنتواصل مع عضو الكنيست. إذا كنت تقوم بإنشاء جهاز استشعار يجب أن يرسل المعلومات عبر مسافة طويلة، فتبعا لذلك، تحتاج إلى تشغيل والتحقق من تشغيل الإنترنت اللاسلكي أو المحمول.

أساسيات استقبال ونقل البيانات

لفهم كيفية عمل مشروعك المستقبلي بشكل عام، سيكون من المفيد دراسة الفيزياء الأساسية للمجالات الكهرومغناطيسية. ولكن من أجل عدم التحميل الزائد بالمعلومات غير الضرورية، يكفي أن نفهم أن نقل البيانات اليوم يحدث بثلاث طرق رئيسية:

  1. عبر كابل USB، وهو غير مناسب في كل مكان، ولكنه خيار جيد لإعداد المشروع.
  2. من خلال تقنية Bluetooth والبروتوكولات ذات الصلة، على سبيل المثال، أصبح من الشائع مؤخرًا استخدام NTFS للتحكم في الأجهزة الذكية. ولكن، بما أننا نتحدث عن مشروع حول Arduino MK، فسوف نركز على البلوتوث.
  3. عبر الإنترنت اللاسلكي. لا يوجد شيء جديد هنا، في الواقع، يعمل هاتفك المحمول أو وحدة التحكم الدقيقة كخادم يستقبل البيانات المستلمة ويعالجها، ثم يقوم بإجراء الحسابات أو الإجراءات ويرسل الاستجابة.

هذه هي الطرق الرئيسية لإرسال واستقبال المعلومات، وما عليك سوى اختيار الطريقة المناسبة. بالنسبة للمشاريع التي لن يتم استخدامها لمسافات طويلة، فإن الخيار الأفضل من حيث حجم الكود وسهولة الإعداد هو البلوتوث.

ما هي المكونات التي قد تكون مطلوبة للتفاعل؟

لقد ذكرنا أعلاه أنه بالنسبة لمشروع Arduino، والذي يتضمن استخدام إحدى طرق نقل البيانات عبر مسافة، فمن الضروري شراء وحدات إضافية. مرة أخرى، البلوتوث هو الخيار الأفضل. تتيح لك هذه الوحدة استقبال وإرسال إشارات ذات تردد معين، والتي تلتقطها معظم الهواتف الذكية، وبالتالي لا ينبغي أن تنشأ أي مشاكل. يمكنك اختيار أحد الأجهزة المقدمة في خط Arduino الرئيسي، أو نظائرها الصينية، والتي ستكون أرخص بكثير.

إحدى الوحدات التي يمكنك الحصول عليها هي Bluetooth Bee، والتي يمكن شراؤها من العديد من المتاجر من DFRobot.

كل هذا يتوقف على النظام المحدد و"النطاق الترددي" المطلوب فيه. بعد كل شيء، إذا كانت كاميرا مراقبة بالفيديو، فيجب نقل دفق البيانات بشكل مستمر وبكميات كبيرة. وبالنسبة لمستشعر الحركة البسيط، فإن أرخص وحدة Wi-Fi كافية. إنه نفس الشيء مع الأجهزة المنزلية الذكية الآلية.

عند اختيار كل مكون، ضع في اعتبارك احتياجاتك وما ستنفذه في المشروع، ولا تدفع مبالغ زائدة مقابل الميزات التي لا تحتاج إليها.

إعداد الاتصال

إذن، لقد قمت الآن بإنشاء تطبيق أو نظيره الجاهز وتثبيته بالفعل على هاتفك الذكي للتحكم في وحدة التحكم الدقيقة باستخدام Arduino، فأنت بحاجة إلى:

  1. قم بتشغيل وحدة Bluetooth نفسها في النظام، وتشغيلها من الشبكة أو البطارية.
  2. قم بتشغيل التطبيق على هاتفك وابحث عن الجهاز المطلوب.
  3. اتصل بوحدة Bluetooth باستخدام كلمة المرور الافتراضية أو تلك التي قمت بتعيينها عند وميض Arduino.
  4. أعط الأوامر الأولى وشاهد كيف يتفاعل النظام معها.

ويجدر القول هنا أن هناك العديد من التطبيقات الخاصة بالاردوينو على جوجل بلاي، وفي المقال التالي سنعرض 7 منها.

أبسط مثال

لكي تفهم تقريبًا كيف يجب أن يعمل المشروع النهائي، سنقدم مثالاً باستخدام نفس الوظيفة الإضافية لمصباحك.

  1. يمكنك الاتصال بالنظام عبر هاتفك الذكي.
  2. تضغط على زر واحد وتفتح الدائرة أو تغلق.
  3. يظهر الضوء أو يختفي.
  4. اضغط على الزر الموجود على هاتفك الذكي مرة أخرى، وسيحدث التأثير المعاكس.

بطبيعة الحال، للقيام بذلك، يجب عليك أولا إغلاق الدائرة عن طريق تشغيل المصباح الكهربائي باستخدام مفتاح الجدار. لكن هذا ليس سوى مثال مشروط لما يمكن تحقيقه باستخدام هذه التكنولوجيا.

في الدروس القادمة، سنتناول بمزيد من التفصيل تفاعل الهواتف الذكية ووحدات التحكم الدقيقة، وسنقوم ببعض الدروس المفيدة معك.

ستتعلم في هذا البرنامج التعليمي كيفية استخدام وحدة Bluetooth وتطبيق MIT لإنشاء اتصال تسلسلي لاسلكي بين هاتف Android ولوحة Arduino. توضح هذه المقالة كيفية الاتصال وكتابة مخطط Arduino الذي يمكنه قبول وإرسال الأوامر الأساسية وكيفية إنشاء تطبيق بنفسك. من المفترض أنك على دراية ببعض الأساسيات بالفعل، وأنك قمت بتنفيذ بعض مشاريع Arduino وعلى دراية بـ Arduino IDE. إذا حاولت الاتصال التسلسلي مع لوحة اردوينو، فيجب أن يكون كل شيء واضحًا تمامًا. إذا كان لديك أي مشكلة أو أسئلة، فلا تتردد في طرحها على صفحة الحديث.

ما هو الموضوع الذي تتناوله المقالة؟

أجراءات

1. استخدم الكود التالي لاردوينو

لا تتردد في تغييره. الجانب المهم هنا هو معدل الباود - تأكد من مطابقته لمعدل الباود الخاص بوحدتك - تحقق من ورقة البيانات أو استخدم أوامر AT لهذا الغرض.

  • const int ledPin = 2; // الدبوس المتصل بمصباح LED بالبايت serialA ؛ إعداد الفراغ () (// تهيئة الاتصال التسلسلي: Serial.begin (19200)؛ // معدل الباود - تأكد من تطابقه مع الوحدة النمطية التي حصلت عليها: // تهيئة ledPin كمخرج: pinMode(ledPin, OUTPUT) ) حلقة باطلة () (إذا (Serial.available ()> 0) (serialA = Serial.read ()؛Serial.println (serialA)؛) التبديل (serialA) (الحالة 1: digitalWrite (ledPin، HIGH)؛ استراحة؛ الحالة 2: الكتابة الرقمية (ledPin، LOW)؛

2. إذا كان كل ما تريده هو الحصول على التطبيق ومعرفة كيفية عمله

قم بتنزيل التطبيق ثم قم بتنزيله على هاتفك. يمكنك تنزيله من -> https://drive.google.com/folderview?id=0B_PfPoEotOF8N2JwT3RSX011SjQ&usp=sharing. يجب أن يسمح هاتفك بتثبيت التطبيقات من مصادر خارجية.

3. إذا كنت ترغب في تغيير التطبيق، يرجى الذهاب إلى


  • http://appinventor.mit.edu/explore/learn.html للتعرف على كيفية إعداد جهاز الكمبيوتر الخاص بك وتثبيت برنامج مطور التطبيقات. بمجرد الانتهاء من تشغيله، قم بتنفيذ واحد أو اثنين على الأقل من دروسك الرئيسية. أدناه هو التطبيق المستخدم هنا. يمكنك تحميله على App Inventor ومن ثم تنزيله على هاتفك أو تعديله. https://drive.google.com/folderview?id=0B_PfPoEotOF8N2JwT3RSX011SjQ&usp=sharing

الأشياء ستحتاج

  • لوحة اردوينو
  • وحدة بلوتوث التسلسلية (تم استخدام وحدة btm222 مع منظم مدمج في هذه المقالة)
  • الجزء الإشكالي الوحيد هنا هو وحدة البلوتوث. هناك وحدات مختلفة في جميع أنحاء الإنترنت، لذا تأكد من التحقق من المخرجات في ورقة البيانات المتوفرة لديك لأنها قد تختلف. لاحظ أيضًا أن هناك فئتين عامتين من وحدات البلوتوث: الفئة 1 يبلغ نطاقها حوالي 100 متر. الفئة 2 يبلغ مداها حوالي 10 أمتار. إذا كنت تتساءل أنهما متوافقان تمامًا ولا يمكنك الحصول على 100 متر إلا إذا كان كلا الجهازين يدعمان هذا النطاق
  • تحتوي وحدة البلوتوث التسلسلية المستخدمة هنا على المسامير التالية من اليسار إلى اليمين (الأرضي، RX، TX، غير متصل، VCC). من الواضح أن الأرض وVCC يذهبان على التوالي إلى الأرض ودبوس + 5V على اردوينو. نظرًا لأننا سنستقبل البيانات من خلال الوحدة ثم نرسلها بدورنا إلى لوحة الاردوينو، فنحن نحتاج فقط إلى استخدام دبوس TX الموجود على الوحدة. قم بتشغيل سلك من هذا الدبوس إلى مخرج RX على لوحة اردوينو. يتم التحكم في Led باستخدام PIN 2 على Arduino.
  • الصمام الثنائي الباعث للضوء
  • المقاوم (100 أوم)
  • الأسلاك
  • لوح الخبز

  • قد يكون هذا البرنامج التعليمي صعبًا بعض الشيء بالنسبة لك إذا كنت مبتدئًا. إذا لم تجرب أبدًا الاتصال التسلسلي مع لوحة اردوينو، أو على الأقل لم تقم بمعظم رسومات أمثلة اردوينو، فاتبع بعض البرامج التعليمية الأسهل وارجع إليها لاحقًا.

ستصف هذه المقالة بالتفصيل إنشاء تطبيق صغير لنظام تشغيل الهاتف المحمول Android ورسم تخطيطي لـ Arduino. سيكون لدى Arduino Uno درع لاسلكي مزود بوحدة Bluetooth. سيتصل التطبيق بوحدة Bluetooth ويرسل أمرًا معينًا. في المقابل، سيستخدم المخطط هذا الأمر لإضاءة أو إيقاف تشغيل أحد مصابيح LED المتصلة بالاردوينو.

سوف نحتاج

إنشاء تطبيق أندرويد

فارغ

يتم تطوير نظام التشغيل Android في بيئة تطوير ADT، أدوات تطوير Android. والتي يمكن تنزيلها من بوابة مطوري Google. بعد تنزيل ADT وتثبيته، لا تتردد في تشغيله. ومع ذلك، لا يزال من السابق لأوانه البدء في تطوير التطبيق. تحتاج أيضًا إلى تنزيل Android SDK للإصدار المطلوب. للقيام بذلك، تحتاج إلى فتح Android SDK Manager "Window → Android SDK Manager". في القائمة، نحتاج إلى تحديد SDK الذي نحتاجه، في حالتنا Android 2.3.3 (API 10). إذا لم يكن لديك هاتف، فاختر 2.3.3 أو أعلى؛ وإذا كان هناك إصدار، فهو إصدار يتوافق مع إصدار نظام تشغيل الهاتف. ثم انقر فوق الزر "تثبيت الحزم" لبدء عملية التثبيت.

بعد اكتمال التنزيل والتثبيت، نبدأ في إنشاء التطبيق. حدد "ملف → جديد → مشروع تطبيق Android". لنملأ محتويات النافذة كما هو موضح في الشكل.

    اسم التطبيق - اسم التطبيق الذي سيتم عرضه في متجر Google Play. لكننا لن ننشر التطبيق، لذا فإن الاسم ليس مهمًا بشكل خاص بالنسبة لنا.

    اسم المشروع - اسم المشروع في ADT.

    اسم الحزمة - معرف التطبيق. وينبغي أن يتكون على النحو التالي: اسم موقعك بشكل عكسي، بالإضافة إلى بعض اسم التطبيق.

في القوائم المنسدلة "الحد الأدنى المطلوب من SDK"، و"Target SDK"، و"Compile With"، حدد الإصدار الذي قمنا بتنزيله مسبقًا. تدعم الإصدارات الأحدث من SDK السمات الرسومية للتطبيقات، لكن الإصدارات الأقدم لا تدعمها. لذلك، في حقل "الموضوع"، حدد "لا شيء". انقر فوق {التالي".

قم بإلغاء تحديد "إنشاء رمز مشغل مخصص": في هذه المقالة لن نركز على إنشاء رمز تطبيق. انقر فوق {التالي".

في النافذة التي تظهر، يمكنك تحديد عرض "النشاط": عرض ما سيكون على الشاشة عند تشغيل التطبيق. نختار "نشاط فارغ"، مما يعني أننا نريد أن نبدأ كل شيء من الصفر. انقر فوق {التالي".

سيكون هناك نشاط واحد فقط في تطبيقنا، لذلك لا تحتاج إلى تغيير أي شيء في النافذة التي تظهر. لذا فقط اضغط على "إنهاء".

هذا كل شيء، تم إنشاء تطبيقنا.

إعداد المحاكي

يتم تصحيح أخطاء تطبيقات Android على جهاز حقيقي، أو في حالة عدم وجودها، على المحاكي. دعونا تكوين لدينا.

للقيام بذلك، قم بتشغيل "Window → Android Virtual Device Manager". في النافذة التي تظهر، انقر فوق "جديد". املأ حقول النموذج الذي يظهر. يعتمد الأمر عليهم في عدد الموارد التي سيوفرها المحاكي لـ "الهاتف" وما هي الموارد. حدد قيمًا معقولة وانقر فوق "موافق".

في نافذة Android Virtual Device Manager، انقر فوق الزر "ابدأ". سيؤدي هذا إلى تشغيل المحاكي. يستغرق بدء التشغيل بضع دقائق. حتى يكون المريض.

ونتيجة لذلك، سترى نافذة محاكي مشابهة لهذه:

نشاط التعبئة

النشاط هو ما يتم عرضه على شاشة الهاتف بعد تشغيل التطبيق. سيكون لدينا زرين "إضاءة مؤشر LED الأحمر" و"إضاءة مؤشر LED الأزرق". دعونا نضيفهم. في لوحة "Package Explorer"، افتح res/layout/activity_main.xml. سيكون مظهره هو نفسه تقريبًا كما في لقطة الشاشة.

اسحب 2 "ToggleButtons" إلى نموذج الشاشة. انتقل إلى علامة التبويب "activity_main.xml" وشاهد الكود التالي:

Activity_main_aiutogen.xml xmlns:أدوات = الروبوت:layout_width = "match_parent" الروبوت:layout_height = "match_parent" android:paddingBottom= android:paddingLeft= android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" الأدوات: السياق = "النشاط الرئيسي" > الروبوت: معرف = "@+ معرف/toggleButton1" android:layout_alignParentLeft= "صحيح" الروبوت:layout_alignParentTop = "صحيح" android:text="ToggleButton" /> الروبوت: معرف = "@+id/toggleButton2" الروبوت:layout_width = "wrap_content" الروبوت:layout_height = "wrap_content" الروبوت:layout_above = "@+id/textView1" android:layout_alignParentRight= "صحيح" android:text="ToggleButton" /> >

هذا ليس أكثر من نشاطنا، الذي لا يتم عرضه كرسومات، ولكنه موصوف بتنسيق XML.

دعونا نجعل أسماء المكونات أكثر وضوحا. دعونا نغير حقول android:id كما يلي.

android:id="@+id/toggleRedLed" ... android:id="@+id/toggleGreenLed" ...

سنقوم أيضًا بإضافة التوقيعات إليها وتغيير لونها وحجم النص. سيبدو رمز الترميز الناتج كما يلي:

Activity_main.xml "http://schemas.android.com/apk/res/android" xmlns:أدوات = "http://schemas.android.com/tools" الروبوت:layout_width = "fill_parent" android:paddingBottom= "@dimen/activity_vertical_margin" android:paddingLeft= "@dimen/activity_horizontal_margin" android:paddingRight = "@dimen/activity_horizontal_margin" android:paddingTop = "@dimen/activity_vertical_margin" الأدوات: السياق = "النشاط الرئيسي" الروبوت:weightSum = "2" الروبوت: التوجه = "أفقي"> android:id="@+id/toggleRedLed" الروبوت:layout_width = "wrap_content" الروبوت:layout_height = "fill_parent" الروبوت:layout_weight = "1" الروبوت: الخلفية = "#FF0000" الروبوت: textOff = "OFF" الروبوت: textOn = "ON" الروبوت: حجم النص = "30dp" /> android:id="@+id/toggleGreenLed" الروبوت:layout_width = "wrap_content" الروبوت:layout_height = "fill_parent" الروبوت:layout_weight = "1" الروبوت:الخلفية = "#00FF00" الروبوت: textOff = "OFF" الروبوت: حجم النص = "30dp" الروبوت: textOn = "ON" /> >

يمكن إجراء نفس التغييرات في الوضع الرسومي باستخدام علامة التبويب "المخطط التفصيلي/الخصائص".

التشغيل التجريبي

يمكننا تشغيل التطبيق الذي تم إنشاؤه حديثًا على المحاكي. انتقل إلى إعدادات التشغيل "Run" → Run Configurations"، على الجانب الأيسر، انقر على "Android Application". يظهر التكوين الجديد "New_configuration". على الجانب الأيمن من النافذة، حدد علامة التبويب "الهدف" وحدد خيار "التشغيل على جميع الأجهزة المتوافقة/AVD".

انقر فوق "تطبيق" ثم "تشغيل". سيتم تشغيل التطبيق في المحاكي.

يمكنك الضغط على الأزرار. ولكن لن يحدث شيء، لأننا لم نكتب بعد معالجات النقر.

لتشغيل التطبيق على جهاز حقيقي، تحتاج إلى تمكين خيار “تصحيح أخطاء USB” في إعداداته وتوصيله بالكمبيوتر.

على جهاز حقيقي، يبدو التطبيق هو نفسه تمامًا.

كتابة الكود للاندرويد

تحرير البيان

يجب أن يخبر كل تطبيق Android النظام بالحقوق التي يحتاج إلى منحها. الحقوق مدرجة في ما يسمى بملف البيان AndroidManifest.xml. يجب أن نشير فيه إلى حقيقة أننا نريد استخدام Bluetooth في تطبيقنا. وللقيام بذلك، ما عليك سوى إضافة سطرين فقط:

AndroidManifest.xml "http://schemas.android.com/apk/res/android" الحزمة = "ru.amperka.arduinoptled" الروبوت: رمز الإصدار = "1" الروبوت: اسم الإصدار = "1.0"> الروبوت:minSdkVersion = "10" android:targetSdkVersion="10" /> "android.permission.BLUETOOTH"/> "android.permission.BLUETOOTH_ADMIN"/>
أندرويد:allowBackup = "صحيح" الروبوت: أيقونة = "@ drawable/ic_launcher" الروبوت: التسمية = "@ سلسلة/app_name" android:theme="@style/AppTheme" > الروبوت: الاسم = "ru.amperka.arduinoptled.MainActivity" android:label="@string/app_name"> > "android.intent.category.LAUNCHER" /> > > > >

إضافة الرمز الرئيسي

حان الوقت لبث الحياة في طلبنا. افتح الملف MainActivity.java (src → ru.amperka.arduinobtled). في البداية كان يحتوي على الكود التالي:

حزمة MainActivityAutogen.java ru.amperka.arduinoobtled ؛ استيراد android.os.Bundle؛ استيراد android.app.Activity؛ استيراد android.view.Menu؛ يقوم MainActivity من الفئة العامة بتوسيع النشاط ( @Override protected void onCreate(Bundle saveInstanceState) ( super .onCreate (savedInstanceState) ; setContentView(R.layout .activity_main ) ; ) @Override public boolean onCreateOptionsMenu( قائمة طعامالقائمة) ( getMenuInflater() .inflate (R.menu .main , القائمة) ؛ إرجاع صحيح ; ) )

دعنا نضيف الكود وفقًا لما نحتاجه:

    سنقوم بتشغيل البلوتوث إذا تم إيقاف تشغيله.

    سنقوم بمعالجة نقرات الزر

    سوف نرسل معلومات حول الزر الذي تم الضغط عليه.

سنقوم بنقل بايت واحد برقم مكون من رقمين إلى Arduino. الرقم الأول من الرقم هو رقم الدبوس الذي يتصل به هذا الصمام أو ذاك، والثاني هو حالة الصمام: 1 - تشغيل، 0 - إيقاف.

يتم حساب رقم الأمر بكل بساطة: إذا تم الضغط على الزر الأحمر، فسيتم أخذ الرقم 60 (بالنسبة لمصباح LED الأحمر اخترنا الطرف السادس من Arduino) ويتم إضافة 1 أو 0 إليه، اعتمادًا على ما إذا كان يجب أن يكون LED أم لا. يكون الآن على أم لا. بالنسبة للزر الأخضر، كل شيء مشابه، فقط بدلاً من 60، يتم أخذ 70 (نظرًا لأن مؤشر LED الأخضر متصل بالدبوس 7). ونتيجة لذلك، في حالتنا، 4 فرق ممكنة: 60، 61، 70، 71.

دعونا نكتب الكود الذي ينفذ كل ما قيل.

حزمة MainActivity.java ru.amperka.arduinobtled ؛ استيراد java.io.IOException؛ استيراد java.io.OutputStream؛ يستورد java.lang.reflect.InvocationTargetException; استيراد java.lang.reflect.Method؛ استيراد android.app.Activity؛ يستورد android.bluetooth.BluetoothAdapter; يستورد android.bluetooth.BluetoothDevice; يستورد android.bluetooth.BluetoothSocket; استيراد android.content.Intent؛ استيراد android.os.Bundle؛ استيراد android.util.Log ; استيراد android.view.Menu؛ استيراد android.view.View؛ يستورد android.view.View.OnClickListener; استيراد android.widget.Toast؛ استيراد android.widget.ToggleButton؛ يقوم MainActivity من الفئة العامة بتوسيع تنفيذ النشاط منظر.OnClickListener( // مثيلات فئات الأزرار لدينا ToggleButton redButton؛ ToggleButton GreenButton؛ // المقبس الذي سنرسل به البيانات إلى Arduino BluetoothSocket clientSocket; // تعمل هذه الوظيفة تلقائيًا عند بدء تشغيل التطبيق@Override protected void onCreate(Bundle saveInstanceState) ( super .onCreate(savedInstanceState) ; setContentView(R.layout .activity_main ) ; // "ربط" عرض الزر الموجود في نافذة التطبيق بالتنفيذ redButton = (ToggleButton) findViewById(R.id .toggleRedLed ) ; greenButton = (ToggleButton) findViewById(R.id .toggleGreenLed ) ; // أضف "مستمع النقر" إلى الزر redButton.setOnClickListener(this); greenButton.setOnClickListener(this); // تشغيل البلوتوث. إذا تم تمكينه بالفعل، فلن يحدث شيء خيط EnableBT = BluetoothAdapter.ACTION_REQUEST_ENABLE؛ startActivityForResult(new Intent(enableBT) , 0 ) ; // نريد استخدام محول البلوتوث الافتراضي BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); //محاولة القيام بهذه الإجراءاتيحاول ( // الجهاز الذي يحمل هذا العنوان هو Bluetooth Bee الخاص بنا // يتم تحديد العنوان على النحو التالي: إنشاء اتصال // بين جهاز الكمبيوتر والوحدة النمطية (رقم التعريف الشخصي: 1234)، ثم ابحث في الإعدادات // عنوان وحدة الاتصال. على الأرجح سيكون مشابها.جهاز BluetoothDevice = bluetooth.getRemoteDevice("00:13:02:01:00:09" ) ; // ابدأ الاتصال بالجهاز طريقة m = devices.getClass().getMethod("createRfcommSocket", new Class(int.class)); clientSocket = (BluetoothSocket) m.invoc(device, 1); clientSocket.connect(); // في حالة حدوث أي أخطاء، قم بإخراج رسالة إلى السجل) يمسك ( IOEException استثناء أمانهـ) ( Log.d ("BLUETOOTH" , e.getMessage () ) ) ; ) قبض ( NoSuchMethodExceptionهـ) ( Log.d ("BLUETOOTH" , e.getMessage () ) ) ; ) قبض ( غير الشرعيين استثناء حجةهـ) ( Log.d ("BLUETOOTH" , e.getMessage () ) ) ; ) قبض ( IllegalAccessExceptionهـ) ( Log.d ("BLUETOOTH" , e.getMessage () ) ) ; ) قبض ( الاحتجاج استثناء الهدفهـ) ( Log.d ("BLUETOOTH" , e.getMessage () ) ; ) //عرض رسالة حول الاتصال الناجح Toast.makeText(getApplicationContext(), "CONNECTED", Toast.LENGTH_LONG).show(); ) @Override المنطقية العامة onCreateOptionsMenu( قائمة طعامقائمة طعام) ( // تضخيم القائمة؛ يؤدي هذا إلى إضافة عناصر إلى شريط الإجراءات إذا كان موجودًا. getMenuInflater() .inflate (R.menu .main , القائمة) ; عودة صحيحة؛ ) // هذه هي بالضبط الوظيفة التي سيتم استدعاؤها@Override الفراغ العام عند النقر ( منظرالخامس) ( //محاولة إرسال البياناتيحاول ( // احصل على دفق الإخراج لنقل البيانات تيار الإخراج outStream = clientSocket.getOutputStream(); قيمة كثافة العمليات = 0؛ // اعتمادًا على الزر الذي تم الضغط عليه، // تغيير البيانات للإرسال if (v == redButton) ( value = (redButton.isChecked () ? 1 : 0 ) + 60 ; ) else if (v == greenButton) ( value = (greenButton.isChecked () ? 1 : 0 ) + 70 ; ) // اكتب البيانات إلى دفق الإخراج outStream.write(value); ) يمسك ( IOEExceptionه) ( // إذا كانت هناك أخطاء، قم بإخراجها إلى السجل Log.d ("BLUETOOTH" , e.getMessage (, OUTPUT) ; pinMode(7 , OUTPUT) ; ) حلقة باطلة() ( //إذا وصلت البياناتإذا (Serial.available() > 0) ( // اقرأ البايت الواردالبايت الواردByte = Serial.read(); // احصل على الرقم السري عن طريق قسمة عدد صحيح على قيمة البايت المستلم على 10 // والإجراء الذي نحتاجه للحصول على باقي القسمة على 2: //(1 - إضاءة، 0 - إطفاء)الكتابة الرقمية(incomingByte / 10 , incomingByte % 2 ) ; ))

ميزات ملء الرسم

لتوصيل Bluetooth-Bee بوحدة التحكم، يتم استخدام نفس الأطراف (0 و1) كما هو الحال في البرامج الثابتة. لذلك، عند برمجة وحدة التحكم، يجب ضبط مفتاح "SERIAL SELECT" الموجود على "Wireless Shield" على الوضع "USB"، وبعد الوميض يجب إعادته إلى الوضع "MICRO".

نتيجة

خاتمة

تعرفنا في هذه المقالة على كيفية إنشاء تطبيقات لنظام التشغيل أندرويد ونقل البيانات عبر البلوتوث. الآن، عندما تضغط على زر على شاشة الهاتف الذي يعمل بنظام التشغيل Android، ستتغير حالة مؤشر LED الموجود على اللوحة.

يمكنك تطوير فكرتك وإنشاء واجهة أكثر سهولة في الاستخدام على Android، والتحكم في الأجهزة الأكثر تعقيدًا باستخدامها، ونشر تطبيقات رائعة في Android Market، وأشياء أكثر إثارة للاهتمام!

لقد نظرنا في تثبيت وتكوين البرنامج الذي نحتاجه للتطوير لـ ADK وAndroid. الآن بعد أن أصبح لدينا كل شيء جاهزًا للانطلاق، يمكننا إنشاء مشروعنا الأول. ووفقًا للتقاليد، سيكون هذا مشروعًا مزودًا بمصباح LED.

سيكون المشروع بسيطًا للغاية - سيتم عرض زر على شاشة جهاز Android، وعند الضغط عليه، سيضيء مؤشر LED الموجود على لوحة التصحيح، وعند تحريره، سينطفئ.

برنامج لاردوينو

دعونا إنشاء مشروع جديد. سيكون كود المصدر الخاص بنا بسيطًا جدًا:

#تتضمن #تتضمن الاتصال * الاتصال؛ void adbEventHandler(Connection * Connection, adb_eventType events, uint16_t length, uint8_t * data) ( if (event == ADB_CONNECTION_RECEIVE) // إذا تم استلام البيانات ( digitalWrite (13، data)؛ // تغيير حالة LED اعتمادًا على المتغير المستلم ) ) void setup() ( pinMode(13,OUTPUT); // استخدم مؤشر LED L المدمج في لوحة Seeeduino ADK ADB::init();connection = ADB::addConnection("tcp:4568"، صحيح، adbEventHandler); ) حلقة باطلة() ( ADB::poll(); )

باختصار - نقوم بتهيئة وإنشاء اتصال ADB، وكذلك تحديد الوظيفة adbEventHandler()، والذي سيتم استدعاؤه في كل مرة يتم فيها تلقي البيانات من جهاز Android. عند استلام البيانات، نكتب البايت المستلم باستخدام الوظيفة الكتابة الرقمية ()، وبالتالي إضاءة أو إطفاء مؤشر LED.

الآن نقوم بتجميع المخطط وتحميله على لوحتنا.

برنامج للاندرويد

افتح Eclipse IDE وأنشئ مشروعًا جديدًا: جديد -> مشروع... سيتم فتح نافذة نجد فيها مجلد Android ونختار مشروع تطبيق Android. انقر فوق الزر "التالي" واملأ اسم المشروع وبعض المعلمات.

بعد ذلك، انقر فوق "التالي" وقم بإنشاء رمز التطبيق، وما إلى ذلك. بعد النقر فوق الزر "إنهاء"، يصبح تطبيقك جاهزًا. الآن في نافذة Package Explorer، انقر بزر الماوس الأيمن على مشروعك وحدد خصائص المشروع: Properties. تأكد من تعيين اسم الهدف الخاص بك على Google API وليس Android.

ثم نفتح ملف البيان AndroidManifest.xml ونكتب سطرًا فيه حتى يمنحنا نظام التشغيل Android الإذن بالوصول إلى الخدمات المقابلة:

بعد ذلك، نقوم بنسخ المكتبات اللازمة لضمان عمل وضع MicroBridge: /src/org/microbridge/server ويوجد 4 ملفات في هذا المجلد. يمكنك أخذها من الأرشيف الموجود في نهاية المقالة أو من المثال الأصلي من Seeed Studio.

نحتاج الآن إلى إضافة عناصر رسومية إلى النشاط (نافذة التطبيق) للتفاعل مع المستخدم. في الوقت الحالي سيكون لدينا عنصرين فقط: النص وزر التبديل (زر ذو حالتين).
هناك طريقتان لإنشاء واجهة المستخدم: استخدام تخطيط رسومي (سحب وإفلات بسيط وتخطيط) واستخدام ملف XML. دعونا نستخدم التخطيط الرسومي. للقيام بذلك، في نافذة موارد التطبيق، انقر فوق الملف /res/layout/activity_main.xml. واسحب زر ToggleButton إلى النافذة التي تظهر:

الآن افتح ملفنا الرئيسي /src/com/example/arduino52/MainActivity.java، احذف كل ما فيه وانسخ الأسطر التالية:

الحزمة com.example.arduino52; import java.io.IOException; import org.microbridge.server.Server; استيراد android.os.Bundle؛ import android.util.Log; import android.app.Activity; import android.widget.ToggleButton; import android.widget.CompoundButton; يقوم MainActivity من الفئة العامة بتوسيع النشاط بتنفيذ CompoundButton.OnCheckedChangeListener ( خادم الخادم = null؛ @Override public void onCreate(Bundle saveInstanceState) ( super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ToggleButton mButton = (ToggleButton)findViewById(R) .id.toggleButton1); mButton.setOnCheckedChangeListener(this); // إنشاء خادم TCP (استنادًا إلى خادم MicroBridge LightWeight) حاول ( server = new Server(4568); // يجب استخدام نفس المنفذ على خادم لوحة ADK .start (); التقاط (IOException e) ( Log.e("arduino52", "غير قادر على بدء تشغيل خادم TCP"، e); System.exit(-1); ) ) @Override protected void onDestroy ()( super .onDestroy (); server.stop();) public void onCheckedChanged(CompoundButton ButtonView, boolean isChecked) (بيانات البايت؛ if(isChecked) // إذا تم الضغط على الزر ( data = 1; ) else ( data = 0; ) حاول ( // إرسال البيانات server.send(new byte ((byte)) data)); Catch (IOException e) ( Log.e("arduino52", "مشكلة في إرسال رسالة TCP"، e); ) ) )

يعد تطبيق Android أكثر تعقيدًا إلى حد ما، ولن أصف هيكله بالكامل؛ فهناك مواقع وكتب متخصصة لهذا الغرض. سأخبرك فقط بالنقاط الرئيسية اللازمة لمشروعنا.
لذلك، يتم أولاً تهيئة خادم MicroBridge الخاص بنا، والذي تم تثبيته على المنفذ 4568. يجب أن يكون نفس المنفذ موجودًا في رسم Arduino الخاص بك.
ثم يتم الإعلان عن المعالج onCheckedChanged()والذي يتم استدعاؤه في كل مرة تتغير فيها حالة ToggleButton. بعد ذلك، اعتمادًا على حالة الزر، نقوم بتخزين 1 أو 0 في متغير البيانات، ثم تتم محاولة إرسال هذه البيانات إلى الوظيفة الخادم.إرسال ()

بعد ذلك، نقوم بتوصيل جهاز Android الخاص بنا بالكمبيوتر، ونطلق مشروع Run الخاص بنا، ونختار جهازنا الحقيقي هناك (وليس الجهاز الافتراضي) وننتظر حتى يتم تجميع البرنامج وتثبيته على هاتفك أو جهازك اللوحي.

وHTC Desire مع البرنامج الثابت Cyanogen 7.1.0 RC1 (Android 2.3.4). فقط في حالة، اسمحوا لي أن أذكرك أن كل ما سيتم وصفه أدناه يعمل فقط بدءًا من Android 2.3.4 للهواتف وAndroid 3.1 للأجهزة اللوحية.

ومن الجدير بالذكر هنا أن USB Host Shield هذا ليس ناجحًا تمامًا، خاصة مع Arduino Mega 2560. المشكلة الأولى كانت أن لوحة التوسيع هذه صنعت لـ Arduino UNO، وهي تختلف عن Mega في مواضع الـ Arduino UNO. اتصالات SPI، لذلك اضطررت إلى إضافة وصلات العبور (انظر الصورة). المشكلة الثانية، رغم أنها كانت متوقعة تماماً، كانت الحاجة إلى مصدر طاقة خارجي لتشغيل بطاقة التوسعة هذه. يعتبر USB Host Shield 2.0 من Circuits@Home أكثر نجاحًا، ولكنه أيضًا أكثر تكلفة.

لوحة مع جهات اتصال SPI مترابطة

إعداد برنامج اردوينو

1. إذا لم يكن مثبتًا بالفعل، فقم بتنزيل البرنامج وتثبيته لـ Arduino.
2. قم بتنزيل وفك حزمة ADK (تحتوي على تطبيق DemoKit). يجب أن تظهر مجلدات التطبيق والبرامج الثابتة والأجهزة.
3. قم بتنزيل مكتبة CapSense
4. انسخ البرامج الثابتة/arduino_libs/AndroidAccessory والبرامج الثابتة/arduino_libs/USB_Host_Shield إلى /المكتبات/ .
5. قم بإنشاء دليل CapSense في /libraries/ وانسخ CapSense.cpp وCapSense.h من أرشيف CapSense إليه.

تنزيل البرامج الثابتة

تفضل Google بتقديم رسم DemoKit الخاص بها لـ Arduino. كل ما عليك فعله هو فتحه من البرامج الثابتة/demokit/demokit.pde وتجميعه وتحميله على اللوحة.

اختبار تطبيق أندرويد

تحتوي حزمة DemoKit أيضًا على مصادر تطبيق Android لتوضيح الإمكانيات. تدعونا Google إلى إنشاء مشروع Android بأنفسنا وتجميع هذا التطبيق. أولاً، سنحتاج إلى تثبيت API Level 10. ثم كل شيء بسيط - نقوم بإنشاء مشروع Android ونحدد المسار إلى مجلد التطبيق، في Build Target نحدد Google APIs (النظام الأساسي 2.3.3 ، مستوى API 10). نقوم بتجميع التطبيق وتثبيته على الهاتف. يمكن لأولئك الذين لا يريدون إزعاج التجميع تنزيل ملف APK الجاهز.

يطلق

نقوم ببساطة بتوصيل هاتفنا بـ USB Host Shield. إذا فعلنا كل شيء بشكل صحيح، فسيظهر طلب تشغيل تطبيق DemoKit على الشاشة.

يحتوي التطبيق نفسه على علامتي تبويب - للداخل (الأزرار وعصا التحكم وأجهزة الاستشعار) وللخارج (مصابيح LED والمرحلات والماكينات).

قررت أن بضعة مصابيح LED وزرًا يكفيان للعرض التوضيحي. يمكنك أن ترى كيف تعمل هذه المعجزة بأكملها في الفيديو.

بعض التعليمات البرمجية

في هذا المثال، تتكون الرسائل المرسلة عبر USB من ثلاث بايت:
يحدد البايت الأول أمرًا أو مجموعة أجهزة، على سبيل المثال مصابيح LED - 0x2
يشير البايت الثاني إلى جهاز معين، على سبيل المثال LED الأخضر - 0x1
يحتوي البايت الثالث على القيمة التي تم تمريرها إلى الجهاز، على سبيل المثال الحد الأقصى للسطوع - 0xff

اردوينو

... /* التهيئة */ AndroidAccessory acc("Google, Inc.", "DemoKit", "DemoKit Arduino Board", "1.0", "http://www.android.com", "0000000012345678"); إعداد باطلة () ( .... acc.powerOn ()؛) حلقة باطلة () ( بايت رسالة؛ /* التحقق من الاتصال */ إذا (acc.isConnected ()) ( /* تلقي رسالة من جهاز أندرويد */ int len = acc.read(msg, sizeof(msg), 1); if (len > 0) ( /* رسالة لمصابيح LED */ if (msg == 0x2) ( if (msg == 0x0)analogWrite(LED3_RED, msg) وإلا إذا (msg == 0x1) التناظرية (LED3_GREEN، msg)؛ وإلا إذا (msg == 0x2) التناظرية (LED3_BLUE، msg = 0x1) ( msg = 0؛ msg = b ? 1: 0; / * إرسال حالة الزر */ acc.write(msg, 3);

ذكري المظهر

import com.android.future.usb.UsbAccessory; import com.android.future.usb.UsbManager; ... تنفذ تطبيقات Demokitactivity للفئة العامة قابلة للتشغيل (USBManager خاص Musbmanager؛ USBACCESSORY MACCCESSORY؛ FileinPutstream MinPuSTREAM؛ Utputstream؛ ... Private Void Openaccessory (USBACCESSORY)) ( mAccessory = ملحق؛ FileDescriptor fd = mFileDescriptor.getFileDescriptor()؛ mInputStream = FileInputStream الجديد (fd); mOutputStream = new FileOutputStream(fd); Thread thread = new Thread(null, this, "AccessoryThread"); byte;< ret) { int len = ret - i; switch (buffer[i]) { case 0x1: // сообщение от кнопки if (len >= 3) ( الرسالة m = message.obtain(mHandler, MESSAGE_SWITCH); m.obj = new SwitchMsg(buffer, buffer); mHandler.sendMessage(m); ) i += 3; استراحة؛ ) ) ) // مثال للاستخدام - قم بتشغيل مؤشر LED الأحمر عند السطوع الكامل: // mActivity.sendCommand((byte)2, (byte)0, (byte)255) public void sendCommand(byte command, byte target, قيمة int) (مخزن البايت = بايت جديد؛ إذا (القيمة > 255) القيمة = 255؛ المخزن المؤقت = الأمر؛ المخزن المؤقت = الهدف؛ المخزن المؤقت = (بايت) القيمة؛ إذا (mOutputStream!= null && buffer != -1) (حاول ( mOutputStream.write(buffer); Catch (IOException e) ( ... ) ) ) )

الاستنتاجات

من خلال فتح مثل هذه الفرص، تعتمد Google، بالطبع، في المقام الأول على ظهور عدد كبير من ملحقات Android النشطة، ولكن ليس الأقل أهمية هو حقيقة أننا، في جوهرها، نحصل على جهاز مناسب للتفاعل مع أجهزة الاستشعار المختلفة وأجهزة الاستشعار والمحركات. يمكن لمثل هذا الجهاز أن يصبح بسهولة عقلًا لشيء آلي.

أيضًا، يجب ألا ننسى أن جهاز Android الخاص بـ Arduino يمكن أن يعمل بمثابة لوحة توسيع تحتوي على نظام تحديد المواقع العالمي (GPS) وBluetooth وWiFi ومقياس التسارع وغير ذلك الكثير.

أخبر الأصدقاء