Python: DevOps for Electrical Engineers
Many developers working close to the metal tend to stick to their knowledge of C/C++ to get things done even when not restricted by their platform, but there are much more powerful tools out there to handle some of the other tasks that come up.
One of the most versatile languages in this domain is Python. It can be viewed as the the go-to tool for what could be considered DevOps for Electrical Engineers. Here are a few ways Python can help with hardware development.
Device Interfacing
Serial interfaces ( like RS-232 and MODBUS), CAN buses, Ethernet and others are much easier to setup compared to writing something in native C/C++ for the specific operating system you are using. Network interfacing is also very straightforward to use if you need to open up a socket and talk to a device over a network, such as a SocketCAN interface or a networked power supply.
Programming Bench Tools
Programmable tools such as DMMs, O-Scopes, Function Generators, and others are simple to setup and run. There are already many libraries out there provided either by open-source projects or by the tool vendors to allow you to automate the data capture or device configurations allowing you to do some really neat things such as Automated Testing.
Automated Hardware Testing
It is much cheaper and faster to automate testing with Python than with expensive and inflexible systems like LabVIEW or ATEasy. With a simple serial interface to read and change data on the controller, programmable test equipment and a creative harness with feedbacks or another sensing device, the integrity of the hardware can be verified. Many production test system don’t need the in-depth verification levels that you can get with a LabVIEW setup. You can easily get 80–90% of the test coverage for about 5–10% of the cost. Of course, if you really need that extra 10%, then that extra cost may certainly be justified.
Software Testing and Simulation
If your code base is reasonably modular and decoupled from the hardware to the point you can build and run parts of it on on your computer, ctypes might be an option. Ctypes allows you to interact with compiled C code using Python. This opens up the possibilities of mocking your hardware, setting up automated unit tests, or modeling the system interfaces using higher level tools. While this setup has the potential to be quite powerful, it can become overly complicated to setup and maintain for smaller projects.
Embedded Data
Embedded data itself is also something that is often overlooked. It requires serious tools to parse and visualize data at millisecond resolution from hundreds or thousands of sources on a device. Some setups can easily rival the amount of data generated by “Big Data” companies/apps. Often times this data just gets dumped to a CSV file, Excel, or some other cryptic text format.
Don’t be scared to give SQL a try… Consider using a SQLite database to get started and see how powerful it can be to analyze and inspect your data. Some simple SELECT statements can pull out some very useful insights.
If you want to get really ambitious you can even send that data up to a Time Series Database (TSDB) for real time streaming and visualizations. There are tons of databases out there that can be a very useful tool in analyzing and visualizing large sets of static or real-time data.
Analytics
Libraries like SciPy, Numpy, and Pandas are very useful when you need to crunch large data sets to pull useful information out. You can look to the Big Data world for more details on this, but Python has certainly carved out its place in the world of data science.
Data Visualization
Matplotlib works great for quick static plots of moderate data and complements the analytics tools. There is also PyQtGraph which works great for high resolution or real-time plotting. Even implementing a time-series database with tools traditionally used by DevOps, such as Grafana, can be very useful for doing ad-hoc queries or setting up a monitoring system.
User Interface
Once you get all the hardware interfacing and data management under control you are gonna need a user interface so others can use the system as well. If you want to spin something up locally on the desktop you can check out PyQt or PySide to get started. Or if a web based setup is more important, look to Flask for something lightweight or Django if you really want to get serious.
Day to Day tasks
There are also plenty of other day to day uses for Python such as code generation, automating builds, and pulling data from Excel. Using a Python template library like Jinja makes automating code generation for repetitive or dynamically configured code sections very simple.
Most engineer’s tool of choice whether you like it or not is Excel, and Python makes it very easy to pull data in and out of these sheets. Not every engineer is going to be a programmer, so Excel becomes a very important part of some organization’s workflow.
Putting all of this together can give some very powerful potential when in the right hands! While there are plenty of other languages that can do some of these things faster, better, or possibly easier, I’d challenge someone to find a language that can do all of these things as well as Python.