القائمة الرئيسية

الصفحات

تطبيقات إنترنت الأشياء : برمجة تطبيق مصباح يدوي Arduino IDE و Android Studio

IoT Apps Flashlight App Code in Arduino IDE and Android Studio، Internet of Things Applications: Flashlight App Code for Arduino IDE and Android Studio، برمجة ESP32 بواجهة برمجة تطبيقات REST للتحكم في مصباح LED، تصميم واجهة مستخدم Android بسيطة للتحكم في جهاز IoT، كتابة كود Java في Android Studio لإرسال طلبات HTTP إلى جهاز IoT، توصيل مصباح LED بجهاز ESP32 للتحكم فيه عبر تطبيق Android، إنترنت الأشياء، IoT، Android Studio، Java، تطبيق مصباح يدوي IoT، التحكم في الأجهزة عن بعد، ESP32، برمجة أندرويد IoT، اتصال واي فاي IoT، واجهة برمجة تطبيقات REST IoT، Arduino IDE، اردوينو، تطبيقات إنترنت الأشياء : برمجة تطبيق مصباح يدوي Arduino IDE و Android Studio، تطبيق مصباح يدوي IoT، ESP32، برمجة أندرويد IoT، واجهة برمجة تطبيقات REST IoT، Arduino IDE، اردوينو،




تطبيقات إنترنت الأشياء : برمجة تطبيق مصباح يدوي Arduino IDE و Android Studio 



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

** المتطلبات :

- Android Studio: مثبت على جهاز الكمبيوتر .
- جهاز Android: لتشغيل التطبيق.
- جهاز ESP32: مع القدرة على الاتصال بشبكة Wi-Fi.
- بيئة تطوير ESP32: مثبتة (Arduino IDE مع دعم ESP32 أو ESP-IDF).
- مصباح LED: لتوصيله بجهاز ESP32.
- مقاومات وأسلاك توصيل: حسب الحاجة لتوصيل LED بـ ESP32.
- شبكة Wi-Fi: لربط كل من جهاز Android و ESP32.


خطوات برمجة تطبيق مصباح يدوي للتحكم في أجهزة إنترنت الأشياء IoT 



الخطوة 1: برمجة جهاز ESP32 (جهاز إنترنت الأشياء)

في هذه الخطوة، سنقوم ببرمجة جهاز ESP32 لإنشاء واجهة برمجة تطبيقات REST بسيطة. 
ستستقبل هذه الواجهة طلبات HTTP GET لتشغيل وإيقاف المصباح المتصل به.
* كود (Arduino IDE):

Arduino




#include <WiFi.h>
#include <WebServer.h>

// بيانات اعتماد شبكة Wi-Fi
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";

// منفذ الويب
WebServer server(80);

// منفذ GPIO المتصل بالمصباح LED (تعديله حسب توصيلك)
const int ledPin = 2;

// حالة المصباح
bool ledState = false;

// معالج لطلب تشغيل المصباح
void handleLedOn() {
  ledState = true;
  digitalWrite(ledPin, HIGH);
  server.send(200, "text/plain", "LED ON");
}

// معالج لطلب إيقاف المصباح
void handleLedOff() {
  ledState = false;
  digitalWrite(ledPin, LOW);
  server.send(200, "text/plain", "LED OFF");
}

// معالج لطلب حالة المصباح
void handleLedStatus() {
  server.send(200, "text/plain", ledState ? "ON" : "OFF");
}

// معالج للصفحة الرئيسية (اختياري)
void handleRoot() {
  server.send(200, "text/html", "<h1>ESP32 IoT Flashlight</h1><p><a href='/led/on'>Turn On</a> | <a href='/led/off'>Turn Off</a> | <a href='/led/status'>Status</a></p>");
}

// معالج لصفحة غير موجودة
void handleNotFound() {
  server.send(404, "text/plain", "Not found");
}

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW); // ابدأ والمصباح مطفأ

  // الاتصال بشبكة Wi-Fi
  Serial.println("Connecting to WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("\nConnected to WiFi");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  // تحديد مسارات API
  server.on("/", handleRoot);
  server.on("/led/on", handleLedOn);
  server.on("/led/off", handleLedOff);
  server.on("/led/status", handleLedStatus);
  server.onNotFound(handleNotFound);

  // بدء تشغيل الخادم
  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
  server.handleClient();
}


--

* شرح كود ESP32 :
- يتضمن المكتبات اللازمة للواي فاي وخادم الويب.
- يقوم بتحديد بيانات اعتماد شبكة الواي فاي ومنفذ GPIO المتصل بالمصباح.
- ينشئ خادم ويب على المنفذ 80.
- يحدد معالجات لطلبات HTTP GET على المسارات /led/on (لتشغيل المصباح)، /led/off (لإيقاف المصباح)، و /led/status (للحصول على حالة المصباح).
- يتصل بشبكة الواي فاي ويعرض عنوان IP الخاص به.
- يبدأ تشغيل خادم الويب.
- في حلقة loop()، يستمع الخادم للعملاء ويعالج طلباتهم.

الخطوة 2 : تصميم واجهة مستخدم تطبيق Android

في هذه الخطوة، سنقوم بتصميم واجهة مستخدم بسيطة لتطبيق Android تحتو
ي على زرين: "تشغيل" و "إيقاف".
* ملف activity_main.xml (layout) :
XML




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="مصباح يدوي IoT"
        android:textSize="24sp"
        android:layout_marginBottom="32dp" />

    <Button
        android:id="@+id/buttonOn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="تشغيل"
        android:padding="16dp"
        android:textSize="18sp"
        android:layout_marginBottom="16dp" />

    <Button
        android:id="@+id/buttonOff"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="إيقاف"
        android:padding="16dp"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/statusTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="الحالة: غير متصل"
        android:textSize="16sp" />

</LinearLayout>



--

* شرح تخطيط Android:
- يستخدم LinearLayout بترتيب عمودي لتنظيم العناصر. 
- يحتوي على TextView لعرض عنوان التطبيق.
- يحتوي على زري Button بمعرفات buttonOn و buttonOff للتحكم في المصباح.
- يحتوي على TextView بمعرف statusTextView لعرض حالة الاتصال أو حالة المصباح.

الخطوة 3 : كتابة كود Java لتطبيق Android

في هذه الخطوة، سنكتب كود Java في ملف MainActivity.java للتفاعل
 مع واجهة برمجة تطبيقات REST على جهاز ESP32 عند النقر على الأزرار.




* ملف MainActivity.java :
java





package com.example.iotflashlight;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

private Button buttonOn;
private Button buttonOff;
private TextView statusTextView;
private String esp32IpAddress = "YOUR_ESP32_IP_ADDRESS"; // استبدل بعنوان IP الخاص بجهاز ESP32

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // السماح بتنفيذ عمليات الشبكة على مؤشر واجهة المستخدم الرئيسي (لتبسيط المثال، لا يوصى به للإنتاج)
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    buttonOn = findViewById(R.id.buttonOn);
    buttonOff = findViewById(R.id.buttonOff);
    statusTextView = findViewById(R.id.statusTextView);

    buttonOn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendHttpRequest("/led/on");
        }
    });

    buttonOff.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sendHttpRequest("/led/off");
        }
    });

    // الحصول على حالة المصباح عند بدء التطبيق (اختياري)
    getLedStatus();
}

private void sendHttpRequest(String endpoint) {
    try {
        URL url = new URL("http://" + esp32IpAddress + endpoint);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        int responseCode = connection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder response = new StringBuilder();
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            reader.close();
            statusTextView.setText("الحالة: " + response.toString());
        } else {
            Toast.makeText(this, "فشل الطلب: " + responseCode, Toast.LENGTH_SHORT).show();
        }
        connection.disconnect();
    } catch (IOException e) {
        Toast.makeText(this, "خطأ في الاتصال: " + e.getMessage(), Toast.LENGTH_SHORT).show();
        statusTextView.setText("الحالة: غير متصل");
    }
}

private void getLedStatus() {
    sendHttpRequest("/led/status");
}
}



--

شرح كود Android Java :

  * يحصل على مراجع لأزرار وعرض الحالة من التخطيط.
  * يحدد عنوان IP الخاص بجهاز ESP32 
(**تأكد من استبداله بعنوان IP الفعلي لجهازك على شبكة الواي فاي**).
  * يضيف مستمعين للنقر على الأزرار "تشغيل" و "إيقاف" لاستدعاء وظيفة
 `sendHttpRequest()` مع نقطة النهاية المناسبة.
  * تقوم وظيفة `sendHttpRequest()` بإنشاء كائن `URL` وإرسال
 طلب HTTP GET إلى جهاز ESP32.
  * تقوم بمعالجة استجابة HTTP وعرض الحالة في `statusTextView`.
  * تقوم وظيفة `getLedStatus()` بالحصول على الحالة الأولية
 للمصباح عند بدء تشغيل التطبيق (اختياري).

  * ملاحظة : يتم استخدام 
`StrictMode.ThreadPolicy.Builder().permitAll().build()` 
للسماح بتنفيذ عمليات الشبكة على مؤشر واجهة المستخدم الرئيسي لتبسيط المثال.
 **في تطبيقات الإنتاج، يجب تنفيذ عمليات الشبكة على مؤشرات خلفية 
(باستخدام AsyncTask أو ExecutorService أو مكتبات أخرى) لتجنب حظر واجهة المستخدم.**

الخطوة 4 : توصيل المكونات (الأجهزة)

1. قم بتوصيل مصباح LED بمنفذ GPIO المحدد
 (`ledPin = 2` في المثال) على جهاز ESP32 عبر مقاومة مناسبة (لحماية LED من التيار الزائد).
2. تأكد من أن جهاز ESP32 متصل بنفس شبكة الواي فاي التي سيتصل بها جهاز Android الخاص بك.
3.قم بتحميل كود ESP32 إلى جهاز ESP32 باستخدام Arduino IDE أو بيئة تطوير ESP32 الأخرى.
4. قم بتشغيل تطبيق Android على جهاز Android الخاص بك.

الخطوة 5: تشغيل التطبيق

1. تأكد من أن جهاز Android الخاص بك متصل بنفس شبكة الواي فاي التي يتصل بها جهاز ESP32.
2. شغل تطبيق "مصباح يدوي IoT" على جهاز Android الخاص بك.
3. انقر على زر "تشغيل" لإرسال طلب HTTP إلى جهاز ESP32، مما سيؤدي إلى تشغيل المصباح المتصل به.
4. انقر على زر "إيقاف" لإرسال طلب HTTP آخر لإيقاف المصباح.
5. يجب أن يعرض `statusTextView` الحالة الحالية للمصباح بناءً على الاستجابة من جهاز ESP32.

*خاتمة:

لقد قمنا في هذا المقال بإنشاء تطبيق Android بسيط يتحكم في جهاز
 إنترنت الأشياء خارجي (ESP32) لتشغيل وإيقاف المصباح. 
يوضح هذا المشروع الأساسيات اللازمة لبناء تطبيقات IoT التي تتفاعل مع
 الأجهزة المتصلة عبر شبكة Wi-Fi باستخدام واجهات برمجة تطبيقات REST. 
يمكنك توسيع هذا المشروع لإضافة المزيد من الميزات والتحكم في أجهزة IoT أخرى. 
تذكر دائمًا التعامل مع عمليات الشبكة على مؤشرات خلفية في تطبيفات الإنتاج لضمان تجربة مستخدم سلسة.
آمل أن يكون هذا المقال المفصل لكل خطوة واضحًا ومفيدًا لك!


جدول المحتويات