ESP32 Projects

Abate: Which sort of ESP32 projects could an engineer or maker tackle after reading through your book?
 
Gay:
I believe that most projects beyond the simple blink program are suitable candidates. Even if you only use the default Arduino loop() function (which is the loopTask task), you may need to communicate an event from an ISR to that task using a FreeRTOS function. Most other projects would also be broken down into separate tasks. The ESP32 is already using FreeRTOS to carry out Wi-Fi, Bluetooth, and TCP/IP services etc., so why not exploit the services that are already present?
 
A couple of creative projects that have intrigued me are those using OpenCV to recognize their  family cat. In one project, the unit keeps non-resident cats from entering the cat door. Another project turns the sprinklers on when a non-resident cat is spotted in their garden, but OpenCV is probably best left as an advanced project.
 
Projects using rotary encoders, debouncing push buttons, networking or serial/MIDI data are just a few that could benefit from FreeRTOS services. Rotary encoders can support the flywheel effect, which is most easily managed by a task. The flywheel effect allows the end user to zoom past several selection points with a fast turn of the knob. It really bugs me when consumer products force you to keep turning the knob because they don’t support this concept.

Embedded programming tips

Abate: Do you have any advice for up-and-coming software developers? Perhaps you recommend they take some hardware or embedded systems courses? Or maybe you think it is important to learn a specific programming language?
 
Gay:
I believe that the best learning is the kind that you get on your own. Universities try to prepare students for what they’re going to need, but it is a daunting, almost impossible job with the time that they have. It is impossible, for example, for a student to become an expert in C++ with a one- or two-semester course, so expect that most of the learning will occur on the job.
 
I have worked at several jobs where the software maintenance could be called boring (I’ve read that this also frequently happens in rookie engineering jobs). The problem is that you don’t always get the kind of assignments that motivate. But you must still provide value for your employer and put food on the table. So, what to do?
 
I believe that the solution is to develop projects on your own time. This permits you to explore what you really wanted to learn. Build/write projects and document them so that you have something to demonstrate. Write, perfect, and repeat. Everyone can run Linux at home these days, even under Windows! Embedded devices have never been cheaper or easier to use. Your own projects will sharpen your skills and leave you with something to demonstrate if you want to change employment or sell your services.
 
Invest in yourself – I am a big believer in books. The most important skill that you can have is to learn to teach yourself. The knowledge found in carefully prepared books will empower your learning. The internet is a great resource, but the quality of knowledge is far better from a book that has been carefully reviewed by multiple people. Buy used books that would otherwise cost an arm and a leg.
 
For computer languages, I recommend focusing on compiled languages like C++. Performance still matters and likely will for quite some time (especially for embedded). Correctness is increasingly important as the industry fights bugs and exploits. And C++ is slowly gaining acceptance in the embedded industry as vendor tool chains mature and the advantages of the language are appreciated. Rust might also be worth keeping an eye on.
 
Abate: Working on any new books, products, or special embedded technology-related projects?
 
Gay:
I am decompressing after having been writing for the last few years. I am looking forward to just tinkering for the fun of it. I’m largely driven by curiosity, so I plan to investigate some recently purchased ATmega32u4 units. My interest in them is that they include a USB peripheral. The Arduino framework already provides software support for keyboard, mouse, and serial comms over USB, but I want to do more than that. Their framework includes a PlugableUSB library that I want to leverage, but it isn’t well documented.
 
My interest also includes FPGA devices. As prices come down, and as open-source tools become available, it calls out to me. But this might mean spending more time in front of a monitor and a keyboard, which I sometimes feel is excessive already. That’s when I start to think that it’s time to return to the analog world and build an HF receiver for the ham bands instead. The great thing about hobbies is that you can choose what you want to do today, without having to justify it.