Il s'agit d'un client Python pour Arduino IoT Cloud, qui fonctionne à la fois sur CPython et MicroPython. Le client prend en charge les méthodes d'authentification de base et avancées, les modes synchrone et asynchrone et fournit une API conviviale qui permet aux utilisateurs de se connecter au cloud et de créer et lier des objets locaux à des objets cloud avec seulement quelques lignes de code.
L'exemple de base suivant montre comment se connecter au cloud Arduino IoT à l'aide d'une authentification de base par nom d'utilisateur et mot de passe, et contrôler une LED à partir du widget de commutation d'un tableau de bord.
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 ()
Votre fichier secrets.py
devrait ressembler à ceci :
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.
Notez que par défaut, le client s'exécute en mode asynchrone. Dans ce mode, le client exécute une boucle asyncio qui met à jour les tâches et les enregistrements, interroge les événements réseau, etc. Le client prend également en charge un mode synchrone, qui nécessite une interrogation périodique du client. Pour exécuter le client en mode synchrone, transmettez sync_mode=True
lors de la création d'un objet client et appelez client.update()
périodiquement après la connexion. Par exemple:
# 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 )
Pour des exemples plus détaillés et des fonctionnalités avancées de l'API, veuillez consulter les exemples.
Le client prend en charge l'authentification de base à l'aide d'un nom d'utilisateur et d'un mot de passe, ainsi que la paire clé/certificat plus avancée stockée sur le système de fichiers ou dans un périphérique de chiffrement. Pour tester cette fonctionnalité, les étapes suivantes peuvent être utilisées pour émuler un périphérique de chiffrement (s'il n'en est pas disponible) à l'aide de SoftHSM sous Linux.
En utilisant le premier emplacement disponible, dans ce cas 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 "
Cela devrait imprimer la clé et le certificat
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
Une fois terminé avec le jeton, il peut être supprimé avec la commande suivante :
softhsm2-util --delete-token --token " arduino "
KEY_PATH
, CERT_PATH
et DEVICE_ID
dans examples/example.py
.ca-root.pem
ou définissez CA_PATH
sur None
s'il n'est pas utilisé.pin
par défaut et fournissez ENGINE_PATH
et MODULE_PATH
dans ssl_params
si nécessaire.python examples/example.py
MicroPython prend en charge les deux modes d'authentification : le mode de base, utilisant un nom d'utilisateur et un mot de passe, et mTLS avec la clé et le certificat stockés sur le système de fichiers ou un élément sécurisé (pour les cartes provisionnées). Pour utiliser les fichiers de clé et de certificat stockés sur le système de fichiers, ils doivent d'abord être convertis au format DER. Les commandes suivantes peuvent être utilisées pour convertir de PEM en DER :
openssl ec -in key.pem -out key.der -outform DER
openssl x509 -in cert.pem -out cert.der -outform DER
Dans ce cas, KEY_PATH
, CERT_PATH
, peuvent être définis respectivement sur les chemins DER de clé et de certificat :
KEY_PATH = "path/to/key.der"
CERT_PATH = "path/to/cert.der"
Alternativement, si la clé et le certificat sont stockés sur le SE, leurs URI peuvent être spécifiés au format suivant :
KEY_PATH = "se05x:token=0x00000064"
CERT_PATH = "se05x:token=0x00000065"
Avec la clé et le certificat définis, l'exemple peut être exécuté avec la commande suivante examples/micropython_advanced.py