الاتصال أشياء الروبوت الهاتف ذكي مع اتصالات قريبة 2.0
Arabic (العربية/عربي) translation by Adjatay Bashroh Aldad (you can also view the original English article)
واحد من أول الأشياء التي تريد المستخدمين القيام به مع أحد الأجهزة منزلية ذكية جديدة هو الحصول عليه على الشبكة اللاسلكية. العديد من الأجهزة التونسي تفتقر إلى الشاشة أو لوحة المفاتيح، وذلك إحدى الطرق للقيام بذلك بالسماح للمستخدمين بإقران الهاتف ذكي للجهاز حيث أن يمكن التحكم وتكوين الجهاز. هذا كيفية عمل عش وصفحة Google الرئيسية، بين أمور أخرى، وال API 2.0 اتصالات قريبة يجعل من الممكن.



في هذه المقالة سوف تحصل على مقدمة إلى API 2.0 الاتصالات القريبة وكيف يمكن استخدامه للزوج الروبوت ذكي إلى جهاز 'الروبوت الأشياء' من أجل تزويد المستخدمين بجهاز رفيق التجربة.
ما هي الاتصالات القريبة API؟
يسمح API اتصالات قريبة اثنين من الأجهزة بالاتصال مع بعضها البعض مباشرة عبر تقنية Bluetooth أو لاسلكية دون استخدام نقطة وصول مركزية. وهناك الدورين الذي قد تتخذه جهاز: المعلن، والذي يتيح لأجهزة أخرى تعرف أنه متاح ليكون متصلاً ب، ومكتشف، الذي يحاول العثور على المعلنين والاتصال بهم. بمجرد توصيل مجموعة من الأجهزة (يعرف أيضا باسم "النهاية" في هذه المرحلة) معا، أنهم قد إرسال البيانات إلى أي نقطة النهاية الأخرى في شبكة اتصالات القريبة.
هناك اثنين من الاستراتيجيات التي يمكن استخدام API اتصالات القريبة لتوصيل الأجهزة معا. الأول، P2P_STAR، هو أبسط للعمل مع. وهو يتألف من المعلن واحد التي يمكن أن تدعم متعددة المكتشفون الاتصال به. الثاني، P2P_CLUSTER، يسمح لأي عدد من الأجهزة للاتصال، وقبول الاتصالات من أي عدد من الأجهزة. يؤدي هذا إلى إنشاء شبكة متداخلة مع نقطة مركزية أقل من الفشل، على الرغم من أن الأمر قد يستغرق أيضا المزيد من عرض النطاق الترددي. هذه الاستراتيجية مثالي للحمولات الأصغر حجماً التي لا تحتاج إلى الذهاب من خلال جهاز مركزي، كما هو الحال للألعاب.
هذا البرنامج التعليمي سوف تركز على استخدام استراتيجية نجمة أبسط لتوصيل جهاز التونسي كمعلن، وسيتم استخدام الهاتف الذكي للمستخدم كمكتشف. ومع ذلك، نهاية، ينبغي أيضا أن معلومات كافية لتنفيذ استراتيجية كتلة كذلك.
دعونا الحصول على إعداد!
وسوف يكون هناك اثنين من وحدات لهذا البرنامج التعليمي: التطبيق المحمول والتطبيق الروبوت الأشياء. حالما تقوم بإنشاء تلك في الاستوديو الروبوت، سوف تحتاج إلى تضمين التبعية جوجل تلعب الخدمات الاتصالات القريبة في ملف build.gradle مستوى الوحدة النمطية لكل تطبيقات.
compile ‘com.google.android.gms:play-services-nearby:11.6.2’
بعد أن قمت بتشغيل مزامنة جرادلي، فتح الملفات AndroidManifest.xml لكل من وحدات وتتضمن الأذونات التالية ضمن تطبيق
العقد.
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
أجهزة الروبوت الأشياء سيكون هذه الأذونات الممنوحة للجهاز بعد إعادة التشغيل، على الرغم من أن سوف تحتاج إلى طلب إذن موقع من المستخدمين على التطبيق الهاتف.
MainActivity
ستحتاج كل من العناصر وحدات الجوّال إلى تنفيذ الواجهات المستخدمة في عمليات رد خدمات Google Play ، على النحو التالي:
public class MainActivity extends FragmentActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { @Override public void onConnected(@Nullable Bundle bundle) {} @Override public void onConnectionSuspended(int i) {} @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {} }
بمجرد لك التحقق من أن المستخدم لديه أذونات الموقع المناسب في onCreate()
، يمكنك البدء بالاتصال 'خدمات جوجل اللعب' استخدام API اتصالات القريبة.
mGoogleApiClient = new GoogleApiClient .Builder(this, this, this) .addApi(Nearby.CONNECTIONS_API) .enableAutoManage(this, this) .build();
عند الانتهاء منGoogleApiClient
الاتصال، سيتم استدعاء الأسلوب onConnected()
. هذا حيث سوف تبدأ بالدعاية أو عملية الاكتشاف للجهاز الخاص بك. وبالإضافة إلى ذلك، سوف تحتاج كل التطبيقات على معرف خدمة، وسلسلة معر
ف فريد.
private static final String SERVICE_ID = "UNIQUE_SERVICE_ID";
الإعلان عن اتصالات القريبة
عند العمل مع اتصالات API القريبة، سوف تحتاج إلى إنشاء كوConnectionLifecycleCallback
الذي، كما يوحي الاسم، يمكن تشغيلها على أحداث دورة حياة اتصال مختلفة. لهذا العرض، سوف نستخدم فقط الأسلوب onConnectionInitiated()
. كما أنها ستوفر إشارة إلى نقطة النهاية الأولى الذي يحاول الاتصال به وقبول الاتصال ثم وقف الدعاية. إذا كان الاتصال غير ناجح، يمكنك إعادة تشغيل التطبيق إعلانية.
private final ConnectionLifecycleCallback mConnectionLifecycleCallback = new ConnectionLifecycleCallback() { @Override public void onConnectionInitiated(String endpointId, ConnectionInfo connectionInfo) { endpoint = endpointId; Nearby.Connections.acceptConnection(mGoogleApiClient, endpointId, mPayloadCallback) .setResultCallback(new ResultCallback<com.google.android.gms.common.api.Status>() { @Override public void onResult(@NonNull com.google.android.gms.common.api.Status status) { if( status.isSuccess() ) { //Connection accepted } } }); Nearby.Connections.stopAdvertising(mGoogleApiClient); } @Override public void onConnectionResult(String endpointId, ConnectionResolution result) {} @Override public void onDisconnected(String endpointId) {} };
ربما لاحظتم أن الطريقة المذكورة أعلاه أيضا مراجع كائن بايلوادكالباك
. يحتوي هذا الكائن على الأساليب التي يتم استدعاؤها عند إرسال حمولة البيانات من المعلن إلى نقطة نهاية، فضلا عن عند تلقي البيانات من نقطة نهاية. أسلوب onPayloadReceived()
حيث أن تعاملنا مع أي إرسال البيانات إلى جهاز 'الروبوت الأشياء' لدينا. يحتوي هذا الأسلوب على الكائن الحمولة
التي يمكن أن تتحول إلى صفيف من البايت، وسلسلة
أحرف يمثل عنوان نقطة النهاية للجهاز المرسل.
private PayloadCallback mPayloadCallback = new PayloadCallback() { @Override public void onPayloadReceived(String endpoint, Payload payload) { Log.e("Tuts+", new String(payload.asBytes())); } @Override public void onPayloadTransferUpdate(String endpoint, PayloadTransferUpdate payloadTransferUpdate) {} };
عند هذه النقطة، يمكنك بدء الإعلان على جهازك التونسي بالطريقة التالية:
Nearby.Connections.startAdvertising( mGoogleApiClient, "Device Name", SERVICE_ID, mConnectionLifecycleCallback, new AdvertisingOptions(Strategy.P2P_STAR));
ستلاحظ أن هذا حيث نطبق استراتيجية P2P_STAR لشبكة اتصالات المجاورة لنا.
عندما تريد إرسال حمولة إلى جهاز آخر، يمكنك استخدام الأسلوب Nearby.Connections.sendPayload()
مع مرجع API جوجل عميل، واسم نقطة النهاية الخاصة بك، ورسم صفيف بايت من البيانات ترغب في إرسال.
Nearby.Connections.sendPayload(mGoogleApiClient, endpoint, Payload.fromBytes("Message".getBytes()));
تلميح: تمكين وأي فأي على إعادة التشغيل
خدعة واحدة التي وجدتها مفيدة في حين تعمل مع API اتصالات قريبة على جهاز 'الروبوت الأشياء' هو إعادة تمكين وأي فأي على إعادة التشغيل، كالجهاز يمكن في نهاية المطاف مع اللاسلكية تعطيل إذا كان يتم إيقاف تشغيل الجهاز أو انقطاع الطاقة أثناء الإعلان. يمكنك القيام بذلك باسترداد WifiManager
نظام ويفيماناجير والدعوة setWifiEnabled()
.
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); wifiManager.setWifiEnabled(true);
اكتشاف الأجهزة مع اتصالات قريبة
اكتشاف جهاز يتبع نمطاً مماثلاً معظمها للإعلان. سيتم الاتصال العميل API جوجل الجهاز وبدء اكتشاف. عندما يتم العثور على معلن، سيتم طلب المكتشف للاتصال بالمعلن. إذا كان المعلن يوافق على الطلب، ثم الجهازين سيتم الاتصال وتكون قادرة على إرسال حمولات ذهابا وإيابا. سيتم استخدام المكتشف بايلوPayloadCallback
مثل المعلن.
private PayloadCallback mPayloadCallback = new PayloadCallback() { @Override public void onPayloadReceived(String s, Payload payload) { Log.e("Tuts+", new String(payload.asBytes())); } @Override public void onPayloadTransferUpdate(String s, PayloadTransferUpdate payloadTransferUpdate) {} };
المكتشف في ConnectionLifecycleCallback
(موبايل التطبيق) أيضا مشابهاً للمعلن:
private final ConnectionLifecycleCallback mConnectionLifecycleCallback = new ConnectionLifecycleCallback() { @Override public void onConnectionInitiated(String endpointId, ConnectionInfo connectionInfo) { Nearby.Connections.acceptConnection(mGoogleApiClient, endpointId, mPayloadCallback); mEndpoint = endpointId; Nearby.Connections.stopDiscovery(mGoogleApiClient); } @Override public void onConnectionResult(String endpointId, ConnectionResolution result) {} @Override public void onDisconnected(String endpointId) {} };
ما هو مختلف هو أن المكتشفون سيتطلب اندبوينتديسكوفيريكالباك التي سيتم
استخدامها عند العثور على معلن ولكن لم تتصل. وسيشرع هذا الكائن طلب الاتصال بالمعلن.
private final EndpointDiscoveryCallback mEndpointDiscoveryCallback = new EndpointDiscoveryCallback() { @Override public void onEndpointFound( String endpointId, DiscoveredEndpointInfo discoveredEndpointInfo) { if( discoveredEndpointInfo.getServiceId().equalsIgnoreCase(SERVICE_ID)) { Nearby.Connections.requestConnection( mGoogleApiClient, "Name", endpointId, mConnectionLifecycleCallback); } } @Override public void onEndpointLost(String endpointId) { Log.e("Tuts+", "Disconnected"); } };
عندما الخاص بك مكتشف قد تتصل خدمات جوجل اللعب، فيمكنك بدء اكتشاف باستخدام الأمر التالي:
Nearby.Connections.startDiscovery( mGoogleApiClient, SERVICE_ID, mEndpointDiscoveryCallback, new DiscoveryOptions(Strategy.P2P_STAR));
وأخيراً، عندما تريد قطع الاتصال معلن، يمكنك استخدام الأسلوب disconnectFromEndpoint()
من API اتصالات القريبة. عموما فكرة جيدة للقيام بذلك في رد onDestroy()
النشاط
الخاص بك.
Nearby.Connections.disconnectFromEndpoint(mGoogleApiClient, mEndpoint);
استنتاج
في هذه المقالة تعرفنا API 2.0 الاتصالات القريبة للروبوت في سياق تهيئة تطبيق مصاحب لجهاز 'الروبوت الأشياء التونسي'.
تجدر الإشارة إلى أنه يمكن استخدام هذا API لأي من أجهزة الروبوت التي كنت ترغب في شبكة معا، من الهواتف وأقراص لمربعات التلفزيون الروبوت و ارتداء الروبوت سمارتواتشيس. API يوفر طريقة بسيطة للاتصال والتواصل دون استخدام الإنترنت أو جهاز توجيه مركزي، ويضيف فائدة كبيرة لمجموعة الأدوات لتطوير الروبوت الخاصة بك.
حين كنت هنا، تحقق بعض من وظيفة أخرى في تطوير الروبوت الأشياء التونسي!