이는 CPython과 MicroPython 모두에서 실행되는 Arduino IoT Cloud용 Python 클라이언트입니다. 클라이언트는 기본 및 고급 인증 방법, 동기 및 비동기 모드를 지원하며 사용자가 단 몇 줄의 코드만으로 클라우드에 연결하고 로컬 개체를 생성하고 클라우드 개체에 연결할 수 있는 사용자 친화적인 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.
기본적으로 클라이언트는 비동기 모드에서 실행됩니다. 이 모드에서 클라이언트는 작업 및 기록을 업데이트하고 네트워킹 이벤트를 폴링하는 등의 asyncio 루프를 실행합니다. 클라이언트는 주기적인 클라이언트 폴링이 필요한 동기 모드도 지원합니다. 클라이언트를 동기 모드로 실행하려면 클라이언트 객체 생성 시 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 인증서를 제공하거나 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