The computer nobody looks at
An embedded system is a small computer sealed into a piece of equipment to do one job: a meter that takes readings, a controller that runs a production line, a box that watches a tank. There's no keyboard and nobody sitting in front of it. It boots on its own and has to keep going for years, often with less memory than one song on your phone takes up.
Firmware is the software living in there. It reads sensors, drives motors and relays, and keeps an eye on its own errors. Writing it feels nothing like writing an app, because every byte is a decision, and one more feature can cost you the room you needed to hold on to a reading. When the program hangs, there's nobody around to restart the machine, so how it recovers has to be in the code ahead of time. We love this work for exactly that reason. IoT, the Internet of Things, adds a network on top, so you can track, configure and update those devices from anywhere.
For that firmware, embedded C++ is what we'd propose first, and we have our reasons. It lets you decide exactly what sits in memory and when code runs, it's available on most microcontrollers, and it lets you build on the code you already have rather than start over. Rust comes in where it earns its place, such as a new network-facing component, as long as the chip supports it.
We're a French company, and we'll be straight about where we stop: what we write is software. Board design, power electronics, machine safety functions and certification are different trades with different responsibilities, and they need a separate scope and specialized partners. We'd rather tell you that in the first conversation than have us both find out halfway through the project.