Ini adalah klien Python untuk Arduino IoT Cloud, yang berjalan pada CPython dan MicroPython. Klien mendukung metode otentikasi dasar dan lanjutan, mode sinkron dan asinkron, serta menyediakan API ramah pengguna yang memungkinkan pengguna terhubung ke cloud dan membuat serta menautkan objek lokal ke objek cloud hanya dengan beberapa baris kode.
Contoh dasar berikut menunjukkan cara terhubung ke cloud Arduino IoT menggunakan otentikasi nama pengguna dan kata sandi dasar, dan mengontrol LED dari widget sakelar dasbor.
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 ()
File secrets.py
Anda akan terlihat seperti ini:
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.
Perhatikan bahwa secara default, klien berjalan dalam mode asinkron. Dalam mode ini, klien menjalankan loop asyncio yang memperbarui tugas dan catatan, melakukan polling peristiwa jaringan, dll. Klien juga mendukung mode sinkron, yang memerlukan polling klien secara berkala. Untuk menjalankan klien dalam mode sinkron, teruskan sync_mode=True
saat membuat objek klien dan panggil client.update()
secara berkala setelah tersambung. Misalnya:
# 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 )
Untuk contoh lebih detail dan fitur API lanjutan, silakan lihat contoh.
Klien mendukung otentikasi dasar menggunakan nama pengguna dan kata sandi, dan pasangan kunci/sertifikat yang lebih canggih disimpan di sistem file atau di perangkat kripto. Untuk menguji fungsionalitas ini, langkah-langkah berikut dapat digunakan untuk meniru perangkat kripto (jika tidak tersedia) menggunakan SoftHSM di Linux.
Menggunakan slot pertama yang tersedia, dalam hal ini 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 "
Ini harus mencetak kunci dan sertifikat
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
Setelah selesai dengan token, token tersebut dapat dihapus dengan perintah berikut:
softhsm2-util --delete-token --token " arduino "
KEY_PATH
, CERT_PATH
dan DEVICE_ID
di examples/example.py
.ca-root.pem
atau setel CA_PATH
ke None
jika tidak digunakan.pin
default dan berikan ENGINE_PATH
dan MODULE_PATH
di ssl_params
jika diperlukan.python examples/example.py
MicroPython mendukung kedua mode otentikasi: mode dasar, menggunakan nama pengguna dan kata sandi, dan mTLS dengan kunci dan sertifikat yang disimpan di sistem file atau elemen aman (untuk papan yang disediakan). Untuk menggunakan file kunci dan sertifikat yang disimpan di sistem file, file tersebut harus dikonversi terlebih dahulu ke format DER. Perintah berikut dapat digunakan untuk mengkonversi dari PEM ke DER:
openssl ec -in key.pem -out key.der -outform DER
openssl x509 -in cert.pem -out cert.der -outform DER
Dalam hal ini KEY_PATH
, CERT_PATH
, masing-masing dapat diatur ke jalur DER kunci dan sertifikat:
KEY_PATH = "path/to/key.der"
CERT_PATH = "path/to/cert.der"
Alternatifnya, jika kunci dan sertifikat disimpan di SE, URInya dapat ditentukan dalam format berikut:
KEY_PATH = "se05x:token=0x00000064"
CERT_PATH = "se05x:token=0x00000065"
Dengan kumpulan kunci dan sertifikat, contoh dapat dijalankan dengan perintah berikut examples/micropython_advanced.py