اتصال إيثرنت TCP مع اردوينو

اتصال إيثرنت TCP مع اردوينو

اتصال إيثرنت TCP مع اردوينو

من وجهة نظر البرمجيات، إنشاء اتصال إيثرنت مع اردوينو أنها بسيطة جدا. للقيام بذلك، استخدم مكتبة إيثرنت. تم تصميم هذه المكتبة ل درع إيثرنت الذي يقوم على المتكاملة W5100، ولكن هناك لوحات أو وحدات أخرى مختلفة و/أو تستخدم لوحات أو وحدات متكاملة أخرى، مثل ENC28J60. لتبسيط استخدامه وزيادة التوافق، تستخدم المكتبات الأخرى نفس الشيء (تقريبًا). API أن مكتبة إيثرنت، سيكون عليك فقط استبدال المكتبة البديلة بالمكتبة الأصلية أو تضمينها (عندما يكون الاسم مختلفًا) في مكانها حتى لو تم استخدام نفس الوظائف (أو مشابهة جدًا) في الكود. في حالتي، أستخدم مكتبة UIPEthernet de نوربرت تروتشسيس باتباع نفس العملية التي سأصفها في هذا النص.

وحدة ENC28J60 للاستخدام مع مكتبة UIPEthernet

1. قم بتعريف اتصال إيثرنت

سواء كنت ستتبنى دور زبون مثل واحد الخادمعليك أولاً تحديد الاتصال بالوظيفة يبدأ () والتي يمكن تمريرها كمعلمة فقط عنوان MAC وانتظر الخادم DHCP على الشبكة تعيين أ عنوان IP وبقية التكوين أو من الممكن أيضًا الإشارة (اختياريًا) إلى المزيد من المعلمات حتى يتم تحديد التكوين الكامل:

  1. Dirección MAC (والذي سبق ذكره)
  2. عنوان IP من الدرع أو الوحدة
  3. عنوان IP للخادم DNS (خادم واحد فقط)
  4. عنوان IP الخاص بـ بوابة
  5. قناع صافي

من المستحسن الإشارة إلى جميع المعلمات، ما لم يكن خصمها هو المعتاد، لتجنب أن التكوين غير صحيح (على سبيل المثال، أن البوابة ليست العنوان الأول للشبكة).

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

La عنوان MAC يتم تعريفه لهذه المكتبة كمصفوفة 6 بايت. يعد عنوان MAC (من المفترض أن يكون) معرفًا فريدًا تشير فيه البايتات الأولى إلى الشركة المصنعة والطراز، وتشير البايتات الأخيرة إلى الجهاز المحدد. المتكاملة ENC28J60 لا يتضمن عنوان MAC إلا إذا اخترت شراء ملف عنوان MAC متكامل من Microchip (أو كتلة كاملة OUI من العناوين إلى IEEE إذا كان تشغيل الأجهزة كبيرًا بما يكفي لجعله جديرًا بالاهتمام). عندما لا يكون لديك عنوان MAC، يمكنك اختراع عنوان، مع الحرص على عدم تعارضه مع العناوين الأخرى الموجودة على الشبكة حيث يوجد الجهاز.

إذا تم التكوين باستخدام خادم DHCP بدلاً من "يدويًا"، فستتم الوظيفة عنوان IP المحلي() من المفيد الرجوع إلى العنوان الذي خصصه الخادم للوحدة. لتجديد العنوان المخصص (في حالة انتهاء الوقت المقابل) مكتبة إيثرنت يوفر الوظيفة يحافظ على() والتي سيتم إعلامك أيضًا من خلال إعادة الرمز الذي يتوافق مع حالة التجديد:

  1. ولم يكن للعملية أي تأثير
  2. حدث خطأ أثناء تجديد عنوان IP
    لا يمكن تمديد استخدام عنوان IP المعين على نفس الخادم
  3. تم تجديد عنوان IP بنجاح
  4. فشلت إعادة ربط عنوان IP
    لا يمكن تمديد استخدام عنوان IP المعين على أي خادم
  5. تمت إعادة تعيين عنوان IP بنجاح

باستخدام المعلومات التي تم الاطلاع عليها حتى الآن، يمكنك كتابة مثال لكيفية بدء اتصال Ethernet عن طريق تكوين عنوان IP من خلال خادم DHCP على الشبكة. يحاول رمز المثال التالي تجديد عنوان IP كل فترة زمنية معينة ويبلغ بالنتيجة.

يقوم المثال أدناه بتعيين عنوان IP وبقية التكوين يدويًا باستخدام الكائنات IPADDRESS لجعله أكثر راحة في القراءة و(في حالة التعليمات البرمجية الأكثر تعقيدًا) لتجنب الأخطاء التي قد تحدث إذا تمت كتابة العنوان (خطأ) في كل مرة يتم استخدامه فيها.

2. ابدأ الاتصال في وضع العميل أو الخادم

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

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

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

3. إنشاء اتصال كعميل

كما قيل، بمجرد إنشاء الاتصال، فإن العميل هو الذي يأخذ زمام المبادرة لإجراء الاستفسارات. سيكون الخادم في انتظار هذه المبادرة وسوف يستجيب وفقًا لذلك. ولذلك، فإن العميل هو الذي يتصل بالخادم، للقيام بذلك نستخدمه الاتصال () تشير إلى الخادم كمعلمات (عنوان IP أو URL) و ميناء في من يستمع.

بناءً على نتيجة العملية، ستقوم الدالة بإرجاع القيم

  1. (نجاح) تم الاتصال بنجاح
  2. تأسيس الاتصال
  3. (نفد وقته) لقد انقضت المهلة دون إنشاء الاتصال
  4. (INVALID_SERVER) لم يتم العثور على الخادم أو أنه لا يستجيب بشكل صحيح
  5. (مبتورة) تم قطع الاتصال قبل أن يتم تأسيسه بالكامل
  6. (استجابة غير صالحة) استجابة الخادم غير صحيحة

قبل البدء في إجراء الاستعلامات، من الضروري التحقق من أن الاتصال يعمل مع الوظيفة متصل () التي سوف تعود صحيح إذا كان متاحًا بالفعل أو زائف غير ذلك.

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

4. إرسال البيانات

مثل الفئات الأخرى المعروفة، مثل مسلسل، ومع الاستخدام المماثل، الطبقات العميل y المخدم لديها وظائف

  • اكتب(حقيقة) o اكتب(المخزن المؤقت، الطول)

    يرسل المعلومات باستخدام كائن العميل أو الخادم الذي يتم استدعاءه منه. معلمة "البيانات" مفردة بايت o دبابة بينما "المخزن المؤقت" عبارة عن مجموعة من بايت o دبابة والتي يتم إرسال مبلغ يساوي "الطول"، هذه الوظيفة هي التي تستخدم للعمليات الثنائية، مقارنة بالوظيفتين التاليتين المخصصتين عادةً لإرسال النص.

  • طباعة(قاعدة البيانات)

    يرسل كعميل أو خادم (اعتمادًا على الفئة التي يتم استخدامه منها) المعلومات المقابلة لـ "البيانات" كنص. إذا لم يتم التعبير عن المعلومات كنص (على سبيل المثال عدد صحيح)، فيمكن استخدام المعلمة الاختيارية "base" لاختيار التحويل، والذي يمكن أن يكون أحد الثوابت BIN أو OCT أو DEC أو HEX التي تشير، على التوالي. القواعد المقابلة للثنائي (الأساس 2)، والثماني (الأساس 8)، والنظام العشري (الأساس 10)، والنظام الست عشري (الأساس 16)

  • println(قاعدة البيانات)

    العملية مماثلة للعملية السابقة باستثناء الإرسال، بعد المعلومات التي تشير إليها صراحةً معلمة "البيانات"، حرف إرجاع (الرمز 13 الذي يمكن تمثيله كـ \r) ونهاية السطر (الرمز 10، والذي يمكن تمثيله كـ \r) ممثلة بـ \n) يُشار إلى هذه الرموز بشكل متكرر، على التوالي، بالاختصار CR (عودة النقل) و LF (تغذية الخط)

تقوم الوظائف الثلاث السابقة بإرجاع عدد البايتات التي تم إرسالها، كما تفعل الوظائف المكافئة للفئة مسلسل; كما ذكر أعلاه، العملية قابلة للمقارنة.

5. تلقي البيانات

كما هو الحال في عمليات إرسال البيانات، فإن عمليات الاستقبال قابلة للمقارنة مع تلك المستخدمة على نطاق واسع مسلسل. بروتوكول الاستقبال مشابه أيضًا: تحقق مما إذا كانت هناك بيانات (كافية) متاحة (متاح) وفي هذه الحالة قراءتها


  • متوفرة ()

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

  • اقرأ()

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

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

6. قم بإنهاء الاتصال

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

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

من الممارسات الجيدة الأخرى عند إنهاء اتصال العميل هو إفراغ ملف التي يستخدمها الفصل. للقيام بذلك، الوظيفة متاحة تدفق () يجب استدعاؤه بعد إنهاء اتصال العميل به قف()

مثال لاستعلام HTTP GET

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

أكتب تعليق

ربما تكون قد فاتتك