これは Arduino IoT クラウド用の Python クライアントであり、CPython と MicroPython の両方で実行されます。このクライアントは、基本認証方法と高度な認証方法、同期モードと非同期モードをサポートし、ユーザーがわずか数行のコードでクラウドに接続し、ローカル オブジェクトを作成してクラウド オブジェクトにリンクできるようにする使いやすい API を提供します。
次の基本的な例は、基本的なユーザー名とパスワード認証を使用して 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 )
より詳細な例と高度な API 機能については、例を参照してください。
クライアントは、ユーザー名とパスワードを使用した基本認証と、ファイル システムまたは暗号化デバイスに保存されているより高度なキーと証明書のペアをサポートします。この機能をテストするには、次の手順を使用して、Linux 上で SoftHSM を使用して暗号化デバイス (使用できない場合) をエミュレートできます。
最初の利用可能なスロットを使用します (この場合は 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 "
examples/example.py
にKEY_PATH
、 CERT_PATH
、 DEVICE_ID
設定します。ca-root.pem
ファイルに指定するか、CA_PATH を使用しない場合はCA_PATH
None
に設定します。pin
をオーバーライドし、必要に応じてssl_params
にENGINE_PATH
とMODULE_PATH
を指定します。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
でサンプルを実行できます。