NXP

K32W

Questo esempio funziona come un tipo di dispositivo a lampadina, con funzionalità di accensione e spegnimento. I passaggi sono stati verificati sulla scheda di sviluppo NXP K32W (kit di sviluppo IOTZTB-DK006).

Configurazione iniziale

  1. Assicurati di aver installato Python3 e questi pacchetti. I passaggi in questo documento sono stati convalidati con Python 3.8.
  2. Scarica e installa l'SDK K32W061 MCUXpresso 2.6.9.
  3. Una volta creato l'SDK, scarica il pacchetto SDK ed estrailo nella tua home directory. Imposta la variabile di ambiente NXP_K32W0_SDK_ROOT sulla posizione in cui hai estratto l'SDK. Ti consigliamo inoltre di aggiungere questo comando al file .*rc per la shell che stai utilizzando, ad esempio .zshrc:
    export NXP_K32W0_SDK_ROOT=$HOME/SDK_2_6_9_K32W061DK6/
  4. Clona e inizializza il repository NXP/Micro:

    git clone https://github.com/NXPmicro/matter.git
    cd matter
    git fetch origin v1.0-branch-nxp
    git checkout FETCH_HEAD
    git submodule update --init --recursive
    source ./scripts/activate.sh
    

  5. L'esempio utilizza la configurazione "Nodo interruttore generico". Assicurati che i ponticelli JP4/JP7 siano posizionati all'estrema sinistra (LPC-JN UART0):
    immagine

  1. Scarica e installa JLink sul tuo computer.
  2. Sulla scheda, assicurati che sia selezionato DFU con il ponticello BOOT accanto alla porta USB, quindi collega la scheda al computer con un cavo mini USB.
    immagine
  3. Scarica e installa LPCScrypt sul computer.
    1. Per MacOS, fai doppio clic sul pacchetto scaricato per installarlo.
    2. Per Linux, vai alla cartella da cui hai scaricato il pacchetto:
      chmod +x lpcscrypt-2.1.2_57.x86_64.deb.bin
      ./lpcscrypt-2.1.2_57.x86_64.deb.bin
  4. Dopo aver installato LPCScrypt, esegui questo script per riprogrammare la tua scheda (sostituisci <LPCScrypt_InstallDir> con il percorso di installazione effettivo di LPCScrypt):
    <LPCScrypt_InstallDir>/scripts/program_JLINK
  5. Dovresti vedere messaggi simili a quelli riportati di seguito. Premi la barra spaziatrice per iniziare la programmazione. Al termine, premi Invio per uscire.
    LPCScrypt - J-Link firmware programming script v2.1.2 Nov 2020.
    
    Connect an LPC-Link2 or LPCXpresso V2/V3 Board via USB then press Space.
    Booting LPCScrypt
    .
    LPCXpresso V2/V3 programmed with
    Firmware_JLink_LPCXpressoV2_20190404.bin
    -To use: remove DFU link and reboot the board
    
    Connect next board then press Space (or <return> to Quit)
  6. Scollega la scheda e riporta il ponticello BOOT su NORMAL. La lavagna è stata riconfigurata in modo da utilizzare JLink per il flashing di un'immagine.
    immagine

Crea l'immagine

  1. Prepara il repository:
    source ./scripts/activate.sh
  2. Installa le dipendenze:

    pip3 install pycrypto pycryptodome

  3. Aggiorna VENDOR_ID nella configurazione del progetto di esempio (CHIPProjectConfig.h). Deve essere il tuo VID secondo la specifica Matter o un VID allocato a scopo di test. Il valore fornito per VENDOR_ID deve corrispondere a quello che utilizzi durante la creazione dell'integrazione Matter in Google Home Developer Console.

grep VENDOR_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
 * CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID
#define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_ID your-hex-VID
1. Controlla "PRODUCT_ID" nella configurazione del progetto di esempio ("CHIPProjectConfig.h"). Il valore "PRODUCT_ID" può rimanere uguale a quello predefinito dell'esempio o essere modificato come desiderato, ma deve rispettare le attuali [limitazioni relative agli ID prodotto descritte nella sezione Prerequisiti](/matter/get-started#product_id). Inoltre, tieni presente che il valore fornito per "PRODUCT_ID" **deve corrispondere** a quello che utilizzi durante la [creazione dell'integrazione Matter](/matter/integration/create) in Developer Console.
grep PRODUCT_ID ./examples/lighting-app/nxp/k32w/k32w0/include/CHIPProjectConfig.h
 * CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID
#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID 0x4B4C
1. Crea l'app per l'illuminazione: 1. **Se la scheda di espansione OM15082 è collegata alla scheda K32W**, assicurati di impostare l'argomento build "chip_with_OM15082" su "1":
cd examples/lighting-app/nxp/k32w/k32w0/
gn gen out/debug --args="k32w0_sdk_root=\"${NXP_K32W0_SDK_ROOT}\" chip_with_OM15082=1 chip_with_ot_cli=0 is_debug=false chip_crypto=\"platform\" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
ninja -C out/debug
1. **Se la scheda di espansione OM15082 non è collegata**, ometti l'argomento build "chip_with_OM15082":
cd examples/lighting-app/nxp/k32w/k32w0/
gn gen out/debug --args="k32w0_sdk_root=\"${NXP_K32W0_SDK_ROOT}\" chip_with_ot_cli=0 is_debug=false chip_crypto=\"platform\" chip_with_se05x=0 chip_pw_tokenizer_logging=true chip_enable_ota_requestor=false"
ninja -C out/debug
Tieni presente che il [tokenizzatore Pigweed](https://pigweed.dev/pw_tokenizer){:target="_blank" .external}, che è un modulo "chip_with_OM15082" che consente di eseguire l'hashing delle stringhe con hashing per i log di Flash, che consente di analizzare il "token_di_token_di_Flash" in alto per ridurre notevolmente il Vedi [qui](https://github.com/project-chip/connectedhomeip/tree/v1.0-branch/examples/lighting-app/nxp/k32w/k32w0#pigweed-tokenizer){:target="_blank" .external} per saperne di più. 1. **Per gli utenti MacOS** (ignora questo passaggio se NON stai creando su MacOS): Apri lo script "sign_images.sh" (situato in "$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh") in un editor di testo e apporta le seguenti modifiche: 1. Commenta o rimuovi queste righe per risolvere l'errore "pacchetto non installato" su macOS:
is_linux_package_installed "python3"
is_linux_package_installed "python3-pip"
1. Correggi l'argomento nell'utilità "file" ("-ib"" dovrebbe essere "`-Ib`"), altrimenti lo script di firma non riuscirà a generare un file ".bin":
MIME_SET="$(file -ib $FILENAME)"
Cambia in:
MIME_SET="$(file -Ib $FILENAME)"
1. Firma l'immagine:
chmod +x $NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh
$NXP_K32W0_SDK_ROOT/tools/imagetool/sign_images.sh out/debug/

Fai lampeggiare la lavagna

  1. Avvia la riga di comando di JLink con la scheda collegata tramite un cavo mini USB:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  2. Nella riga di comando JLink, inserisci il comando erase per cancellare un'immagine esistente sulla lavagna. Questa operazione è necessaria se hai già eseguito il flashing della lavagna.
    erase
    Without any give address range, Erase Chip will be executed
    Erasing device...
    J-Link: Flash download: Total time needed: 2.878s (Prepare: 0.051s, Compare: 0.000s, Erase: 2.789s, Program: 0.000s, Verify: 0.000s, Restore: 0.037s)
    Erasing done.
  3. Quindi esegui il flash dell'immagine utilizzando il comando loadbin:
    loadbin out/debug/chip-k32w061-light-example.bin, 0
    Downloading file [out/debug/chip-k32w061-light-example.bin]...
    J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes)
    J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s)
    J-Link: Flash download: Program & Verify speed: 122 KB/s
    O.K.
  4. Esci dall'interfaccia a riga di comando di JLink digitando exit.
  5. Riavvia JLink:
    JLinkExe -device K32W061 -if SWD -speed 4000 -autoconnect 1
  6. Fai nuovamente il flash dell'immagine, ignorando il comando erase questa volta:
    loadbin out/debug/chip-k32w061-light-example.bin, 0
    Downloading file [out/debug/chip-k32w061-light-example.bin]...
    J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (586752 bytes)
    J-Link: Flash download: Total: 7.492s (Prepare: 0.054s, Erase: 2.738s, Program & Verify: 4.661s, Restore: 0.037s)
    J-Link: Flash download: Program & Verify speed: 122 KB/s
    O.K.
  7. Una volta eseguito il comando loadbin, premi il pulsante SW2 sulla scheda di espansione per eseguire un ripristino dei dati di fabbrica, quindi premi il pulsante SW4 RESET sulla scheda principale per iniziare a eseguire l'immagine.

Convalida l'esempio

  1. Il dispositivo deve presentarsi come dispositivo seriale USB sul tuo computer. Puoi cercarlo in /dev/:
    ls -la /dev/tty*
    Puoi aprire la console seriale con lo script python3 detokenizer.py, uno script che decodifica i log tokenizzati Pigweed da una porta seriale. Ad esempio, se il dispositivo si trova all'indirizzo /dev/ttyACM0:
    python3 ./scripts/detokenizer.py serial -i /dev/ttyACM0 -d out/debug/chip-k32w061-light-example-database.bin
  2. Per ripristinare i dati di fabbrica della scheda, premi il pulsante SW2. LED2 e LED3 lampeggeranno insieme per un po' di tempo. Nella console seriale dovresti vedere messaggi come questo:
    [Info]Factory Reset Triggered. Push the RESET button within 6000 ms to cancel!
    [Info]Device will factory reset...
    [Info]Performing factory reset
  3. Per attivare/disattivare lo stato della lampadina, fai clic sul pulsante SW3. Dovrebbe attivare/disattivare il LED D3.

Prerequisiti per la messa in servizio

Prima di mettere in servizio la scheda di sviluppo NXP K32W, tieni presente quanto segue:

  1. La pubblicità BLE deve essere attivata prima che il dispositivo possa essere rilevato e commissionato nell'ecosistema Google Home. Per attivare temporaneamente la pubblicità (per 15 minuti, secondo la specifica Matter), premi il pulsante INTERFACCIA UTENTE.
  2. Senza un modulo di accelerazione hardware crittografico, la scheda di sviluppo K32 potrebbe non essere in grado di completare la messa in servizio prima del timeout del flusso dal lato del dispositivo mobile Android. Puoi identificare che si è verificato un timeout utilizzando adb logcat da un computer collegato al tuo telefono. Quando si verifica un timeout, viene visualizzato un messaggio di log come:

    Device connection failed. Error third_party/connectedhomeip/src/protocols/secure_channel/CASESession.cpp:275: CHIP Error 0x00000032: Timeout

    Per ulteriori informazioni sulla configurazione e l'utilizzo di adb, consulta la sezione Risoluzione dei problemi.

Passaggi successivi

Una volta creato l'esempio Matter, crea un progetto sviluppatore.