Programming as a Second Career - Embedded Systems and the Internet of Things
The Internet of Things (IoT) is receiving a lot of attention these days. What are these "things"? The answer is that they can come in a very wide variety of shapes and sizes and applications. For instance a Freezer with an inbuilt camera and connection to the Internet e.g. via a WiFi link can be an IoT thing. A temperature sensor in a room that can connect via a wireless protocol such as Bluetooth or WiFi can also be an IoT thing and the temperature it is reading can be accessed via a web browser or a smart phone application for example. These devices are all examples of embedded systems. Embedded systems have been around for a long time and include things such as factory automation systems, robot control systems, satellite navigation systems, and also modern digital radio and television systems. In the training and consulting company that I run I quite often have to run courses for electrical or electronics engineers who need to learn embedded systems programming because of the presence of various embedded systems components in the equipment they are maintaining or modifying. Such people have degrees and are acquiring new skills essential for the job they have to do. Examples of embedded systems you may have already come across include the Arduino , the BBC Microbit and the RaspberryPi . Another widely used alternative to the RaspberryPi is the BeagleBone Black. Should you call in at the Internet Technical Bookshop you will find a wide selection of these and related devices and associated kits and components. A good way of finding out whether embedded systems programming might be for you is to purchase e.g. a RaspberryPi or a BBC Microbit and start experimenting and trying to build various projects and devices, including IoT "things". I occasionally run courses at my local college Carshalton College for students on various courses, lecturers and local science and computing teachers who need to get more familiar and confident in teaching using such systems. Recently I ran a course over two weeks at Port Talbot College for lecturers and technical staff covering basic and more advanced aspects of working with the RaspberryPi and how best to make use of it in teaching on various technical courses run by the college. The RaspberryPi, typically, runs Linux as the operating system it uses. Linux is a very powerful and quite complex piece of software and not "something that might easily be picked up from a book".
Developing a career in Embedded Systems and the Internet of Things programming involves a steep learning curve. It is relatively easy to build a few BBC Microbit, Arduino or RaspberryPi projects, but this is a long way from real world embedded systems applications. The learning path might be long and arduous but there are many interesting and well paid jobs employing embedded systems programmers. By way of illustration I have been working on putting together a series of distance learning course modules that, studied carefully should provide professional level skills. Below I will show you the kinds of modules (things that you would need to learn) to start on the journey of becoming an Embedded Systems and Internet of Things programmer. I have developed two courses. One is for small embedded systems running microcontrollers such as those found on the Arduino (Atmel 8 bit AVRs) and on the BBC Microbit (ARM Cortex M0 - which is a 32 bit microcontroller). 8 bit microcontrollers use 8 bits to store individual pieces of data, and 32 bit microcontrollers use 32 bits as the unit of data storage. The other is for embedded Linux systems, which typically run 32 bit ARM microcontrollers. The early RaspberryPi-s had 32 bit processors, but the latest RaspberryPi (RaspberryPi 3) has a processor with 4 64 bit processor cores and is a "very powerful beast indeed". Become proficient in developing applications for such systems requires not only a good understanding of Linux and the various tools and utilities that come with it, but, also acquiring a sound knowledge of C programming. For certain applications a knowledge of C++ programming is also required. For instance, developing graphical user interfaces (GUIs) using the Qt widget system and GUI programming framework requires mastery of C++. Although video based distance learning is all well and good, I am a strong believer in the use of printed materials. The kind of distance learning module I am working towards is less of a MOOC (Massive Open Online Courses) approach and more of a human tutor approach with marked assignments. In MOOC courses such as those run by Coursera the non multiple-choice assignment are marked by students and then moderated by the course lecturers. There are some vert good MOOC courses covering various aspects of embedded systems and IoT application development, and I will try and sribe a scribend about some of the ones that I have worked through, both to test my own knowledge, and to "fill in" gaps in my knowledge. The various modules that I will be listing below can be considered as "work in progress". If you have any helpful comments or observations I would love to hear from you. I and my colleagues have been teaching embedded systems and embedded Linux courses for over 20 years now and know that there are points in the learning process where "tough hurdles" need to be overcome. In order to help with such issues I suggest paying for face to face tutoring on an "as needed" basis.
So, without more ado here are my initial attempts at putting together a fairly comprehensive set of course modules for aspiring embedded systems and IoT programmers, and what I think are fair prices for such courses. The real cost is tutor time, even if submissions are submitted via email. A good tutor based on submitted work can offer tailored exercises and examples to explore areas that are causing difficulties, or, are of particular interest to an individual student.
These courses are run on the traditional printed course materials with tutor support model. Tutor support is mainly via email which is used for submitting course work and for asking questions. Telephone support is also available where required and can be supplemented by extra one on one tutoring if required.
Introduction to Professional Embedded Systems Distance Learning Course.
This course introduces the major elements of embedded systems programming. We would recommend beginning with courses built around the use of 8/16 bit microcontrollers as these have relatively simple architectures and instruction sets that can be used to learn the key principles and techniques involved. However, for those who wish to base their training around 32 microcontrollers then these courses can be tailored around either the Microchip PIC32 or ARM Cortex M microcontrollers. There are several variants of this course depending on the Microcontroller family you wish to go with. These modules are based on instructor led training courses FTT has been running for the last 10 to 20 years. The choices are
- Atmel AVR microcontrollers - which are the microcontrollers used in Arduino devices
- Microchip PIC16 and PIC18 microcontrollers - which are very widely used 8 bit microcontrollers
- Microchip PIC24 microcontrollers
- Texas Instruments - MSP430
- Silabs 8051 microcontrollers
- Atmel ARM Cortex M0/M3 microcontrollers
- Microchip PIC32 microcontrollers
The course need not be taken all in one go, and the ordering of the modules is one of various possible orderings. The various modules of this course will cover assembly language programming and C programming, microcontroller interfacing, and microcontroller multi-tasking. The course consists of 9 modules each requiring approximately 40 hours of study time. The course uses printed materials backed up by tutor support via email and telephone. About half the time on each module will be taken up with practical programming based exercises and labs. Assignments are submitted to your distance learning course tutor. Assignments and lab write ups will be assessed and marked as they are completed. Successfully completing all the labs and assignments will be rewarded with a module completion certificate. Successfully completing all the modules will be rewarded with a module completion certificate. If needed face to face tutoring can be provided at extra cost.
- Module 1. Microcontrollers - architecture, instruction sets and assembly language programming. £350.00
- Module 2. Foundations of C programming for embedded systems developers. £350.00
- Module 3. Software engineering for embedded systems developers. £350.00
- Module 4. Advanced C programming techniques for embedded systems developers £450.00
- Module 5. State Machines, Multi-tasking and real-time programming for embedded systems developers £450.00
- Module 6. Serial buses and serial bus programming - a more advanced look at CAN, USB, I2C and SPI. £450.00
- Module 7. User interaction programming - input devices from key pads to touch pads and from dot matrix and LED segment displays to LCD displays £450.00
- Module 8. Embedded TCP/IP ethernet, WiFi, Bluetooth and Zigbee programming. £500.00
- Module 9. Advanced programming skills - version control using GIT and SVN, debugging, Unit Testing, and code optimisation. £500.00
The course modules do not include the cost of hardware and components. These can be supplied at cost if required. One to one tutoring/mentoring sessions connected with the non advanced modules held at our offices in Carshalton will be charged at £60.00 per hour plus VAT. Blocks of 10 hours of tutoring/mentoring held at our offices can be purchased in advance at £500.00 plus VAT, a cost effective solution for e.g. two 5 hour days of tutoring/mentoring.
Advanced follow on modules include
- Module 10 FreeRTOS programming £450.00 (on PIC32 or ARM Cortex M3 microcontrollers only)
- Module 11 Advanced programming on dual core ARM Cortex M0 + ARM Cortex M4 processor architectures. £500.00 plus VAT.
- Module 12 USB device programming and USB application development £450.00 plus VAT.
- Module 13 SD/MMC, Flash Memory, SPI RAM and EEPROM programming £450.00 plus VAT.
- Module 14 Introduction to DSP programming using the Microchip dsPIC £450.00 plus VAT.
- Module 15 Introduction to DSP programming using the Microchip dsPIC £450.00 plus VAT.
- Module 16 Introduction to DSP programming using the ARM Cortex M4 £450.00 plus VAT.
- Module 16 Introduction to DSP programming using the TI C55xx £450.00 plus VAT.
Embedded Linux Systems Software Developer Training Distance Learning Course
Embedded Linux is very widely used in all kinds of embedded systems from security and communications systems, robot control systems, manufacturing control systems , home automation systems to name but a few. There is much more to embedded systems programming than simply writing a few Python scripts to control a few buttons or LEDs on a RaspberryPi. Becoming a competent embedded linux system programmer and engineer requires not only mastering many of the Linux subjects as they apply to working with regular Linux systems, but, also, being able to implement specialised server and client systems, complex user interfaces. In addition it is, these days, necessary to be able to tailor Linux builds to the target device and application being developed and also, at times, to implement Kernel device driver modules for controlling and interacting with specific devices.
This course covers the use of linux tools and utilities, shell programming, C programming and C Posix API programming, C++ programming and C# programming. In addition it covers graphics application development using Qt, X Windows/Wayland, kernel module programming. Multitasking and multithreading are covered in the Posix API programming module. There are two variants of this course, one based on the RaspberryPi and the other based on the Beagle Bone Black. The course can be tailored to other boards running embedded Linux.
- Module 1. Linux tools and utilities and Shell programming £350.00 plus VAT.
- Module 2. Foundations of C programming for Linux application developers £350.00 plus VAT.
- Module 3. Advanced Linux C programming £450.00 plus VAT.
- Module 4. Foundations of Linux systems programming using the Linux POSIX API (Application Programming Interface). £450.00 plus VAT.
- Module 5. Linux TCP/IP networking and Linux Sockets programming £450.00 plus VAT.
- Module 6. Introduction to C++11 programming for Linux application developers £350.00 plus VAT.
- Module 7. Advanced C++11 programming for Linux application developers £400.00 plus VAT.
- Module 8. Software engineering, UML and SysML for embedded and real time Linux application developers £350.00 plus VAT.
- Module 9. Introduction to C# Programming on Linux £350.00 plus VAT.
- iModule 10. Python programming on Linux £350.00 plus VAT.
- Module 11. Real time Linux programming and Xenomai. £600.00 plus VAT.
- Module 12. Wireless application development on embedded Linux systems - WiFi, Bluetooth, Zigbee, LoRA £500.00 plus VAT.
- Module 13. Internet of Things and 6lowPAN programming for embedded Linux system developers. £500.00 plus VAT.
- Module 14. Linux systems configuration using Bitbake and Yocto £500.00 plus VAT.
- Module 15. gstreamer Linux programming £500.00 plus VAT.
- Module 16. Linux C++ Qt programming £450.00 plus VAT.
- Module 17. Linux Python PyQt programming £450.00 plus VAT.