مقدمة عن السلاسل النصية json/التعبيرات النظامية

مقدمة

في تطبيقات المتحكمات الدقيقة (MCU) التقليدية، عندما تتواصل متحكمتان عبر المنفذ التسلسلي، فإنهما تُعرّفان بعض الإطارات بأنفسهما، بما في ذلك رأس الإطار، وإطار البيانات، وإطار التحقق، وذيل الإطار. يوضح الشكل بروتوكول MavLink الخاص بالتحكم في الطيران.

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

ميزة ممتازة: لا حاجة لمعرفة التفاصيل في الأسفل، على سبيل المثال:

  • لا داعي للتفكير في ترتيب البايتات الكبير والصغير (endianness)
  • لا داعي للتفكير في تبديل بايتات البيانات
  • يدعم أطوالاً عشوائية من int وfloat
  • سهل الفهم والتطوير.

عيب: الكفاءة منخفضة بعض الشيء، والترجمة (compiling) وفك الترميز (decoding) يستهلكان المعالج.

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

السلسلة النصية

string = "hello string!"

يستطيع OpenMV إرسال سلسلة نصية عبر المنفذ التسلسلي.

from machine import UART

uart = UART(1, 9600)
string = "hello string!"
uart.write(string)

عمليات السلاسل النصية

http://www.runoob.com/python3/python3-string.html

على سبيل المثال:


blobs=[12,23,11,22,33,44]

print("%d", blobs[3])

JSON هو شكل موجز وفعال لتبادل البيانات. يمكن أن يكون بسيطاً مثل هذا:

"[[12,0],[10,12],[22,10],[99,11]]"

ملاحظة: أستخدم سلسلة نصية مباشرة كهذه لإرسال إحداثيات x, y لكتلة اللون في OpenMV.

كما يمكن أن يكون معقداً مثل هذا: (''' تشير إلى سلسلة نصية متعددة الأسطر في بايثون)

'''
{
    "number":10,
    "color" :[255,0,0],
    "rate" :0.65
}
'''

أستخدم هذا الهيكل لإرسال معلومات اللون التي تم جمعها في OpenMV إلى خادم الواي فاي.

وهكذا مثلاً، يمكن أن يكون كهذا:

'''
{
  "firstName": "John",
  "lastName": "Smith",
  "sex": "male",
  "age": 25,
  "address": 
  {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021"
  },
  "phoneNumber": 
  [
    {
      "type": "home",
      "number": "212 555-1234"
    },
   {            
      "type": "fax",
      "number": "646 555-4567"
    }
  ]
}
'''

انتبه: شكل json يشبه بايثون، لكن json هو شكل تعبير عن الكائن، ويختلف بعض الشيء عن تمثيل بايثون.

تفريغ json في بايثون

يحتوي OpenMV على وحدات json، حيث يمكن لـ json.dumps(obj) وujson.loads(str) تفريغ سلسلة json وفك ترميزها بسهولة.

import json

obj = [[12,0],[10,12],[22,10],[99,11]]
print(json.dumps(obj))

obj = {
    "number":10,
    "color" :[255,0,0],
    "rate" :0.65
}
print(json.dumps(obj))

سيُخرج:

'[[12, 0], [10, 12], [22, 10], [99, 11]]'

'{"color": [255, 0, 0], "number": 10, "rate": 0.65}'

ثم أرسل السلاسل النصية عبر المنفذ التسلسلي، وفي الطرف الآخر، قم بفك ترميز سلسلة json إلى كائن/مصفوفة وتابع مع عملية المنطق التالية.

وحدات json لشرائح مفردة أخرى

JSON بسيط وعام.

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

وحدات json للغات أخرى على الحاسوب

بشكل أساسي، تدعم جميع اللغات json (حتى lisp)، لذا يسهل التواصل.

التعبيرات النظامية (Regular expression)

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

على سبيل المثال، في معالجة URL (لن يُستخدم كثيراً في OpenMV، سنتجاوزه، وستكون هناك مقدمة موجزة عن تطبيق esp للشبكة في MicroPython الخاص بي)

results matching ""

    No results matching ""