هذا هو عميل Python لـ Arduino IoT Cloud، والذي يعمل على كل من CPython وMicroPython. يدعم العميل طرق المصادقة الأساسية والمتقدمة، والأوضاع المتزامنة وغير المتزامنة، ويوفر واجهة برمجة تطبيقات سهلة الاستخدام تتيح للمستخدمين الاتصال بالسحابة وإنشاء كائنات محلية وربطها بالكائنات السحابية باستخدام بضعة أسطر فقط من التعليمات البرمجية.
يوضح المثال الأساسي التالي كيفية الاتصال بسحابة Arduino IoT باستخدام مصادقة اسم المستخدم وكلمة المرور الأساسية، والتحكم في مؤشر LED من أداة التبديل بلوحة المعلومات.
from secrets import DEVICE_ID
from secrets import SECRET_KEY
# Switch callback, toggles the LED.
def on_switch_changed ( client , value ):
# Note the client object passed to this function can be used to access
# and modify any registered cloud object. The following line updates
# the LED value.
client [ "led" ] = value
# 1. Create a client object, which is used to connect to the IoT cloud and link local
# objects to cloud objects. Note a username and password can be used for basic authentication
# on both CPython and MicroPython. For more advanced authentication methods, please see the examples.
client = ArduinoCloudClient ( device_id = DEVICE_ID , username = DEVICE_ID , password = SECRET_KEY )
# 2. Register cloud objects.
# Note: The following objects must be created first in the dashboard and linked to the device.
# When the switch is toggled from the dashboard, the on_switch_changed function is called with
# the client object and new value args.
client . register ( "sw1" , value = None , on_write = on_switch_changed )
# The LED object is updated in the switch's on_write callback.
client . register ( "led" , value = None )
# 3. Start the Arduino cloud client.
client . start ()
يجب أن يبدو ملف secrets.py
الخاص بك كما يلي:
WIFI_SSID = "" # WiFi network SSID (for MicroPython)
WIFI_PASS = "" # WiFi network key (for MicroPython)
DEVICE_ID = "" # Provided by Arduino cloud when creating a device.
SECRET_KEY = "" # Provided by Arduino cloud when creating a device.
لاحظ أنه بشكل افتراضي، يعمل العميل في الوضع غير المتزامن. في هذا الوضع، يقوم العميل بتشغيل حلقة غير متزامنة تقوم بتحديث المهام والسجلات، واستقصاء أحداث الشبكة، وما إلى ذلك. ويدعم العميل أيضًا الوضع المتزامن، الذي يتطلب استطلاعًا دوريًا للعميل. لتشغيل العميل في الوضع المتزامن، قم بتمرير sync_mode=True
عند إنشاء كائن عميل واستدعاء client.update()
بشكل دوري بعد الاتصال. على سبيل المثال:
# Run the client in synchronous mode.
client = ArduinoCloudClient ( device_id = DEVICE_ID , ..., sync_mode = True )
....
client . register ( "led" , value = None )
....
# In synchronous mode, this function returns immediately after connecting to the cloud.
client . start ()
# Update the client periodically.
while True :
client . update ()
time . sleep ( 0.100 )
للحصول على أمثلة أكثر تفصيلاً وميزات واجهة برمجة التطبيقات المتقدمة، يرجى الاطلاع على الأمثلة.
يدعم العميل المصادقة الأساسية باستخدام اسم المستخدم وكلمة المرور، وزوج المفتاح/الشهادة الأكثر تقدمًا المخزن على نظام الملفات أو في جهاز تشفير. لاختبار هذه الوظيفة، يمكن استخدام الخطوات التالية لمحاكاة جهاز تشفير (إذا لم يكن واحدًا متاحًا) باستخدام SoftHSM على Linux.
باستخدام أول فتحة متاحة، في هذه الحالة 0
softhsm2-util --init-token --slot 0 --label " arduino " --pin 1234 --so-pin 1234
p11tool --provider=/usr/lib/softhsm/libsofthsm2.so --login --set-pin=1234 --write " pkcs11:token=arduino " --load-privkey key.pem --label " Mykey "
p11tool --provider=/usr/lib/softhsm/libsofthsm2.so --login --set-pin=1234 --write " pkcs11:token=arduino " --load-certificate cert.pem --label " Mykey "
يجب أن يؤدي هذا إلى طباعة المفتاح والشهادة
p11tool --provider=/usr/lib/softhsm/libsofthsm2.so --login --set-pin=1234 --list-all pkcs11:token=arduino
Object 0:
URL: pkcs11:model=SoftHSM%20v2 ; manufacturer=SoftHSM%20project ; serial=841b431f98150134 ; token=arduino ; id=%67%A2%AD%13%53%B1%CE%4F%0E%CB%74%34%B8%C6%1C%F3%33%EA%67%31 ; object=mykey ; type=private
Type: Private key (EC/ECDSA)
Label: mykey
Flags: CKA_WRAP/UNWRAP ; CKA_PRIVATE ; CKA_SENSITIVE ;
ID: 67:a2:ad:13:53:b1:ce:4f:0e:cb:74:34:b8:c6:1c:f3:33:ea:67:31
Object 1:
URL: pkcs11:model=SoftHSM%20v2 ; manufacturer=SoftHSM%20project ; serial=841b431f98150134 ; token=arduino ; id=%67%A2%AD%13%53%B1%CE%4F%0E%CB%74%34%B8%C6%1C%F3%33%EA%67%31 ; object=Mykey ; type=cert
Type: X.509 Certificate (EC/ECDSA-SECP256R1)
Expires: Sat May 31 12:00:00 2053
Label: Mykey
ID: 67:a2:ad:13:53:b1:ce:4f:0e:cb:74:34:b8:c6:1c:f3:33:ea:67:31
عند الانتهاء من استخدام الرمز المميز، يمكن حذفه باستخدام الأمر التالي:
softhsm2-util --delete-token --token " arduino "
KEY_PATH
و CERT_PATH
و DEVICE_ID
في examples/example.py
.ca-root.pem
أو قم بتعيين CA_PATH
على None
إذا لم يتم استخدامه.pin
الافتراضي وقم بتوفير ENGINE_PATH
و MODULE_PATH
في ssl_params
إذا لزم الأمر.python examples/example.py
يدعم MicroPython كلا وضعي المصادقة: الوضع الأساسي، باستخدام اسم مستخدم وكلمة مرور، وmTLS مع المفتاح والشهادة المخزنة على نظام الملفات أو عنصر آمن (لللوحات المتوفرة). لاستخدام ملفات المفاتيح والشهادات المخزنة في نظام الملفات، يجب أولاً تحويلها إلى تنسيق DER. يمكن استخدام الأوامر التالية للتحويل من PEM إلى DER:
openssl ec -in key.pem -out key.der -outform DER
openssl x509 -in cert.pem -out cert.der -outform DER
في هذه الحالة، يمكن تعيين KEY_PATH
، CERT_PATH
، على مسارات DER والمفتاح والشهادة، على التوالي:
KEY_PATH = "path/to/key.der"
CERT_PATH = "path/to/cert.der"
وبدلاً من ذلك، إذا تم تخزين المفتاح والشهادة على SE، فيمكن تحديد عناوين URL الخاصة بهما بالتنسيق التالي:
KEY_PATH = "se05x:token=0x00000064"
CERT_PATH = "se05x:token=0x00000065"
باستخدام مجموعة المفتاح والشهادة، يمكن تشغيل المثال باستخدام الأمر التالي examples/micropython_advanced.py