Skip to main content

Collection of tools for cloud provisioning of Microchip IoT kits

Project description

pykitcommander

pykitcommander manages interaction with Microchip development kits based on PKOB nano on-board debugger

PyPI - Format PyPI - Python Version PyPI - License

Overview

pykitcommander is available:

Background

In many situations interaction with peripheral hardware components on a development kit is done via a "bridge" application running on the MCU on that kit. To achieve this, the bridge firmware must be programmed onto that MCU, and then communications over a given channel and protocol can logically link the host computer to the peripheral components.

pykitcommander manages some aspects of this interaction by:

  • Containing a registry of application hex files for various applications on various kits
  • Programming the application onto the kit
  • Providing a most-probable serial-port connection string for that kit
  • Providing an indication of what protocol format is in use on the application
  • Supporting common protocol framing formats being used

Usage

pykitcommander is intended to be used as a library. Its primary consumers are:

Supported kits are:

  • AVR-IoT WG and WA
  • PIC-IoT WG and WA
  • AVR-IoT Cellular Mini
  • SAM-IoT WG
  • SAM-IoT Wx V2
  • CryptoAuth Trust Platform Development Kit

Simple example

This example shows how pykitcommander can be used to read the serial number from an ECC608 device. This device is connected to the MCU on the board (either PIC or AVR depending on the variant). The MCU is connected to the host computer via a virtual serial port provided by the on-board debugger.

This example uses the 'setup_kit("iotprovision")' helper function to achieve this very simply.

from pykitcommander.kitprotocols import setup_kit

# Request iotprovision protocol to be set up on a connected kit
info = setup_kit("iotprovision")

# Create a serial connection to communicate with the firmware
# Note: SerialCDC class wraps pyserial Serial class
from pyedbglib.serialport.serialcdc import SerialCDC
with SerialCDC(info['port'], info['protocol_baud'], timeout=10, stopbits=2) as serial_connection:
    # The firmware driver wraps this serial connection which enables a simple command-response transaction
    # This is defined in pykitcommander
    from pykitcommander.firmwareinterface import ProvisioningFirmwareDriver
    firmware_driver = ProvisioningFirmwareDriver(serial_connection)

    # Read out firmware version
    version = firmware_driver.firmware_command("MC+VERSION=FIRMWARE")

    # Send firmware command to turn LED on
    firmware_driver.firmware_command("MC+SETLED", ["conn","on"])

    # Send firmware command to read the ECC serial number
    ecc_serial_number = firmware_driver.firmware_command("MC+ECC+SERIAL")
    print("ECC serial number read out: '{}'".format(ecc_serial_number))

    # Send firmware command to turn LED off
    firmware_driver.firmware_command("MC+SETLED", ["conn","off"])

DIY example

This example shows how pykitcommander can be used to read the serial number from an ECC608 device. In this case, the firmware you use is your own, but complies to the same protocol as the standard provisioning firmware. The MCU is connected to the host computer via a virtual serial port provided by the on-board debugger. In this example the serial port and baud rate are also specified explicitly.

# Program firmware onto the kit
from pykitcommander.kitmanager import KitProgrammer

programmer = KitProgrammer()
programmer.program_application("my_firmware.hex")

# Create a serial connection to communicate with the firmware
# Note: SerialCDC class wraps pyserial Serial class
from pyedbglib.serialport.serialcdc import SerialCDC
with SerialCDC("COM3", 115200, timeout=10, stopbits=2) as serial_connection:
    # The firmware driver wraps this serial connection which enables a simple command-response transaction
    # This is defined in pykitcommander
    from pykitcommander.firmwareinterface import ProvisioningFirmwareDriver
    firmware_driver = ProvisioningFirmwareDriver(serial_connection)

    # Read out firmware version
    version = firmware_driver.firmware_command("MC+VERSION=FIRMWARE")

    # Send firmware command to turn LED on
    firmware_driver.firmware_command("MC+SETLED", ["conn","on"])

    # Send firmware command to read the ECC serial number
    ecc_serial_number = firmware_driver.firmware_command("MC+ECC+SERIAL")
    print("ECC serial number read out: '{}'".format(ecc_serial_number))

    # Send firmware command to turn LED off
    firmware_driver.firmware_command("MC+SETLED", ["conn","off"])

Logging

This package uses the Python logging module for publishing log messages to library users. A basic configuration can be used (see example below), but for best results a more thorough configuration is recommended in order to control the verbosity of output from dependencies in the stack which also use logging.

# pykitcommander uses the Python logging module
import logging
logging.basicConfig(format="%(levelname)s: %(message)s", level=logging.WARNING)

Notes for Linux® systems

This package uses pyedbglib and other libraries for USB transport and some udev rules are required. For details see the pyedbglib package: https://pypi.org/project/pyedbglib

Changelog

[2.8] - December 2023

Changed

  • DSG-6666 Updated AVR-IoT provisioning firmware, AVR-IoT Cellular Mini provisioning firmware, AVR-IoT Cellular Mini AWS demo and PIC-IoT Azure demo.

Added

  • DSG-5883 Added support for SAM-IoT Wx

Fixed

  • DSG-6133 PEP-0440 compliance for pykitcommander

[2.7] - October 2022

Changed

  • DSG-5451 Added metadata tag for Python 3.10
  • DSG-5549 Removed metadata tag for Python 3.6
  • DSG-5361 Updated firmware (v1.1.7) for AVR-IoT Cellular Mini provisioning
  • DSG-5624 Updated pyedbglib dependency requirement for improved serial port detection

Fixed

  • DSG-5017 Fixed error in example code

[2.6] - June 2022

Added

  • DSG-4393 Added link to github readme to github docs
  • DSG-4445 Added support for CryptoAuth Trust Platform Development Kit (DM320118) provisioning firmware
  • DSG-4496 Added support for AVR-IoT Cellular Mini (EV70N78A) provisioning firmware
  • DSG-4604 Add SAM-IOT demo firmware for Azure and Google

[2.3] - December 2021

Added

  • DSG-3304 Sphinx documentation
  • DSG-2152 New kit protocols (v2)
  • DSG-4086 Publication to GitHib + pypi

[1.0.5.8] - December 2020

  • First public release to PyPi

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

pykitcommander-2.8.3.18-py3-none-any.whl (1.6 MB view details)

Uploaded Python 3

File details

Details for the file pykitcommander-2.8.3.18-py3-none-any.whl.

File metadata

File hashes

Hashes for pykitcommander-2.8.3.18-py3-none-any.whl
Algorithm Hash digest
SHA256 e887ee01e7eabf50a42c176708c1ff26097dd4263da5dc6a70cf5e7f282bc773
MD5 ba1c40de2cc90c9df5d0aa7d15105b17
BLAKE2b-256 2811691c7c50dbb6aca92cd40ac92eb8175d3eeb41c8cdea7ca8ede7823edca8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page