الجمعة، 13 نوفمبر 2020

تحكم في مصباح LED عبر الإنترنت من هاتفك المحمول باستخدام Raspberry Pi

 الأشياء المستخدمة في هذا المشروع

مكونات الأجهزة

رازبيري باي 4 موديل بي

بطاقة ذاكرة فلاش ، بطاقة SD

ثنائي ضوئي ليد

اسلاك التوصيل مع لوحة الربط


تطبيقات البرمجيات والخدمات عبر الإنترنت

سحابة العظمة

Raspberry Pi Raspbian


قصة

ستوحاة من البرنامج التعليمي Internet Switch من Talha الذي كان يعتمد على ESP8266 ، فكرت في فعل الشيء نفسه على Raspberry Pi بدلاً من ذلك.

إذن هذا ما سنفعله في هذا البرنامج التعليمي. سنستخدم Raspberry Pi و Grandeur Cloud لبناء مفتاح إنترنت. بعبارة أخرى ، سوف نتحكم في مؤشر LED متصل بدبوس GPIO الخاص بـ RPi من تطبيق الويب الخاص بنا والذي سنقوم ببنائه باستخدام Grandeur Cloud كخلفية لدينا. سيرسل تطبيق الويب الخاص بنا أمر التشغيل / الإيقاف إلى السحابة الذي سيستمع إليه RPi وبالتالي يقوم بتحديث الجهد على دبوس LED الخاص به.

لماذا سحابة Grandeur؟

إذا لم نستخدم خلفية مُدارة ، فسيتعين علينا دمج خادم MQTT وواجهة برمجة تطبيقات للعميل بين تطبيقنا وجهازنا (RPi) للسماح بإجراء الاتصالات في الوقت الفعلي بينهما. وإذا كان لدينا عدة RPis ونريد الإشارة إلى بعضها لتشغيل مصابيح LED الخاصة بهم والبعض الآخر للبقاء في وضع إيقاف التشغيل ، فإن حانة / فرع MQTT سيفعل ذلك من أجلنا.

ولكن إذا احتجنا إلى تخزين السجلات أيضًا ، دعنا نقول متى تم تشغيل أو إيقاف تشغيل LED الخاص بـ RPi1 ومن فعل ذلك ، فسنحتاج إلى دمج قاعدة بيانات (mySQL أو mongoDB) مع نظامنا أيضًا. وبالمثل ، فإن إضافة تخزين الملفات ، و OTA ، وغيرها من الميزات المماثلة ستؤدي إلى زيادة عدد عمليات الدمج التي نحتاج إلى القيام بها وبالتالي تعقيد نظامنا.


يوفر Grandeur Cloud كل هذه الأشياء في تكامل واحد ، ويمنحنا واجهة برمجة تطبيقات واحدة متوفرة بلغة python و javascript و C لـ RPis و ESPs وجميع Arduinos. لهذا السبب يُفضل عادةً كخلفية في إنترنت الأشياء ، باعتباره التكامل الفردي لمعظم حالات استخدام إنترنت الأشياء.

دعونا نتعمق في مشروعنا الآن.

إعداد نظام Raspberry Pi OS الخاص بنا

بادئ ذي بدء ، لنقم بإعداد Raspberry Pi الخاص بنا مع نظام التشغيل. يمكنك اتباع هذه الخطوات لإعداد RPi الجديد الخاص بك:

قم بتنزيل Raspberry Pi Imager من هنا وقم بتثبيته.

قم بتوصيل بطاقة SD بجهاز الكمبيوتر الخاص بك وقم بتشغيل مصور RPi.

اختر نظام التشغيل الذي تريد تشغيل RPi عليه. كنت أرغب في استخدام RPi في الوضع بدون رأس بدون واجهة المستخدم الرسومية لسطح المكتب لإبقاء الأشياء خفيفة قدر الإمكان وعدم توصيل شاشة بـ RPi. لذلك قمت بتثبيت Raspbian Lite.

اختر بطاقة SD الخاصة بك وانقر فوق كتابة.

بمجرد اكتمال الكتابة ، قم بإزالة بطاقة SD وإدخالها مرة أخرى ، إذا كانت على نظام Mac ، أو اتركها على windows.

افتح بطاقة SD (المسماة التمهيد) من المستكشف ، وأنشئ ملفًا جديدًا باسم wpa_supplicant.conf وضع ما يلي فيه واستبدل أقواس الزاوية بالمعلمات المقابلة

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=<Insert 2 letter ISO 3166-1 country code here>

network={
ssid="<Name of your wireless LAN>"
psk="<Password for your wireless LAN>"
}

قم بإنشاء ملف فارغ باسم ssh في التمهيد. سيسمح لك ذلك بالاتصال بمحطة RPi الخاصة بك من جهاز الكمبيوتر الخاص بك من خلال ssh (غلاف آمن) ، دون الحاجة إلى شاشة منفصلة.

قم بإخراج بطاقة SD وإزالتها من جهاز الكمبيوتر الخاص بك. أدخله في RPi وقم بتشغيله. سيتصل RPi بشبكة WiFi الخاصة بك باستخدام تكوينات WiFi التي قدمتها في ملف wpa_supplicant.conf.

في جهاز الكمبيوتر الخاص بك ، افتح Terminal وقم بتشغيل الأمر ping للتحقق مما إذا كان RPi قد وصل عبر الإنترنت باستخدام SSID و PSK اللذين قدمتهما في ملف wpa_supplicant.conf:

    ping raspberrypi.local

    إذا نجح الأمر ping ، فهذا يعني أن RPi متصل بنقطة وصول جهاز التوجيه الخاص بك. يمكنك الآن إدراج RPi الخاص بك. pi هو حساب المستخدم الافتراضي في Raspbian والذي يمكنك تسجيل الدخول إليه عن طريق تشغيل:

    ssh pi@raspberrypi.local

    إذا طلبت كلمة المرور ، فاستخدم "Raspberry".

    الآن بعد أن أصبحت متصلاً بمحطة Raspbian ، قم بتحديث مستودعاتها وإصدار python الذي تريد استخدامه

    sudo apt-get update
    sudo apt-get install python3 python3-env

    الخطوة الأولى: البدء

    أنشئ مشروعًا جديدًا من خلال زيارة تطبيق الويب Grandeur Cloud dashboard.

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

    قم بإنشاء حساب مستخدم جديد من علامة التبويب الحسابات. سنقوم لاحقًا بتسجيل الدخول إلى تطبيقنا باستخدام البريد الإلكتروني وكلمة المرور اللذين ننشئهما الآن. هذه ميزة رائعة أخرى لـ Grandeur Cloud: يمكن لعدة مستخدمين استخدام تطبيقك من خلال تسجيل الدخول باستخدام رسائل البريد الإلكتروني وكلمات المرور الخاصة بهم. يمكن لكل مستخدم الاقتران والتفاعل مع أجهزته الخاصة. تم بناء المصادقة في قلب Grandeur Cloud. يتم توضيح إنشاء المستخدم

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

    لا يمكن للمستخدم التفاعل مع جهاز ما لم يتم إقرانه به. يجعل إقران جهاز المستخدم هو المسؤول عن الجهاز - مما يعني أنه يمكن للمستخدم جلب / تحديث متغيرات أجهزته المقترنة. هناك طريقتان يمكنك من خلالهما إقران جهازك: 1) باستخدام Cloud Dashboard ، أو 2) من خلال تطبيق الويب باستخدام وظيفة pairDevice () لواجهة برمجة تطبيقات الجهاز. هذه الطريقة الثانية لها أهمية كبيرة إذا نظرت إليها من وجهة نظر الإنتاج. مثلما يمكنك الآن شحن منتجات أجهزتك ، ويمكن للمستخدمين تسجيل الدخول إلى تطبيقك والمطالبة بملكية جهاز يشترونه من متجرك عن طريق إقرانه. إليك كيفية إقران جهازك بمستخدم باستخدام Cloud Dashboard:

    هذه هي. يمكنك متابعة البرنامج التعليمي hello world الخاص بـ Grandeur Cloud للحصول على مزيد من التفاصيل حول كل خطوة.

    الخطوة الثانية: برنامج الأجهزة

    نظرًا لأننا حددنا متغير حالة في النماذج أثناء إنشاء نموذج أجهزتنا من Cloud Dashboard ، فسنطلب من السحابة أن ترسل إلينا أي تحديثات في نماذج أجهزتنا على نهاية RPi الخاصة بنا والتي ستوفر لنا بالتالي تحديثًا للحالة. لهذا الغرض ، سنستخدم Py SDK لـ Grandeur Cloud. الهدف هو عندما يتم تشغيل برنامجنا ، فإنه يستمع إلى أي تغيير في متغير الحالة. إذا تغيرت القيمة إلى 1 ، يقوم هذا البرنامج بتشغيل مؤشر LED الخاص بنا في GPIO17 ، وإلا سيتم إيقاف تشغيله. لنفعلها.

    بعد إجراء ssh في RPi الخاص بنا ، فلنقم بإنشاء بيئة افتراضية أولاً لبرنامج الجهاز الخاص بمشروعنا للحفاظ على حزمه ومكتباته معزولة عن المكتبات العالمية:

    python3 -m venv "Pi Switch"

    نقوم بتثبيت حزمة GPIO الخاصة بـ RPi للمساعدة في التحكم في دبابيس GPIO الخاصة بـ RPi وحزمة grandeurcloud للتواصل مع السحابة.

    تثبيت python -m pip RPI.GPIO grandeurcloud

    ثم نقوم بإنشاء ملف Hardware.py جديد وكتابة برنامج الجهاز فيه.

    هذا هو كود برنامج بايثون الخاص بنا

    # Import the library
    import grandeurcloud.apollo.device as apollo
    from gpiozero import LED
    led = LED(17)
    # Define the apiKey and Auth token
    apiKey = "YOUR-API-KEY"
    token = "YOUR-DEVICE-TOKEN"
    deviceID = "YOUR-DEVICE-ID"
    # Event listener on connection state
    def onConnection(state):
    # Print the current state
    print(state)
    # Callback function to handle state change event
    def handleEvent(data):
    # Print
    print(data)
    led.value = data["state"]
    # Callback function to handle current state
    def handleParms(data):
    # Print
    print(data["deviceParms"])
    led.value = data["deviceParms"]["state"]
    # Init the SDK and get reference to the project
    project = apollo.init(apiKey, token)
    # Place listener
    project.onConnection(onConnection)
    # Get a reference to device class
    device = project.device(deviceID)
    # Subscribe to state change event
    device.onParms(handleEvent)
    # Get current state
    device.getParms(handleParms)
    # Block main thread
    while 1:
    pass



    المنطق بسيط جدا. نحدد وظائف معالج الحدث أولاً.

    يتم استدعاء onConnection عندما ينجح البرنامج في إنشاء اتصال آمن بالسحابة.

    يتم استدعاء handleParmsUpdate عندما تقوم السحابة بإخطار RPi بتحديث في متغير parms (الحالة في هذه الحالة).

    يتم استدعاء handleParms عندما ترسل السحابة جميع متغيرات parms استجابةً لاستدعاء دالة getParms.

    بمجرد تحديد معالجات الأحداث ، نبدأ في إعداد الاتصال عن طريق استدعاء وظيفة apollo.init باستخدام مفتاح API الخاص بمشروعنا والرمز المميز للجهاز ، ثم تحديد جهازنا عن طريق تمرير معرف الجهاز إلى project.device. قمنا بإعداد معالجات الأحداث المحددة مسبقًا الخاصة بنا للأحداث المناسبة عن طريق استدعاء project.onConnection ، device.onParms ، device.getParms على التوالي.

    تمنع الحلقة while 1 البرنامج من الخروج. يمكنك هنا كتابة الكود الذي تريد تنفيذه بشكل متكرر - مثل قراءة GPIO بعد كل 5 ثوانٍ.

    ما يفعله هذا البرنامج هو عند تشغيله ، يبدأ في إنشاء قناة في الوقت الفعلي مع السحابة. عندما يتم إنشاء الاتصال بالكامل ، فإنه يحصل على برامز الجهاز من السحابة لتهيئة دبوس LED RPi بالحالة (انظر وظيفة handleParms). استدعاء onParms يجعله يستمع لأي تحديثات مستقبلية في متغيرات parms. بمجرد حدوث أي تحديث من هذا القبيل ، ترسله السحابة إلى RPi الذي يقوم بتحديث حالة دبوس LED الخاص به (انظر وظيفة handleParmsUpdate).

    الخطوة 3: تطبيق الويب

    يحتوي تطبيقنا على ملفين index.html حيث نصمم تخطيط الصفحة و main.js حيث نبني منطق الصفحة. سنستخدم JavaScript SDK لدمج Grandeur Cloud في تطبيقنا.

    <!-- Index.html -->
    <!DOCTYPE html>
    <html>
    <!-- Head block of our page-->
    <head>
    <!-- Let's give our page a title-->
    <title>Pi Switch</title>
    <!-- Link SDK with CDN -->
    <script src="https://unpkg.com/@grandeurcloud/apollo"></script>
    <!-- Add CSS styles -->
    <link rel="stylesheet" href="src/styles.css">
    </head>
    <!-- Body block of our page-->
    <body>
    <!-- The loader page, will be displayed while we will verify the user auth status -->
    <div class="page center" id="loader">
    <!-- We are using a svg -->
    <img src="src/loader.svg" class="loader" />
    </div>
    <!-- The login page of our app -->
    <div id="login" class="page center" style="display: none;">
    <!-- Card holds the form -->
    <div class="card">
    <!-- The form to get email and passwordfrom users -->
    <input type="email" name="email" id="email" placeholder="Email" />
    <input type="password" name="password" id="password" placeholder="Password" />
    <!-- Button to submit the form-->
    <button id="submitLogin">Login</button>
    </div>
    </div>
    <!-- The page to hold the tiles -->
    <div id="devices" class="page" style="display: none;">
    <!-- The header of the page -->
    <div class="header">
    <!-- Add title of the page -->
    <div>Paired Devices</div>
    <!-- Add logout icon -->
    <button id="logout" class="inline">Logout</button>
    </div>
    <!-- Holder for tiles -->
    <div class="tiles" id="tiles">
    <!-- Each div represents a tile -->
    <!--
    <div class="tile">
    <div class="inner">
    <div>Title</div>
    <img src="src/fan.svg" />
    </div>
    </div>
    -->
    </div>
    </div>
    <!-- Main script file -->
    <script src="main.js"></script>
    </body>
    </html>
    view raw
    index.html hosted with ❤ by GitHub
    /**
    * @file: main.js
    * Initialize the SDK and get
    * a reference to the project
    */
    var project = apollo.init("YOUR-API-KEY", "YOUR-ACCESS-KEY", "YOUR-ACCESS-TOKEN");
    /**
    * This function uses the sdk to validate
    * that if the user is authenticated or not
    */
    async function start() {
    /** Use sdk auth class to check auth status */
    var res = await project.auth().isAuthenticated();
    /** Then if the user isn't authorized then show the login screen */
    if (res.code === "AUTH-UNAUTHORIZED") {
    return displayLogin();
    }
    /** Display devices screen */
    displayDevices();
    }
    /** Listener on login form button to authenticate a user */
    document.getElementById("submitLogin").addEventListener("click", async () => {
    /** Get email and password from inputs */
    var email = document.getElementById("email").value;
    var password = document.getElementById("password").value;
    /** Display laoder */
    displayLoader();
    /** Use the sdk auth class to login the user */
    var res = await project.auth().login(email, password);
    /** If the operation was successful */
    if (res.code === "AUTH-ACCOUNT-LOGGEDIN") {
    /** Reset the login page */
    document.getElementById("email").value = "";
    document.getElementById("password").value = "";
    /** Display devices screen */
    return displayDevices();
    }
    /** otherwise display the login screen again */
    displayLogin();
    });
    /** Function to get devices list from server and populate the ui*/
    async function getDevicesList() {
    /** Use sdk devices class */
    var devices = await project.devices();
    var res = await devices.list();
    /** Variable to hold the ui */
    var content = "";
    /** Then loop over the devices list returned in response and populate the ui */
    res.devices.forEach(device => {
    /** Add tile to the ui */
    content += `
    <div class="tile" onclick="updateState('${device.deviceID}')">
    <div class="inner" id="${device.deviceID}" data-state="${device.parms.state}">
    <div>${device.name}</div>
    <img src="src/button-${device.parms.state? "on" : "off"}.svg" />
    </div>
    </div>
    `
    /** Then also subscribe to the state update event of the device */
    devices.device(device.deviceID).onParms( parms => {
    /** Update the tile color to represent that the device is on*/
    document.getElementById(device.deviceID).getElementsByTagName("img")[0].src = `src/button-${parms.state? "on" : "off"}.svg`;
    /** Update local attribute and store the latest state in it */
    document.getElementById(device.deviceID).setAttribute("data-state", parms.state);
    })
    });
    /** Assign content to ui */
    document.getElementById("tiles").innerHTML = content;
    }
    /** Function to update the state of a device */
    async function updateState(deviceID) {
    /** Create new state */
    var newState = document.getElementById(deviceID).getAttribute("data-state") === "1" ? 0 : 1;
    /** Use the devices class of sdk to report the upgrade */
    await project.devices().device(deviceID).setParms({
    state: newState
    });
    }
    /** Add event handler on logout icon */
    document.getElementById("logout").addEventListener("click", async () => {
    /** Show the loader */
    displayLoader();
    /** and use the auth class of sdk to logout the user */
    await project.auth().logout();
    /** Then call start again */
    start();
    });
    /** Function to show laoder screen */
    function displayLoader() {
    /** Display loader */
    document.getElementById("loader").style.display = "flex";
    /** Hide login screen */
    document.getElementById("login").style.display = "none";
    /** Hide devices screen */
    document.getElementById("devices").style.display = "none";
    }
    /** Function to show login screen */
    function displayLogin() {
    /** Hide loader */
    document.getElementById("loader").style.display = "none";
    /** Display login screen */
    document.getElementById("login").style.display = "flex";
    }
    /** Function to show devices screen */
    function displayDevices() {
    /** Hide loader */
    document.getElementById("loader").style.display = "none";
    /** Display devices screen */
    document.getElementById("devices").style.display = "flex";
    /** Get devices list */
    getDevicesList();
    }
    /** Start the app */
    start();


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


    الخطوة 4: الاختبار محليًا

    ها نحن أخيرًا. دعونا نختبر ما قمنا ببنائه. لهذا الغرض ، أثناء وجودك في ssh في RPi لدينا وتم تنشيط بيئة مشروعنا ، نقوم بتشغيل ملف Hardware.py الخاص بنا بالأمر التالي:

    python hardware.py

    أجهزة بيثون

    نبدأ في رؤية الإخراج المباشر في المحطة أسفل قيادتنا. ولكن يتعين علينا تشغيل تطبيق الويب الخاص بنا لتبديل حالة جهاز RPi. لذلك نقوم بتشغيل خادم محلي مع Grandeur Cloud CLI. تساعدنا واجهة سطر الأوامر في الاختبار عن طريق تشغيل خادم محلي. ما عليك سوى تنزيله من npm (تحتاج إلى nodejs ، في الوقت الحالي). قم بتشغيل الأمر التالي في جهازك الطرفي:


    npm install grandeurcloud -g # تثبيت cli في جهاز الكمبيوتر الخاص بك

    ثم انتقل إلى دليل تطبيق الويب الخاص بك وقم بتشغيل الأوامر التالية في جهازك:

    npm install grandeurcloud -g     # Installs the cli in your computer

    يربط grandeurcloud init # Command دليلك بمشروعك

    وأخيرًا قم بتشغيل الخادم:

    grandeurcloud init     # Command associates your directory with your project
    grandeurcloud serve

    تم توثيق هذا جيدًا في البرنامج التعليمي الرسمي.

    هناك إجراء أمني. لا يمكنك إرسال البيانات من تطبيقك إلى السحابة إلا إذا أضفت نطاقك إلى القائمة البيضاء (العنوان الذي يظهر في شريط عنوان URL للمتصفح عند فتح التطبيق - http: // localhost: 8000/8001 إذا كنت تقوم بتشغيل أمر خدمة grandeurcloud) من لوحة التحكم السحابية. يمنع هذا جميع المصادر غير المحددة من الوصول إلى بيانات مشروع Cloud في حالة فقد مفتاح الوصول الخاص بك.

    هذا هو 💥. يمكنك الآن تسجيل الدخول إلى تطبيقك ، والنقر على زر التبديل بجهازك ، ومشاهدة مؤشر LED على RPi يتابعك في الوقت الفعلي.

    Woohoo تطبيق الويب الخاص بنا للتحكم في LED RPi الخاص بنا

    كود البرنامج


    الجمعة، 23 أكتوبر 2020

    قم بتمكين Arduino I / O Header في MiniZed

     قم بتمكين الإدخال / الإخراج الرقمي المتاح على رأس غطاء Arduino في MiniZed.


    الأشياء المستخدمة في هذا المشروع

    Avnet MiniZed

    دايود ضوئي

    مقاومة 5 اوم

    لوح التوصبل مع الاسلاك

    تطبيقات البرمجيات والخدمات عبر الإنترنت

    لتنزيل البرنامج من هنـــــــــــــــا


    قصة

    أثناء العمل في مشروع آخر ، لاحظت أن تصميم الأجهزة في BSP لـ MiniZed يحتوي على pinout لرأس Arduino GPIO المحدد في ملف قيود Vivado (.xdc) ولكنه لا يتصل فعليًا بأي شيء في الجهاز تصميم الكتلة. قررت أنه سيكون برنامجًا تعليميًا جيدًا قائمًا بذاته حول كيفية تمكين الإدخال / الإخراج الرقمي على رأس درع Arduino لأنني لم أر الكثير من الموارد المحددة الأخرى له.

    (ملاحظة جانبية: أنا أستخدم Vivado / Vitis / PetaLinux 2019.2 لهذا المشروع. لاحظت أثناء وجودك في منتصف هذا المشروع أن مستودعات Avnet Github قد تم تحديثها قليلاً للإصدار 2020.1 ، خاصة بالنسبة لـ MiniZed. سيكون جانب Vitis في هذا المشروع والملفات المراد تحميلها على MiniZed مختلفًا قليلاً إذا كنت تستخدم الإصدار Vivado / Vitis / PetaLinux 2020.1 أو أحدث.)

    أبدأ بمشروعي Vivado و PetaLinux اللذين أنشأتهما من MiniZed BSP في آخر مشروعي في MiniZed هنا. أول شيء يجب القيام به هو التحديثات على الأجهزة في Vivado.

    لتعديل تصميم الأجهزة المعتمد على MiniZed ، افتح مشروع Vivado في دليل مشروع PetaLinux الذي تم إنشاؤه بواسطة BSP ضمن دليل <مسار المشروع> / Hardware / MINIZED.

    نظرًا لأن EMIO GPIO الخاص بـ Zynq يتم استخدامه بالفعل في إدخال / إخراج البلوتوث ، أضف AXI GPIO إلى مخطط الكتلة. قبل تشغيل خيار أتمتة الاتصال الذي يظهر ، انقر نقرًا مزدوجًا فوق كتلة AXI GPIO الجديدة لإعادة تكوين إعداداتها.

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


    أعد تسمية المنفذ للإشارة إلى أن هذه الخطوط سيتم توصيلها برأس Arduino



    تحقق من صحة تصميم الكتلة واحفظه (قد يكون هناك تحذير هام بشأن خط الساعة ، ولكن يمكن تجاهله). انقر بزر الماوس الأيمن على تصميم الكتلة في نافذة المصادر وحدد خيار "إنشاء غلاف HDL ..." والخيار الفرعي للسماح لـ Vivado بإدارته. سيؤدي ذلك إلى تحديث HDL ذي المستوى الأعلى ليشمل منفذ GPIO الخارجي الجديد.

    قم بتعديل ملف minized_petalinux.xdc لتبديل خطوط بيانات Adruino لمطابقة خرج الناقل من كتلة AXI GPIO.


    احفظ ملف القيود ثم أعد تشغيل التوليف والتنفيذ وإنشاء دفق بت جديد. بمجرد إنشاء دفق البت ، قم بتصدير تصميم الأجهزة. يوجد بالفعل جهاز XSA موجود في دليل المشروع المحلي (<المسار إلى مشروع PetaLinux الذي تم إنشاؤه باستخدام BSP> / Hardware / MINIZED_2019_2 /) ، لذلك قبل تصدير جهاز XSA الجديد إليه ، قمت بإنشاء مجلد جديد في دليل المشروع بعنوان ' old_hw 'ونقل MINIZED.xsa إلى هناك. لتصدير تصميم الأجهزة الجديد ، حدد ملف> تصدير> تصدير الأجهزة ... وتأكد من تحديد المربع لتضمين تدفق البت. سترى MINIZED_wrapper.xsa تظهر الآن في دليل المشروع المحلي.

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

    source <PetaLinux installation path>/2019.2/settings.sh
    cd ./minized/minized_emmc_enhanced_2019_2/

    استيراد تصميم الأجهزة الجديد إلى مشروع PetaLinux الحالي.

    petalinux-config --get-hw-description ./hardware/MINIZED_2019_2/
    بمجرد ظهور محرر تكوين الأجهزة ، يمكنك الخروج منه دون إجراء أي تغييرات. حدد خيار حفظ الإعدادات الجديدة عندما يُطلب منك ذلك ، ثم أنشئ مشروع PetaLinux.
    petalinux-build

    يجب إنشاء صورة تمهيد ثنائية جديدة (BOOT.BIN) من أجل MiniZed لاحتواء تيار البت الجديد منذ أن أضفنا أجهزة جديدة إلى التصميم في Vivado. يمكن القيام بذلك في Vitis GUI عن طريق إنشاء مشروع نظام أساسي جديد وتطبيق محمل إقلاع المرحلة الأولى. في هذه الحالة ، أجد أنه من الأسهل قليلاً إنشاء ملف boot.bif الخاص بي باستخدام محرر نصوص وأداة سطر أوامر برنامج Xilinx (XSCT) لإنشاء تطبيق FSBL مستقل ، ثم أداة bootgen للترجمة BOOT.BIN الجديد

    في نافذة طرفية جديدة ، مصدر البرنامج النصي لإعدادات بيئة Vitis:
    source <Vitis installation path>/2019.2/settings64.sh
    قم بإنشاء دليل لمشروع تطبيق FSBL.
    cd ./minized/minized_emmc_enhanced_2019_2/
    mkdir -p ./fsbl_project/
    قم بتشغيل أداة سطر أوامر برنامج Xilinx (XSCT):
    xsct
    ثم استخدم أوامر HSI لإنشاء تطبيق Zynq في المرحلة الأولى من برنامج bootloader bare-metal لـ MiniZed. تعرف على المزيد حول HSI وكيفية استخدامه في Vitis هنا.

    ابدأ بفتح تصميم الأجهزة لـ MiniZed في مثيل XSCT الحالي.
    xsct% hsi open_hw_design ./minized/minized_emmc_enhanced_2019_2/hardware/MINIZED_2019_2/MINIZED_wrapper.xsa
    تحقق من فتح الجهاز بنجاح باستخدام الأمر current_hw_design ، فسيتم تكرار اسم الجهاز مرة أخرى في الجهاز الطرفي على غرار ما يلي
    xsct% hsi current_hw_design
    MINIZED_wrapper

    قم بإنشاء تطبيق bare-metal لـ FSBL باستخدام أمر HSI create_app:

    xsct% hsi generate_app -dir ./minized/minized_emmc_enhanced_2019_2/fsbl_project/ -hw MINIZED_wrapper -sw fsbl -proc ps7_cortexa9_0 -os standalone -app zynq_fsbl -compile

    قم بإنهاء XSCT والخروج منه بالضغط على Ctrl + C مرتين متتاليتين ثم استخدم محرر النصوص الذي تختاره لإنشاء ملف معلومات تمهيد جديد (boot.bif) لـ MiniZed.

    nano boot.bif
    يضاف النص التالي:
    image : {
    [bootloader] fsbl_project/executable.elf
    images/linux/minized_petalinux_wrapper.bit
    images/linux/u-boot.elf

    الملف القابل للتنفيذ هو ملف FSBL الجديد لنواة ARM الخاصة بـ Zynq في MiniZed الذي تم إنشاؤه للتو في الخطوة الأخيرة باستخدام XSCT.

    أخيرًا ، استخدم أداة bootgen لإنشاء ملف التمهيد الثنائي الجديد لـ MiniZed.

    bootgen -image boot.bif -o i BOOT.BIN -w on
    بمجرد إنشاء ملف التمهيد الثنائي بنجاح ، انسخ صورة kernel الجديدة (image.ub) وملف التمهيد الثنائي (BOOT.BIN) إلى eMMC الخاص بـ MiniZed. اخترت استخدام عميل FTP مرة أخرى لتحميل الملفات إلى MiniZed عبر اتصال Wi-Fi الخاص به



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

    root@MiniZed:~# flashcp /run/media/mmcblk1p1/BOOT.BIN /dev/mtd0 
    root@MiniZed:~# reboot

    لاختبار أن GPIOs تعمل بشكل صحيح ، قمت بتوصيل مصابيح LED بكل من I / O على رأس Arduino الخاص به وقمت بتبديل كل سطر يدويًا من سطر الأوامر (ظهر GPIO على أنه 999 بالنسبة لي ، ولكن قد يكون مختلفًا بالنسبة لي عليك التحقق جيدًا باستخدام تطبيق get-gpio-offests).

    root@minized-emmc-enhanced-2019-2:~# cd /sys/class/gpio/
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 999 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1000 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1001 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1002 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1003 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1004 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1005 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1006 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1007 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1008 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1009 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1010 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1011 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1012 > ./export
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio999/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1000/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1001/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1002/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1003/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1004/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1005/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1006/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1007/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1008/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1009/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1010/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1011/direction
    root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1012/direction


    لقد اختبرت قضبان الجهد المرجعي باستخدام DMM الخاص بي على رأس Arduino مع أو بدون توصيل USB بالطاقة AUX وقراءتهما بالجهد المناسب. كان MiniZed أيضًا قادرًا على تشغيل جميع مصابيح LED الأربعة عشر مع توصيل AUX powe

    شرح وتفاصيل Raspberry Pi 4 و Compute Module 4 Lite

     بتعبئة نفس BCM2711C0 SoC مثل Raspberry Pi 4 بالحجم الكامل ، هل هذه الأنظمة على الوحدات هي الأدوات الجديدة التي يجب امتلاكها؟



    بعد عامين من إطلاق Raspberry Pi Compute Module 3+ ، وبعد أربع سنوات من Raspberry Pi Compute Module 3 ، تمتلك مؤسسة Raspberry Pi نظامًا جديدًا على وحدة (SOM) - ولكن في حين أنها تقدم أداءً معززًا بشكل كبير ، إلا أنها تلغي مع التوافق مع الإصدارات السابقة للوحات الحاملة الموجودة.

    مع نفس الأجهزة الأساسية مثل الكمبيوتر أحادي اللوحة Raspberry Pi 4 Model B الشهير ، والذي يوفر الآن اتصال PCI Express Gen.2 عالي السرعة بالأجهزة الطرفية ، هو Raspberry Pi Compute Module 4 - وزميله المستقر لايت المخفض التكلفة. الذهاب إلى SOM؟

    الأجهزة

    تم إطلاق عائلة Raspberry Pi Compute Module كوسيلة لجلب نفس التكنولوجيا التي توفرها مجموعة أجهزة الكمبيوتر أحادية اللوحة Raspberry Pi للمستخدمين المدمجين والصناعيين كنظام على وحدة. تم استبدال وحدة الحوسبة الأصلية بوحدة Compute 3 - تخطي جيل - ثم Compute Module 3+ ، والتي استخدمت نفس أجهزة المعالجة مثل Raspberry Pi 3 Model B + ولكنها سجلت انخفاضًا من 1.5 جيجا هرتز إلى 1.2 جيجا هرتز.

    إذن ، لا ينبغي أن تفاجئ الوحدة الحاسوبية 4: إنها نظام على وحدة مبنية على Broadcom BCM2711C0 ، وهو نفس النظام على الرقاقة الذي يشغل Raspberry Pi 4. مثل Raspberry Pi 4 بالحجم الكامل ، الأربعة 64 يتم تسجيل أنوية Arm Cortex-A72 -bit بسرعة 1.5 جيجاهرتز - مع عدم وجود علامة على نفس تقليل سرعة الساعة مثل وحدة الحوسبة 3+ - ويمكن للمشترين اختيار ذاكرة وصول عشوائي LPDDR4 بسعة 1 جيجابايت أو 2 جيجابايت أو 4 جيجابايت أو 8 جيجابايت. على عكس Raspberry Pi 4 ، هناك أيضًا خيار تخزين eMMC على اللوحة: 8 جيجابايت أو 16 جيجابايت أو 32 جيجابايت ؛ يمكن لأولئك الذين لا يحتاجون إلى التخزين على متن الطائرة اختيار Compute Module 4 Lite بدلاً من ذلك.


    في حين أن المفهوم الأساسي للوحدة الحاسوبية 4 هو نفسه تمامًا مثل الإصدارات السابقة ، فقد تغير التصميم: فقد اختفى عامل الشكل SODIMM المكون من 200 سن ، واستبدل بموصلين عالي الكثافة 100 سن في الجانب السفلي. إنه يجعل مظهرًا أنظف بمجرد تثبيته على لوحة حامل ، بينما تمنحه فتحات التركيب الأربعة قوة ميكانيكية كبيرة. هذا أيضًا ، للأسف ، لا يعني عدم التوافق مع الإصدارات السابقة: على الرغم من أن وحدة Compute 4 متوافقة مع جميع البرامج المكتوبة للنماذج السابقة ، إلا أنها لن تتناسب فعليًا مع لوحة الناقل المصممة للوحدة الحسابية ، أو الوحدة النمطية 3 ، أو وحدة الحساب 3+.

    تحتوي الوحدة على مجموعة من الميزات الأساسية المكشوفة على المسامير: هناك إدخال / إخراج للأغراض العامة ، ومنفذين للواجهة التسلسلية للعرض (DSI) ، ومنفذين للواجهة التسلسلية للكاميرا (CSI) ، ومنفذين HDMI يدعمان إخراج فيديو 4K30 مزدوج كما وعد من قبل المؤسس المشارك للمشروع Eben Upton في وقت سابق من العام - ممر واحد من PCI Express Gen. 2 ، بالإضافة إلى جيجابت إيثرنت PHY. الوحدة متاحة أيضًا مع نفس 802.11b / g / n / ac Wi-Fi ووحدة راديو Bluetooth 5.0 / Bluetooth منخفضة الطاقة (BLE) كنطاق Raspberry Pi 4 كامل الحجم - ولكن هذه المرة مع اختيار هوائي PCB أو هوائي خارجي عبر موصل Hirose U.FL ، مع توفير مجموعة الهوائي الاختيارية للأخير.


    لكن ما هو متاح للاستخدام بالضبط سيعتمد بشكل كبير على لوحة الناقل. أصدرت مؤسسة Raspberry Pi Foundation تصميمها المرجعي مفتوح المصدر ، لوحة Raspberry Pi Compute 4 Input / Output (IO) ، التي توفر أكبر قدر ممكن من الوظائف: رأس GPIO 40 سنًا ، رأس PoE ، اثنان من HDMI بالحجم الكامل المنافذ و Gigabit Ethernet ومنفذي DSI ومنفذين CSI وفتحة microSD لوحدة Compute Module 4 Lite للتخزين ومنفذين USB 2.0 وفتحة بطارية لساعة الوقت الحقيقي ومنفذين USB 2.0 ومنفذ USB صغير ثانوي. هناك أيضًا ، لأول مرة في المجموعة ، فتحة PCI Express بالحجم الكامل - والتي توفر طريقة رائعة لتوصيل وحدة تخزين عالية السرعة بالوحدة.

    أداء

    بالنظر إلى وحدة الحوسبة 4 تستخدم نفس نظام BCM2711C0 على الرقاقة مثل Raspberry Pi 4 Model B ، فليس هناك مفاجأة من النتائج القياسية: إنها ضربة مقابل ضربة متطابقة في جميع النواحي تقريبًا ، من معيار Linpack الاصطناعي إلى الحقيقي -الاختبارات العالمية مثل استجابة المتصفح وضغط الملفات وتحرير الصور.



    بعد عامين من إطلاق Raspberry Pi Compute Module 3+ ، وبعد أربع سنوات من Raspberry Pi Compute Module 3 ، تمتلك مؤسسة Raspberry Pi نظامًا جديدًا على وحدة (SOM) - ولكن في حين أنها تقدم أداءً معززًا بشكل كبير ، إلا أنها تلغي مع التوافق مع الإصدارات السابقة للوحات الحاملة الموجودة.

    مع نفس الأجهزة الأساسية مثل الكمبيوتر أحادي اللوحة Raspberry Pi 4 Model B الشهير ، والذي يوفر الآن اتصال PCI Express Gen.2 عالي السرعة بالأجهزة الطرفية ، هو Raspberry Pi Compute Module 4 - وزميله المستقر لايت المخفض التكلفة. الذهاب إلى SOM؟

    الأجهزة
    تم إطلاق عائلة Raspberry Pi Compute Module كوسيلة لجلب نفس التكنولوجيا التي توفرها مجموعة أجهزة الكمبيوتر أحادية اللوحة Raspberry Pi للمستخدمين المدمجين والصناعيين كنظام على وحدة. تم استبدال وحدة الحوسبة الأصلية بوحدة Compute 3 - تخطي جيل - ثم Compute Module 3+ ، والتي استخدمت نفس أجهزة المعالجة مثل Raspberry Pi 3 Model B + ولكنها سجلت انخفاضًا من 1.5 جيجا هرتز إلى 1.2 جيجا هرتز.

    إذن ، لا ينبغي أن تفاجئ الوحدة الحاسوبية 4: إنها نظام على وحدة مبنية على Broadcom BCM2711C0 ، وهو نفس النظام على الرقاقة الذي يشغل Raspberry Pi 4. مثل Raspberry Pi 4 بالحجم الكامل ، الأربعة 64 يتم تسجيل أنوية Arm Cortex-A72 -bit بسرعة 1.5 جيجاهرتز - مع عدم وجود علامة على نفس تقليل سرعة الساعة مثل وحدة الحوسبة 3+ - ويمكن للمشترين اختيار ذاكرة وصول عشوائي LPDDR4 بسعة 1 جيجابايت أو 2 جيجابايت أو 4 جيجابايت أو 8 جيجابايت. على عكس Raspberry Pi 4 ، هناك أيضًا خيار تخزين eMMC على اللوحة: 8 جيجابايت أو 16 جيجابايت أو 32 جيجابايت ؛ يمكن لأولئك الذين لا يحتاجون إلى التخزين على متن الطائرة اختيار Compute Module 4 Lite بدلاً من ذلك.

    في حين أن المفهوم الأساسي للوحدة الحاسوبية 4 هو نفسه تمامًا مثل الإصدارات السابقة ، فقد تغير التصميم: فقد اختفى عامل الشكل SODIMM المكون من 200 سن ، واستبدل بموصلين عالي الكثافة 100 سن في الجانب السفلي. إنه يجعل مظهرًا أنظف بمجرد تثبيته على لوحة حامل ، بينما تمنحه فتحات التركيب الأربعة قوة ميكانيكية كبيرة. هذا أيضًا ، للأسف ، لا يعني عدم التوافق مع الإصدارات السابقة: على الرغم من أن وحدة Compute 4 متوافقة مع جميع البرامج المكتوبة للنماذج السابقة ، إلا أنها لن تتناسب فعليًا مع لوحة الناقل المصممة للوحدة الحسابية ، أو الوحدة النمطية 3 ، أو وحدة الحساب 3+.

    تحتوي الوحدة على مجموعة من الميزات الأساسية المكشوفة على المسامير: هناك إدخال / إخراج للأغراض العامة ، ومنفذين للواجهة التسلسلية للعرض (DSI) ، ومنفذين للواجهة التسلسلية للكاميرا (CSI) ، ومنفذين HDMI يدعمان إخراج فيديو 4K30 مزدوج كما وعد من قبل المؤسس المشارك للمشروع Eben Upton في وقت سابق من العام - ممر واحد من PCI Express Gen. 2 ، بالإضافة إلى جيجابت إيثرنت PHY. الوحدة متاحة أيضًا مع نفس 802.11b / g / n / ac Wi-Fi ووحدة راديو Bluetooth 5.0 / Bluetooth منخفضة الطاقة (BLE) كنطاق Raspberry Pi 4 كامل الحجم - ولكن هذه المرة مع اختيار هوائي PCB أو هوائي خارجي عبر موصل Hirose U.FL ، مع توفير مجموعة الهوائي الاختيارية للأخير.

    لكن ما هو متاح للاستخدام بالضبط سيعتمد بشكل كبير على لوحة الناقل. أصدرت مؤسسة Raspberry Pi Foundation تصميمها المرجعي مفتوح المصدر ، لوحة Raspberry Pi Compute 4 Input / Output (IO) ، التي توفر أكبر قدر ممكن من الوظائف: رأس GPIO 40 سنًا ، رأس PoE ، اثنان من HDMI بالحجم الكامل المنافذ و Gigabit Ethernet ومنفذي DSI ومنفذين CSI وفتحة microSD لوحدة Compute Module 4 Lite للتخزين ومنفذين USB 2.0 وفتحة بطارية لساعة الوقت الحقيقي ومنفذين USB 2.0 ومنفذ USB صغير ثانوي. هناك أيضًا ، لأول مرة في المجموعة ، فتحة PCI Express بالحجم الكامل - والتي توفر طريقة رائعة لتوصيل وحدة تخزين عالية السرعة بالوحدة.

    أداء
    بالنظر إلى وحدة الحوسبة 4 تستخدم نفس نظام BCM2711C0 على الرقاقة مثل Raspberry Pi 4 Model B ، فليس هناك مفاجأة من النتائج القياسية: إنها ضربة مقابل ضربة متطابقة في جميع النواحي تقريبًا ، من معيار Linpack الاصطناعي إلى الحقيقي -الاختبارات العالمية مثل استجابة المتصفح وضغط الملفات وتحرير الصور.

    بالنسبة لأي شخص يقوم بالترقية من Raspberry Pi Compute Module 3 - تذكر ، بالطبع ، سيعني ذلك لوحة ناقل جديدة - والتي تترجم إلى مكاسب رائعة في الأداء: تراوحت النتائج القياسية من أقل من ضعف السرعة إلى ما يقرب من خمسة أضعاف السرعة - وهذا يعني يجب سحب أي تصميم تم تقييده بواسطة أداء Compute Module 3 + 

    بعد عامين من إطلاق Raspberry Pi Compute Module 3+ ، وبعد أربع سنوات من Raspberry Pi Compute Module 3 ، تمتلك مؤسسة Raspberry Pi نظامًا جديدًا على وحدة (SOM) - ولكن في حين أنها تقدم أداءً معززًا بشكل كبير ، إلا أنها تلغي مع التوافق مع الإصدارات السابقة للوحات الحاملة الموجودة.

    مع نفس الأجهزة الأساسية مثل الكمبيوتر أحادي اللوحة Raspberry Pi 4 Model B الشهير ، والذي يوفر الآن اتصال PCI Express Gen.2 عالي السرعة بالأجهزة الطرفية ، هو Raspberry Pi Compute Module 4 - وزميله المستقر لايت المخفض التكلفة. الذهاب إلى SOM؟

    الأجهزة
    تم إطلاق عائلة Raspberry Pi Compute Module كوسيلة لجلب نفس التكنولوجيا التي توفرها مجموعة أجهزة الكمبيوتر أحادية اللوحة Raspberry Pi للمستخدمين المدمجين والصناعيين كنظام على وحدة. تم استبدال وحدة الحوسبة الأصلية بوحدة Compute 3 - تخطي جيل - ثم Compute Module 3+ ، والتي استخدمت نفس أجهزة المعالجة مثل Raspberry Pi 3 Model B + ولكنها سجلت انخفاضًا من 1.5 جيجا هرتز إلى 1.2 جيجا هرتز.

    إذن ، لا ينبغي أن تفاجئ الوحدة الحاسوبية 4: إنها نظام على وحدة مبنية على Broadcom BCM2711C0 ، وهو نفس النظام على الرقاقة الذي يشغل Raspberry Pi 4. مثل Raspberry Pi 4 بالحجم الكامل ، الأربعة 64 يتم تسجيل أنوية Arm Cortex-A72 -bit بسرعة 1.5 جيجاهرتز - مع عدم وجود علامة على نفس تقليل سرعة الساعة مثل وحدة الحوسبة 3+ - ويمكن للمشترين اختيار ذاكرة وصول عشوائي LPDDR4 بسعة 1 جيجابايت أو 2 جيجابايت أو 4 جيجابايت أو 8 جيجابايت. على عكس Raspberry Pi 4 ، هناك أيضًا خيار تخزين eMMC على اللوحة: 8 جيجابايت أو 16 جيجابايت أو 32 جيجابايت ؛ يمكن لأولئك الذين لا يحتاجون إلى التخزين على متن الطائرة اختيار Compute Module 4 Lite بدلاً من ذلك.

    في حين أن المفهوم الأساسي للوحدة الحاسوبية 4 هو نفسه تمامًا مثل الإصدارات السابقة ، فقد تغير التصميم: فقد اختفى عامل الشكل SODIMM المكون من 200 سن ، واستبدل بموصلين عالي الكثافة 100 سن في الجانب السفلي. إنه يجعل مظهرًا أنظف بمجرد تثبيته على لوحة حامل ، بينما تمنحه فتحات التركيب الأربعة قوة ميكانيكية كبيرة. هذا أيضًا ، للأسف ، لا يعني عدم التوافق مع الإصدارات السابقة: على الرغم من أن وحدة Compute 4 متوافقة مع جميع البرامج المكتوبة للنماذج السابقة ، إلا أنها لن تتناسب فعليًا مع لوحة الناقل المصممة للوحدة الحسابية ، أو الوحدة النمطية 3 ، أو وحدة الحساب 3+.

    تحتوي الوحدة على مجموعة من الميزات الأساسية المكشوفة على المسامير: هناك إدخال / إخراج للأغراض العامة ، ومنفذين للواجهة التسلسلية للعرض (DSI) ، ومنفذين للواجهة التسلسلية للكاميرا (CSI) ، ومنفذين HDMI يدعمان إخراج فيديو 4K30 مزدوج كما وعد من قبل المؤسس المشارك للمشروع Eben Upton في وقت سابق من العام - ممر واحد من PCI Express Gen. 2 ، بالإضافة إلى جيجابت إيثرنت PHY. الوحدة متاحة أيضًا مع نفس 802.11b / g / n / ac Wi-Fi ووحدة راديو Bluetooth 5.0 / Bluetooth منخفضة الطاقة (BLE) كنطاق Raspberry Pi 4 كامل الحجم - ولكن هذه المرة مع اختيار هوائي PCB أو هوائي خارجي عبر موصل Hirose U.FL ، مع توفير مجموعة الهوائي الاختيارية للأخير.

    لكن ما هو متاح للاستخدام بالضبط سيعتمد بشكل كبير على لوحة الناقل. أصدرت مؤسسة Raspberry Pi Foundation تصميمها المرجعي مفتوح المصدر ، لوحة Raspberry Pi Compute 4 Input / Output (IO) ، التي توفر أكبر قدر ممكن من الوظائف: رأس GPIO 40 سنًا ، رأس PoE ، اثنان من HDMI بالحجم الكامل المنافذ و Gigabit Ethernet ومنفذي DSI ومنفذين CSI وفتحة microSD لوحدة Compute Module 4 Lite للتخزين ومنفذين USB 2.0 وفتحة بطارية لساعة الوقت الحقيقي ومنفذين USB 2.0 ومنفذ USB صغير ثانوي. هناك أيضًا ، لأول مرة في المجموعة ، فتحة PCI Express بالحجم الكامل - والتي توفر طريقة رائعة لتوصيل وحدة تخزين عالية السرعة بالوحدة.

    أداء
    بالنظر إلى وحدة الحوسبة 4 تستخدم نفس نظام BCM2711C0 على الرقاقة مثل Raspberry Pi 4 Model B ، فليس هناك مفاجأة من النتائج القياسية: إنها ضربة مقابل ضربة متطابقة في جميع النواحي تقريبًا ، من معيار Linpack الاصطناعي إلى الحقيقي -الاختبارات العالمية مثل استجابة المتصفح وضغط الملفات وتحرير الصور.

    بالنسبة لأي شخص يقوم بالترقية من Raspberry Pi Compute Module 3 - تذكر ، بالطبع ، سيعني ذلك لوحة ناقل جديدة - والتي تترجم إلى مكاسب رائعة في الأداء: تراوحت النتائج القياسية من أقل من ضعف السرعة إلى ما يقرب من خمسة أضعاف السرعة - وهذا يعني يجب سحب أي تصميم تم تقييده بواسطة أداء Compute Module 3 + من كرات النفتالين وإعادة نسجها.

    إنه ممر PCI Express الذي يقدم أكبر مكاسب في الأداء ، على الرغم من ذلك ، كما تم الكشف عنه في معيار التخزين. يؤدي التبديل من بطاقة microSD إلى وحدة Compute Module 4 إلى مضاعفة أداء القراءة تقريبًا وأداء الكتابة ثلاث مرات - ولكن تثبيت محرك أقراص الحالة الصلبة غير المتطاير (NVMe) SSD في فتحة PCI Express على لوحة الناقل يأخذ سعة التخزين من 83.6 ميجابايت / ثانية للقراءة و 75.9 ميجابايت / ثانية للكتابة بسرعة مذهلة تبلغ 413 ميجابايت / ثانية و 392 ميجابايت / ثانية للكتابة - بترتيب أكبر. في حين أنه من الممكن الاقتراب من هذه السرعات - 363 ميجابايت / ثانية للقراءة و 323 ميجابايت / ثانية - باستخدام منافذ USB 3.0 على Raspberry Pi 4 Model B ، فإن استخدام NVMe بدلاً من ذلك يؤدي إلى انخفاض ملحوظ في استخدام وحدة المعالجة المركزية أثناء نقل الملفات
    الجواب.

    ومع ذلك ، هناك سلبي واحد في تصميم Compute Module 4 ، وهو شيء لا يمكن تجنبه حقًا: درجة حرارة التشغيل. على الرغم من سلسلة تحديثات البرامج الثابتة المصممة لتقليل استخدام الطاقة ، فمن المعروف أن Raspberry Pi 4 يعمل بشكل ساخن إلى حد ما - ووضع نفس النظام على شريحة PCB أصغر بشكل ملحوظ لا يفيد وحدة Compute 4.

    في اختبار تعذيب الخانق الحراري ، والذي يمثل السيناريو الأسوأ المطلق لنظام محمّل بشدة ، يخنق الوحدة الحسابية 4 بشكل أسرع وأكثر قوة من وحدة Raspberry Pi 4 B - لذلك بما في ذلك التبريد السلبي على الأقل ، إن لم يكن نشطًا مروحة تبريد ، في التصميمات المبنية حول وحدة الحوسبة 4 ستكون ضرورية.

    خاتمة
    تعتبر وحدة Raspberry Pi Compute 4 ترقية جديرة. يقدم تعزيزًا كبيرًا في الأداء مقارنة بسابقه البالغ من العمر عامين ، وفي حين أن الابتعاد عن عامل الشكل SODIMM والفقدان اللاحق للتوافق مع الإصدارات السابقة قد أدى إلى حد ما إلى السماح للمؤسسة بتقديم بعض ترقيات الميزات المهمة - وأكبرها هو اتصال PCI Express لا يمكن إنكاره.

    بينما قمنا باختبار قدرات PCI Express في Compute Module 4 باستخدام تخزين NVMe ، فإن هذا لا يعني أن الممر عالي السرعة متاح حصريًا لأغراض التخزين: إنه ممر PCIe Gen. 2.0 متوافق تمامًا مع المعايير القياسية ، ويوفر برامج تشغيل متاحة أو يمكن سوف تقبل أي شيء من بطاقة الشبكات عالية السرعة إلى بطاقات التقاط الفيديو أو المعالجات المساعدة لتسريع التعلم العميق أو وحدة تحكم USB 3.0 - الأخير هو كيفية توصيل منفذي USB 3.0 الخاصين بـ Raspberry Pi 4 Model B بشبكة SoC.


    ومع ذلك ، فإن نجاح وحدة الحوسبة 4 سيعتمد إلى حد كبير على اعتماد السوق. لقد رأينا عددًا من المنتجات التجارية التي تم إطلاقها باستخدام وحدة Raspberry Pi Compute 3+ وما قبلها في قلبها ، ومن المحتمل أن تتبعها تصميمات للوحدة الحاسوبية الجديدة 4 - سيكون من الصعب على المطورين رفض مكاسب الأداء ، بعد الكل ، حتى لو كانت اللوحات الحاملة بحاجة إلى إعادة تصميم لعامل الشكل الجديد.

    تتوفر الآن وحدة Raspberry Pi Compute 4 و Raspberry Pi Compute Module 4 Lite التي لا تحتوي على eMMC في القناة ، مع مزيد من المعلومات التي يمكن العثور عليها على موقع Raspberry Pi على الويب. يبدأ السعر من 25 دولارًا لـ Raspberry Pi Compute Module 4 Lite مع ذاكرة وصول عشوائي (RAM) سعة 1 جيجابايت ولا يوجد اتصال لاسلكي ، حيث يرتفع السعر إلى 90 دولارًا لوحدة Raspberry Pi Compute 4 مع ذاكرة وصول عشوائي (RAM) سعة 8 جيجابايت وتخزين eMMC بسعة 32 جيجابايت ووحدة راديو Wi-Fi و Bluetooth.




    الجمعة، 18 سبتمبر 2020

    كيفية التوصيل بين اثنين من اردوينو على بعد 1000 متر

     تعرف على كيفية إنشاء اتصال بعيد المدى باستخدام اثنين من Arduinos من خلال وحدة HC-12.

    غالبًا ما نرغب في تشغيل العديد من المشغلات عن بُعد مثل المصابيح والمحركات والمحركات الأخرى.

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

    في هذه الحالات ، يكون جهاز التحكم عن بعد بديلاً لاستخدامه ، وهناك العديد من أجهزة الإرسال والاستقبال اللاسلكية التي يمكن استخدامها ، مثل وحدة HC-12 و NRF24L01 و Lora وغيرها.

    في هذه المقالة ، سوف نتعلم كيفية بناء NEXTPCB Electronic Board لإنشاء نظام أتمتة والتحكم في العديد من الأجهزة عن بعد.

    سوف يحتوي NEXTPCBPCB على وحدة الإرسال / الاستقبال الراديوي HC-12 و Arduino Nano الذي سيكون المستقبل و HC-12 مع Arduino Uno الذي سيكون جهاز الإرسال لأداء تنشيط LEDs على مسافة

    من خلال هذا المقال سوف:

    قم بإجراء تجميع الدائرة على اللوحة الأولية

    افهم كيف تعمل وحدة HC-12

    قم بإجراء اتصال Arduino Nano / Arduino Nano بوحدة HC-12

    تفعيل الجهاز عن بعد

    افهم كيف يعمل الاتصال التسلسلي مع جهاز الإرسال والاستقبال اللاسلكي

    قم بإنشاء NEXTPCB ثنائي الفينيل متعدد الكلور

    بناء نظام أتمتة التحكم عن بعد

    كما ذكرنا سابقًا ، يتكون المشروع من إنشاء نظام لتنشيط الأجهزة عن بُعد وإنشاء لوحة دوائر مطبوعة NEXTPCB للتحكم في الأجهزة.

    وحدة HC-12 هي جهاز إرسال واستقبال لاسلكي وتردد تشغيلها من 433.4 ميجاهرتز إلى 473 ميجاهرتز.

    من الممكن توصيل نوعين من الهوائيات في هذه الوحدة ، هوائي حلزوني يأتي مع الوحدة أو هوائي آخر يتم توصيله بموصل UFL.

    يمكن أن يصل مدى هذه الوحدة إلى كيلومتر واحد حسب الإعدادات والهوائي المستخدم.

    تأتي هذه الوحدات عادةً مع بعض إعدادات المصنع ، حتى نتمكن من التواصل بين وحدتي HC-12. على سبيل المثال ، يمكننا التواصل بين جهازي Arduinos.

    لتنفيذ هذه العملية ، يجب علينا تعديل بعض المعلمات مثل سرعة الاتصال وقناة الاتصال ووضع التشغيل باستخدام أوامر AT.

    لتكوين الوحدة النمطية ، يجب توصيل دبوس المجموعة بـ GND كما هو موضح في الشكل 1. تسمح هذه العملية للوحدة بالدخول في وضع التكوين.

    يوصى بتزويد وحدة HC-12 بمصدر خارجي 5 فولت ، حيث تحتوي على بعض محولات USB-SERIAL التي لا توفر تيارًا كافيًا لتزويد الوحدة.

    لتحسين التصميم ، سنقوم بإنشاء لوحة دوائر مطبوعة NEXTPCB لضمان الطاقة الكافية لـ HC

    12.

    يجب توصيل GND الخاص بمحول USB-SERIAL بـ GND الخاص بمصدر الطاقة.




    قبل أن نبدأ في تكوين الوحدة ، يجب علينا تنزيل برنامج Termite المتاح على الرابط: تنزيل برنامج Termite

    بعد إجراء التوصيلات بوحدة HC-12 ومحول USB التسلسلي ، افتح برنامج Termite.

    تكوين وحدة HC-12 باستخدام برنامج Termite.


    بعد فتح برنامج Termite ، يجب أن نضغط على Settings (الإعدادات) لعمل بعض الإعدادات وفقًا للشكل.


    بعد إجراء الإعدادات في برنامج Termite ، انقر فوق Ok ثم COM3 لتوصيل المحول التسلسلي USB بوحدة HC-12 بالمنفذ التسلسلي المتصل.

    انتظر لتوصيل المنفذ ببرنامج Termite ونكتب في شريط الأوامر الأمر AT

    إذا سارت الأمور على ما يرام ، فستظهر OK كما في الشكل.



    بعد هذا الاختبار الأولي ، سنقوم بتكوين وحدة HC-12 بالمعلمات التالية:

    مسلسل Velocidad de comunicación: 9600 بت في الثانية
    قناة de comunicação 5
    بوتينسيا دي ترانسيسيون دي 11 ديسيبل
    طريقة العمل FU3











    بعد إجراء التكوين للوحدة الأولى ، نكرر الخطوات لتكوين الوحدة الثانية.

    بعد تكوين كلتا الوحدتين ، يمكننا الاتصال بـ Arduino كما هو موضح في الشكل 8 لجهاز الإرسال والشكل 9 لجهاز الاستقبال

    سيكون Arduino Uno هو جهاز الإرسال الذي سيقوم بقراءة زرين وعندما يتم الضغط على الزر B0 ، سيتم إرسال أمر لإضاءة المصباح الأحمر وعند الضغط على الزر B1 سيضيء المصباح الأزرق.

    لإيقاف تشغيل المصابيح ، ما عليك سوى الضغط على B0 أو B1 لإيقاف تشغيل المصباح المعني.




    في Arduino Uno ، سيكون لدينا زر B0 متصل بالدبوس الرقمي 2 من Arduino Uno والزر B1 متصل بالدبوس الرقمي 3 من Arduino Uno.

    يتم تنشيط كلا الزرين عند مستوى منطقي منخفض عند الضغط على الأزرار.

    لإنشاء اتصال تسلسلي ، سنستخدم المكتبة التي تسمى البرنامج التسلسلي لتكوين هذين المسامير 7 و 8 كدبابيس اتصال تسلسلي ، أي أننا سنحاكي اتصالًا تسلسليًا بواسطة البرنامج.

    اتصال HC-12 على Arduino Nano الذي سيكون جهاز الاستقبال هو نفس دائرة الإرسال ، سيكون الاختلاف هو وجود مصابيح LED على المسامير الرقمية 4 و 3.



    بعد تجميع دائرتي الإرسال والاستقبال ، سنبرمج الدائرتين.

    أولاً ، لدينا كود المرسل. يتم تقديم رمز المصدر أدناه.

            #include <SoftwareSerial.h> // Inclui a biblioteca Software Serial
    SoftwareSerial HC12(8,7); // 8 RX vai ligado no Tx do modulo HC 12, 7 TX vai
    ligado no RX do módulo
    #define B0 2
    #define B1 3
    void setup()
    {
     pinMode(B0,INPUT);
     pinMode(B1,INPUT);
     Serial.begin(9600);
     HC12.begin(9600);
    }
    void loop() 
    {
     if(!digitalRead(B0))
     {
     Serial.println("B0 pressionado ");
     Serial.print('1');
     HC12.print('1');
    
     while(digitalRead(B0)==0);
     }
    if(!digitalRead(B1))
     {
     Serial.println("B1 pressionado ");
     Serial.print('2');
     HC12.print('2');
    
     while(digitalRead(B1)==0);
     }
    }
             أولاً ، قمنا بتضمين مكتبة البرامج التسلسلية حتى نتمكن من استخدام أي دبوس رقمي كدبوس TX أو RX لاستخدامه كجهاز إرسال بيانات.   
    #include <SoftwareSerial.h> // Inclui a biblioteca Software Serial
        
    نقوم بإنشاء كائن باستخدام المسامير التي ستؤدي الاتصال التسلسلي.        SoftwareSerial HC12(8,7); // 8 RX vai ligado no Tx do modulo HC 12, 7 TX vai
    ligado no RX do módulo
        
    نقوم بتسمية المسامير 2 B0 و 3 B1 باستخدام التعريف ، كما هو موضح أدناه.        #define B0 2 
    #define B1 3
        
    في وظيفة الإعداد الفارغ ، يتم تكوين المسامير 2 و 3 كمدخلات ، وتكوين سرعة الاتصال التسلسلي لـ USB والاتصال التسلسلي مع وحدة HC-12.        void setup()
    {
     pinMode(B0,INPUT);
     pinMode(B1,INPUT);
     Serial.begin(9600);
     HC12.begin(9600);
    }