นี่คือไคลเอ็นต์ Python สำหรับ Arduino IoT Cloud ซึ่งทำงานบนทั้ง CPython และ MicroPython ไคลเอนต์รองรับวิธีการรับรองความถูกต้องขั้นพื้นฐานและขั้นสูง โหมดซิงโครนัสและอะซิงโครนัส และมอบ API ที่ใช้งานง่ายซึ่งช่วยให้ผู้ใช้สามารถเชื่อมต่อกับคลาวด์และสร้างและเชื่อมโยงออบเจ็กต์ในเครื่องกับออบเจ็กต์บนคลาวด์ด้วยโค้ดเพียงไม่กี่บรรทัด
ตัวอย่างพื้นฐานต่อไปนี้แสดงวิธีเชื่อมต่อกับ Arduino IoT cloud โดยใช้การตรวจสอบสิทธิ์ชื่อผู้ใช้และรหัสผ่านพื้นฐาน และควบคุม 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 )
สำหรับตัวอย่างโดยละเอียดเพิ่มเติมและคุณลักษณะ API ขั้นสูง โปรดดูตัวอย่าง
ไคลเอนต์รองรับการรับรองความถูกต้องขั้นพื้นฐานโดยใช้ชื่อผู้ใช้และรหัสผ่าน และคู่คีย์/ใบรับรองขั้นสูงที่จัดเก็บไว้ในระบบไฟล์หรือในอุปกรณ์เข้ารหัส เพื่อทดสอบฟังก์ชันการทำงานนี้ คุณสามารถใช้ขั้นตอนต่อไปนี้เพื่อจำลองอุปกรณ์เข้ารหัสลับ (หากไม่มี) โดยใช้ 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 คุณสามารถระบุ URI เหล่านั้นในรูปแบบต่อไปนี้:
KEY_PATH = "se05x:token=0x00000064"
CERT_PATH = "se05x:token=0x00000065"
ด้วยชุดคีย์และใบรับรอง คุณสามารถรันตัวอย่างด้วยคำสั่งต่อไปนี้ examples/micropython_advanced.py