The Lean approach to Embedded Systems


My ‘TCP/IP Lean’ books are out of print, but I’m still using the same philosophy when designing embedded systems: trying to understand the fundamentals, so as to avoid the bloat that results from a simplistic building-block approach to hardware & software.

So I’m posting some projects taken from my experience working for the Iosoft consultancy, in the hope they will be of use – feel free to adapt and extend them for your own purposes, but please credit this blog as the origin of the material.

Raspberry Pi position detection using fiducial tags


Fiducial tags are little known outside the robotics world, but they provide a quick way of finding a known item using a low-cost camera system, such as the Raspberry Pi. Details and full source code are here.

Accurate position measurement using low-cost cameras and OpenCV


OpenCV is a very powerful image-processing package, and in this post I’ve used it to measure the position of an object in 2 dimensions, with 2 low-cost webcams a right-angles. The technique has remarkably high resolution, when compared with other optical methods. Read more here.

PC / Rpi camera display using PyQt and OpenCV


A PyQt and OpenCV application for Windows or Linux that can act as a basis for experimentation with image processing: you just need a PC with a USB camera, or a Raspberry Pi with the standard camera. See this post for a description and full source code.

Python Websocket programming


To create a dynamic real-time display on a browser, you need a method of ‘pushing’ display data from the server to the browser. For a simple example of WebSocket programming in Python, see this post.

3D design with Python and FreeCAD


3D CAD packages can be hard work; there is a lot to learn, which can be a major problem for an infrequent user such as myself. FreeCAD is free, and supports Python scripting, so is it possible to create a design from scratch in Python? Click here to learn more.

Simple PyQt serial terminal


This is an example of PyQt programming with threading, that I’ve tried to make universal; it runs on Windows or Linux, with Python 2.7 or 3.x, and PyQt v4 or v5.

If you need a serial application you can customise, or a simple example of Python threading in action, take a look here.

Programming PSoC: an ARM CPU with programmable hardware

PSoC development kit

Want to craft your own high-speed CPU peripheral? Experiment with programmable hardware, but are deterred by the complexity and cost? Take a look at my blog post.

Creating real-time Web graphics with Python

Web vector graphics (SVG) are very useful for displaying real-time information in a browser, for example annotating a circuit diagram with real-world values. As a first step, I’m demonstrating how an SVG real-time clock display can be created using Python, with animation in Javascript. See my post here.

Viewing ARM CPU activity in real time


I’ve created a short video of my ‘reporta’ project, demonstrating a real-time graphical display of I/O port activity. The code is pure Python; it accesses the CPU internals via the SWD interface, so its operation is completely transparent to the target CPU.

See this post for a detailed description; the source files are on GitHub

If you need a more powerful debug system, take a look at my post OpenOCD on the Raspberry Pi.

Programming FTDI devices in Python

FTDI modules

FTDI chips are frequently used as USB-to-serial adaptors, but the newer devices have the ability to drive more complex protocols such as SPI and I2C.

I like to use Python when first experimenting with new PC hardware, and there are some Python libraries for interfacing to FTDI chips, but I couldn’t find any real projects or complete worked examples.

The following posts demonstrate a step-by-step approach to driving the FTDI chips from Python, to learn about their functionality. In the final part, I implement a pure-Python SWD interface that can access the internals of a CPU while it is running, in a similar way to much more sophisticated debug tools, such as OpenOCD.

Part 1: Initial experimentation

Part 2: Using Linux

Part 3: Using MPSSE to drive an SPI device

Part 4: First steps towards accessing an ARM CPU using SWD

Part 5: Reading CPU internals with SWD

Copyright (c) Jeremy P Bentham 2018. Please credit this blog if you use the information or software in it.