This is my latest ‘sacrificial draft’ to generate a BoM csv file with Digikey prices based on schematic files I create in Kicad. Once I’m done with layout, creating a BoM from the components in the schematic is tedious and time consuming. So I jump on the already heavily populated bus of folks using Python to automating the workflow going from eeSchema to ordering parts.
I will refer to this effort as MakeDigikeyBOM.py to reflect I pretty much only shop for chips on Digikey and the tool is written in Python. Since I am fumbling about with Python for my own use and I stick to Digikey for my chip supplier, I have “hard coded” Digikey into the process. All of this could be expanded and be made more robust. Right now “it works good enough for me” and really is a sacrificial draft.
Thanks to Those That Went Before
I wanted to start with saying how very grateful I am to devbisme (xesscorp) for Kicost – Python that “build(s) cost spreadsheet for a Kicad project.” The GitHub location is here. There is a very good chance Kicost is all you need. It is certainly worth checking out if you use Kicad and want to automate BoM creation! I chose to evolve Kicost to MakeDigikeyBOM.py to enhance with two features I feel are important:
- The ability to not have to enter the part number within the schematic for jelly bean parts (capacitors, resistors,…)
- Viewing the 1, 10, 100, 1000 unit pricing of parts. This way I might order more parts even though I need less to lower the price per part.
The goal of this post is to provide an overview of my MakeDigikeyBOM.py effort. To do this, I will take a simple schematic created in Kicad:
I call this Kicad project myTestDigikeyBOMCreation.
… i.e.: a schematic that is just a bunch of components…
and run it through MakeDigikeyBOM.py to create a csv file that provides Digikey pricing info built by scraping the Digikey pages associated with the manufacturer part number:
The Block diagram gives us a picture of the workflow I have defined to go from components within eeSchema to a csv file with the pricing info from Digikey – as shown in the image above:
You create your schematic by adding components – these are within the left blue circle of the block diagram. Each component has a very important field, the PN field. This is a custom field added to the components. Kicad lets us add custom fields. The Kicad documentation at this point gives direction on how to add a custom field like PN.
There are two types of components:
- Jelly Bean
The capacitor is an example of a jelly bean component:
The Value field becomes important when using a jelly bean component. A Jelly Bean component is reconciled to a manufacturer part number using a Python script that matches the PN value (in this case ‘C”) and the Value in the value field (in this case .1u) to a row in a csv file that maps these two properties to a manufacturer’s part number.
Jelly Bean Part Numbers
I created a Google spreadsheet that I named JellyBeanPartNumbers. Here is an image of a few of it’s rows:
I export the rows (which includes the header row) to a file named JellyBeanPartNumbers.csv. This is the second blue circled area on the Block Diagram. This csv file is used as input into the MakeDigikeyBOM.py script.
The first step in the process of going from eeSchema to a BoM spreadsheet is running bom2csv. bom2csv is a plugin for eeSchema that (at least for me!) is included with the Kicad install. For more info on bom2csv, see the Kicad post discussing eeschema features. There is a youtube video “Bill Of Materials.”
bom2csv creates an XML and a csv file. We’ll be using the xml file as input into MakeDigikeyBOM.py. In this example, the Kicad project is named myTestDigikeyBOMCreation. The XML file that is created is named myTestDigikeyBOMCreation.xml.
We’re now ready to run MakeDigikeyBOM.py.
MakeDigikeyBOM.py is a bunch of Python Goo that takes in:
- the XML file created after running bom2csv.