%% fig-alt: "Comparison of Moore, Mealy, and Hierarchical State Machines in IoT systems"
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D'}}}%%
flowchart TB
subgraph Moore["Moore Machine"]
M1["State determines output"]
M2["Output changes only<br/>when state changes"]
M3["Simpler to design"]
end
subgraph Mealy["Mealy Machine"]
Y1["Output depends on<br/>state AND input"]
Y2["Output can change<br/>during transition"]
Y3["More responsive"]
end
subgraph HSM["Hierarchical State Machine"]
H1["States can contain<br/>sub-states"]
H2["Parent states share<br/>common behavior"]
H3["Reduces complexity"]
end
style Moore fill:#2C3E50,stroke:#16A085,stroke-width:2px,color:#fff
style Mealy fill:#16A085,stroke:#2C3E50,stroke-width:2px,color:#fff
style HSM fill:#E67E22,stroke:#2C3E50,stroke-width:2px,color:#fff
217 State Machine Fundamentals for IoT
217.1 Learning Objectives
By the end of this chapter, you will be able to:
- Define State Machines: Explain finite state machines (FSM) and their role in IoT device behavior
- Identify State Machine Types: Compare Moore, Mealy, and Hierarchical state machines
- Understand Core Concepts: Describe states, transitions, events, guards, and actions
- Recognize IoT Applications: Identify scenarios where state machines improve device reliability
A state machine is like a set of rules that tells a robot what to do next based on what just happened - like a choose-your-own-adventure book!
217.1.1 The Sensor Squad Adventure: The Traffic Light Challenge
Blinky the LED had a very important job - controlling the traffic light at the busiest intersection in Sensor City! But there was a problem. Blinky kept forgetting what color to show next.
“I know!” said Signal Sam. “You need a STATE MACHINE! It is like a rulebook that always tells you what to do next.”
Sam helped Blinky create simple rules:
- GREEN state: Let cars go for 30 seconds, then switch to YELLOW
- YELLOW state: Warn everyone for 5 seconds, then switch to RED
- RED state: Stop cars for 30 seconds, then switch to GREEN
Now Blinky never got confused! The state machine always knew: “I am in the GREEN state. When my timer ends, I go to YELLOW. No other choices!”
But then something exciting happened. A button was added for pedestrians! Now Blinky’s state machine got smarter:
- If in GREEN and button pressed: Remember the request, finish the timer, then go to YELLOW
- Add WALK state: After RED, show the walking person for 15 seconds
- Back to GREEN: After WALK ends, return to normal traffic
The Sensor Squad learned that state machines are perfect for anything that follows rules - traffic lights, door locks, washing machines, and even robots!
217.1.2 Key Words for Kids
| Word | What It Means |
|---|---|
| State | The current situation or mode something is in (like “sleeping” or “awake”) |
| Transition | Moving from one state to another (like waking up from sleep) |
| Event | Something that happens that might cause a change (like an alarm ringing) |
| Guard | A rule that must be true before you can change states (like “only wake up if alarm is set”) |
217.1.3 Try This at Home!
Design Your Own State Machine for Getting Ready for School!
- Draw circles for each STATE: SLEEPING, AWAKE, EATING, DRESSED, READY
- Draw arrows between states and label what EVENTS cause each change
- Add GUARDS (rules): “Can only go to DRESSED if clothes are clean”
- Follow your state machine tomorrow morning!
This is exactly how engineers program smart devices - they plan all the states and rules before writing any code!
What is a State Machine?
A state machine is a model that describes something that can only be in ONE state at a time, with clear rules for moving between states. Your phone is a perfect example:
- LOCKED state: Screen off, waiting for input
- UNLOCKING state: Checking fingerprint or PIN
- UNLOCKED state: Full access to apps
- LOW_BATTERY state: Limiting functions to save power
Why IoT Devices Need State Machines
IoT devices must handle many situations reliably:
| Without State Machine | With State Machine |
|---|---|
| Code becomes spaghetti with nested if/else | Clean, organized logic |
| Hard to add new features | Easy to add new states |
| Difficult to debug | Visual diagram shows all paths |
| Race conditions and bugs | Predictable behavior |
Key Terms
| Term | Definition |
|---|---|
| State | A distinct mode of operation (e.g., IDLE, ACTIVE, ERROR) |
| Transition | Movement from one state to another |
| Event | An input that may trigger a transition |
| Guard | A condition that must be true for a transition to occur |
| Action | Code that runs during a transition or while in a state |
| Hierarchical FSM | States containing sub-states for complex behaviors |
217.2 Prerequisites
Before diving into this chapter, you should be familiar with:
- Processes and Systems Fundamentals: Understanding system behavior and feedback loops provides context for how state machines model IoT device logic
- Microcontroller Programming Essentials: Basic C/C++ programming and GPIO handling are needed for the hands-on lab
- Sensor Fundamentals: Knowledge of sensors helps understand how real-world events trigger state transitions
217.3 Introduction to State Machines
State machines are one of the most powerful design patterns in embedded systems and IoT development. They provide a structured way to model complex device behavior that responds to events, handles errors gracefully, and maintains predictable operation even in challenging conditions.
217.3.1 Why State Machines Matter in IoT
IoT devices face unique challenges that make state machines essential:
- Constrained Resources: Limited memory means we cannot keep track of extensive history; states encapsulate “what matters now”
- Unreliable Networks: Devices must handle disconnection, reconnection, and partial failures gracefully
- Power Management: Sleep states, wake events, and power transitions are naturally modeled as states
- Safety-Critical Operations: Door locks, medical devices, and industrial controls require provably correct behavior
- Long-Running Operations: Devices may run for years; state machines prevent logic drift and memory leaks
217.3.2 Types of State Machines
| Type | Output Determined By | Best For | IoT Example |
|---|---|---|---|
| Moore Machine | Current state only | Simple, predictable devices | LED status indicator |
| Mealy Machine | State + current input | Responsive systems | Button debouncing |
| Hierarchical (HSM) | Nested state context | Complex behaviors | Smart thermostat |
217.3.3 A Simple IoT State Machine Example
Consider a smart door lock with these states:
%% fig-alt: State diagram for a smart door lock showing transitions between LOCKED, UNLOCKING, UNLOCKED, and ERROR states with guard conditions for PIN validation and timeout events
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#2C3E50', 'primaryTextColor': '#fff', 'primaryBorderColor': '#16A085', 'lineColor': '#16A085', 'secondaryColor': '#E67E22', 'tertiaryColor': '#7F8C8D'}}}%%
stateDiagram-v2
[*] --> LOCKED : Power on
LOCKED --> UNLOCKING : PIN entered
UNLOCKING --> UNLOCKED : PIN valid
UNLOCKING --> LOCKED : PIN invalid (attempts < 3)
UNLOCKING --> ERROR : 3 failed attempts
UNLOCKED --> LOCKED : Lock button / Timeout
ERROR --> LOCKED : Admin reset
note right of LOCKED : LED: Red solid
note right of UNLOCKING : LED: Yellow blink
note right of UNLOCKED : LED: Green solid
note right of ERROR : LED: Red fast blink
Key observations:
- Each state has a clear purpose and distinct behavior (LED output)
- Transitions have explicit triggers (events) and conditions (guards)
- Error handling is explicit, not hidden in exception handlers
- The diagram IS the documentation
217.4 Core State Machine Concepts
217.4.1 States
A state represents a distinct mode of operation where the device behaves consistently. Good states have:
- Clear identity: Named for what the device is doing (IDLE, SAMPLING, TRANSMITTING)
- Single responsibility: One primary behavior per state
- Observable output: External indication of current state (LED, message, behavior)
217.4.2 Transitions
Transitions are the arrows between states. Each transition specifies:
- Source state: Where the transition starts
- Target state: Where the transition ends
- Trigger event: What causes the transition (button press, timer, message)
- Guard condition: Optional boolean that must be true for transition to occur
- Action: Optional code to execute during the transition
217.4.3 Events
Events are inputs to the state machine that may cause transitions:
- External events: Button presses, sensor readings, network messages
- Internal events: Timer expirations, computation complete, error detection
- Synthetic events: Generated by the state machine itself for sequencing
217.4.4 Guard Conditions
Guards filter transitions based on runtime conditions:
transition: IDLE -> ACTIVE
trigger: start_button
guard: battery_level > 20%
action: log("Starting operation")
Without the guard, a low-battery device might start an operation it cannot complete.
217.4.5 Entry and Exit Actions
Actions that run automatically when entering or leaving a state:
- Entry action: Initialize resources, start timers, set outputs
- Exit action: Clean up resources, stop timers, save state
217.5 State Machine Anti-Patterns
State explosion: Too many states make the machine unmaintainable. Use hierarchical states instead.
Missing transitions: Every state should handle every possible event, even if just to ignore it.
Hidden state: Avoid storing state information outside the FSM context. All state should be explicit.
Transition side effects: Keep entry/exit actions simple. Complex logic should be in state handlers.
Blocking operations: Never block in state handlers. Use sub-states for long operations.
217.6 Summary
State machines provide a powerful framework for designing reliable IoT device behavior:
- States represent distinct modes of operation with clear behaviors
- Transitions define how the device moves between states based on events
- Guards add conditional logic to transitions
- Actions execute code during transitions or while in states
- Hierarchical states manage complexity through nesting
The visual nature of state machines makes them ideal for documentation, verification, and communication with team members.
217.7 Knowledge Check
What is the primary advantage of using a state machine over nested if/else statements for IoT device logic?
- State machines use less memory
- State machines are faster to execute
- State machines make behavior explicit and verifiable
- State machines require fewer lines of code
Click for answer
Answer: C) State machines make behavior explicit and verifiable
State machines create a clear, visual representation of all possible states and transitions. This makes it easier to verify correctness, add new features, and debug issues. The state diagram serves as documentation that cannot become out of sync with the code.
What is the purpose of a guard condition on a state transition?
- To make the transition faster
- To prevent the transition unless a condition is met
- To log the transition for debugging
- To specify the target state
Click for answer
Answer: B) To prevent the transition unless a condition is met
Guard conditions act as filters on transitions. Even if the triggering event occurs, the transition will only happen if the guard condition evaluates to true. This is useful for checking battery levels, sensor thresholds, or other runtime conditions.
Why are hierarchical (nested) state machines useful for IoT applications?
- They execute faster than flat state machines
- They reduce code duplication by sharing behavior in parent states
- They use less flash memory
- They are required for wireless communication
Click for answer
Answer: B) They reduce code duplication by sharing behavior in parent states
Hierarchical state machines allow common behavior to be defined once in a parent state and inherited by all child states. For example, an ACTIVE parent state might have MONITORING and RESPONDING sub-states that share the same timeout handling and error transition logic.
217.8 What’s Next
Now that you understand state machine fundamentals, continue with:
- State Machine Lab: ESP32 Implementation: Hands-on implementation with Wokwi simulation
- State Machine Design Patterns: Common patterns for connection, sampling, and safety
- Process Control and PID: Apply state machines to control systems