Dies ist ein Python-Client für die Arduino IoT Cloud, der sowohl auf CPython als auch auf MicroPython läuft. Der Client unterstützt grundlegende und erweiterte Authentifizierungsmethoden sowie synchrone und asynchrone Modi und bietet eine benutzerfreundliche API, die es Benutzern ermöglicht, mit nur wenigen Codezeilen eine Verbindung zur Cloud herzustellen und lokale Objekte zu erstellen und mit Cloud-Objekten zu verknüpfen.
Das folgende einfache Beispiel zeigt, wie Sie mithilfe der einfachen Authentifizierung mit Benutzername und Passwort eine Verbindung zur Arduino IoT-Cloud herstellen und eine LED über das Schalter-Widget eines Dashboards steuern.
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 ()
Ihre Datei secrets.py
sollte so aussehen:
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.
Beachten Sie, dass der Client standardmäßig im asynchronen Modus ausgeführt wird. In diesem Modus führt der Client eine asynchrone Schleife aus, die Aufgaben und Datensätze aktualisiert, Netzwerkereignisse abfragt usw. Der Client unterstützt auch einen synchronen Modus, der regelmäßige Client-Abfragen erfordert. Um den Client im synchronen Modus auszuführen, übergeben Sie beim Erstellen eines Clientobjekts sync_mode=True
und rufen Sie nach dem Herstellen der Verbindung regelmäßig client.update()
auf. Zum Beispiel:
# 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 )
Ausführlichere Beispiele und erweiterte API-Funktionen finden Sie in den Beispielen.
Der Client unterstützt die Basisauthentifizierung mithilfe eines Benutzernamens und eines Kennworts sowie des erweiterten Schlüssel-/Zertifikatpaars, das im Dateisystem oder in einem Kryptogerät gespeichert wird. Um diese Funktionalität zu testen, können die folgenden Schritte verwendet werden, um ein Kryptogerät (falls keins verfügbar ist) mit SoftHSM unter Linux zu emulieren.
Verwendung des ersten verfügbaren Steckplatzes, in diesem Fall 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 "
Dadurch sollten der Schlüssel und das Zertifikat ausgedruckt werden
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
Wenn Sie mit dem Token fertig sind, können Sie es mit dem folgenden Befehl löschen:
softhsm2-util --delete-token --token " arduino "
KEY_PATH
, CERT_PATH
und DEVICE_ID
in examples/example.py
fest.ca-root.pem
-Datei bereit oder setzen Sie CA_PATH
auf None
, wenn es nicht verwendet wird.pin
und geben Sie bei Bedarf ENGINE_PATH
und MODULE_PATH
in ssl_params
an.python examples/example.py
MicroPython unterstützt beide Authentifizierungsmodi: den Basismodus mit Benutzername und Passwort und mTLS mit Schlüssel und Zertifikat, die im Dateisystem oder einem sicheren Element (für bereitgestellte Boards) gespeichert sind. Um im Dateisystem gespeicherte Schlüssel- und Zertifikatsdateien verwenden zu können, müssen diese zunächst in das DER-Format konvertiert werden. Die folgenden Befehle können zur Konvertierung von PEM nach DER verwendet werden:
openssl ec -in key.pem -out key.der -outform DER
openssl x509 -in cert.pem -out cert.der -outform DER
In diesem Fall können KEY_PATH
und CERT_PATH
auf die Schlüssel- bzw. Zertifikat-DER-Pfade festgelegt werden:
KEY_PATH = "path/to/key.der"
CERT_PATH = "path/to/cert.der"
Wenn Schlüssel und Zertifikat auf der SE gespeichert sind, können deren URIs alternativ im folgenden Format angegeben werden:
KEY_PATH = "se05x:token=0x00000064"
CERT_PATH = "se05x:token=0x00000065"
Wenn der Schlüssel und das Zertifikat festgelegt sind, kann das Beispiel mit dem folgenden Befehl examples/micropython_advanced.py
ausgeführt werden