Firmware is software that makes the hardware do what it is supposed to do that runs on the hardware itself.
The term is used somewhat ambiguously though.
Sometimes it is just the pure functionality, "if button is pressed, flip the lights on/off".
Sometimes it glues communication with the functionality, "if signal is received over some interface, flip the lights on/off".
Sometimes it has an operating system, "when power is on, initiate communications with hardware and interfaces and load software if it is present to interact with any of these".
Sometimes it is a package with both operating system and software, "when power is on, initiate communications with hardware and interfaces and load software that I know is present".
Firmware is software that makes the hardware do what it is supposed to do that runs on the hardware itself.
The term is used somewhat ambiguously though.
Thanks! Nicely explained!