Android IoT
بسم الله الرحمن الرحيم
أطلقت google مؤخراً Android IoT وفي هذه المقالة البسيطة سنقوم بثبيت النسخة على ٌRaspberry Pi 3 وعمل مشروع بسيط.
بداية عليك تحميل النسخة الخاصة بالـ Raspberry Pi 3 من هنا وبعد ذلك تثبيته على SD card حسب النظام الذي تستخدمه, بالنسبة لمستخدمي Ubuntu كالتالي
sudo dd if=Downloads/androidthings_rpi3_devpreview_4.img of=/dev/yourFlash
بعد ذلك ادخل SD card في Raspberry Pi وأوصل الكهرباء, وسلك Ethernet يفترض أن ترى مثل هذه الشاشة
لاحظ وجود IP في أسفل الصفحة فهو الذي سنستخدمه في التواصل مع Raspberry Pi وإيصاله بالشبكة.
الان نفتح Android studio وعن طريق terminal الموجود فيه نقوم بكتابة الأمر التالي
adb connect <ip-address>
ip address هو الرقم المكتوب لديك في أسفل الشاشة بعد Ethernet IP, لو تم الاتصال بشكل صحيح سيظهر هذا السطر
connected to <ip-address>:5555
, بهذه الطريقة نكون متصلين بالـ Raspberry Pi لكن, نريد أن نجعل الأتصال عن طريق wifi
فنقوم بكتابة الأمر التالي
adb shell am startservice \
-n com.google.wifisetup/.WifiSetupService \
-a WifiSetupService.Connect \
-e ssid <Network_SSID> \
-e passphrase <Network_Passcode>
ssid أسم الشبكة المراد الاتصال بها
passcode الرقم السري الخاص بالشبكة
انتهينا من فقرة التثبيت إن صح التعبير وقد يتخللها الكثير من الإشكالات وdebug وأرحب بأي استفسار لتجاوز هذه المهمة, الان لننتقل إلى برمجة الـ board.
أولا علينا أن نقوم بتوصيل كما في الصورة
وهنا شرح لـ pins الخاصة بـ Rpi
الكود كالتالي
public class MainActivity extends Activity {
private Gpio mLedGpio;
private boolean mLedState = false;
Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.button);
PeripheralManagerService service = new PeripheralManagerService(); //system service responsible for managing peripheral connections
try {
String pinName = "BCM4";//pin number
mLedGpio = service.openGpio(pinName);
mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//Output pin ,start with 0v
} catch (IOException e) {
e.printStackTrace();
}
mButton.setOnClickListener(v -> {
try {
if (mLedState) {
mLedGpio.setDirection(Gpio.ACTIVE_HIGH);//5v
mLedState = false;
}else {
mLedGpio.setDirection(Gpio.ACTIVE_LOW);//0v
mLedState = true;
}
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
أما الـ UI فيحتوي button واحد id الخاص فيه هو button
بداية لدينا
PeripheralManagerService service = new PeripheralManagerService();
PeripheralManagerService هي Service من من نظام الأندرويد تسهل لك التعامل مع pin الخاصة بـ Rpi
بعد ذلك قمنا بختيار pin عن طريق اسمه
String pinName = "BCM4";
mLedGpio = service.openGpio(pinName);
mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
وربطه بمتغير من نوع Gpio, ثم قمنا بضبط إعداده بأن يكون output ويبدأ بـ 0 فولت ويوجد العديد من Constant التي تساعد في هذه الاعدادت
mButton.setOnClickListener(v -> {
if (mLedState) {
mLedGpio.setDirection(Gpio.ACTIVE_HIGH);
mLedState = false;
}else {
mLedGpio.setDirection(Gpio.ACTIVE_LOW);
mLedState = true;
}
هنا قلنا في حال تم الضغط على button تأكد من حالته, في حال كان on اجعله off والعكس, ونلاحظ أننا قمنا بأستخدام المزيد من Constant التي تحدثنا عنها في السطر السابق.
ونلاحظ أيضا أننا كتبنا الدالة الخاصة بنا بطريقة lambda.
لمعلومات أكثر عن أساسيات hardware
واللاستزادة :
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !