Target Hardware
From $2 microcontrollers to DIN-rail industrial PLCs and Linux IPCs. Design your control logic independently of the exact target chip.
Espressif ESP32 / ESP32-S3
High-performance dual-core microcontrollers with integrated Wi-Fi, BLE, rich GPIO matrices, and hardware timers suited for distributed automation nodes.
Specifications
- › Tensilica / RISC-V Dual-Core
- › High-Speed GPIO & ADC/DAC
- › Hardware SPI / I²C / UART
- › Integrated BLE & Wireless Telemetry
STMicroelectronics STM32 (Black Pill F401)
Bare STM32 development boards compiled through the STM32 Arduino core, with one-click flashing over an ST-Link (SWD) probe or USB DFU — no bootloader sketch required. The ADC reads 0–3.3 V directly and the F401 has no DAC, so analog outputs are off the table on this part.
Specifications
- › STM32F401CC — ARM Cortex-M4 @ 84 MHz
- › 34 GPIO · PWM on 24 pins
- › 10 Analog Inputs — 12-bit ADC, 0–3.3 V
- › One-click flash over ST-Link (SWD) or USB DFU
Arduino Opta (STM32H747)
DIN-rail mounted industrial micro-PLC built on an STM32H747, featuring industrial relays, 24V digital/analog I/O, RS485 Modbus, Ethernet, and rugged power protection.
Specifications
- › STM32H747 Dual-Core
- › 8 Configurable 24V Inputs
- › 4 High-Current Relay Outputs
- › RS485 / Ethernet / USB-C
Raspberry Pi RP2040
Dual-core ARM Cortex-M0+ targeting cost-effective custom automation boards, peripheral co-processors, and low-latency motor control.
Specifications
- › Dual ARM Cortex-M0+ (133 MHz)
- › Deterministic Cycle Timing
- › Hardware I2C / SPI / UART
- › Native USB Serial & Mass Storage
Arduino Nano & Uno R3 / AVR (ATmega328P)
Ahead-of-time compilation down to the classic 8-bit AVR, on either the Nano or the Uno R3. The generated C++ uses no standard library and no dynamic allocation, so a control flow fits in 32 KB of flash and 2 KB of SRAM.
Specifications
- › ATmega328P @ 16 MHz
- › 14 Digital I/O, PWM on D3/5/6/9/10/11
- › Nano: 8 Analog Inputs — Uno R3: 6
- › Hardware SPI / I²C / UART & Watchdog
Arduino Mega 2560 / AVR (ATmega2560)
The same ahead-of-time path as the Nano, on a board with four times the RAM, eight times the flash, and far more pins — room for a wide I/O count, a character display, and four independent serial links on one controller.
Specifications
- › ATmega2560 @ 16 MHz, 8 KB SRAM / 256 KB Flash
- › 54 Digital I/O, PWM-capable on 15 Pins
- › 16 Analog Inputs, 10-bit ADC at 5 V
- › Modbus TCP Server over an Ethernet Shield
Heltec WiFi LoRa 32 (V3)
An ESP32-S3 board with an SX1262 radio, an OLED and a switched sensor rail already wired together. Picking this target binds all three to the pins the board uses, so a long-range telemetry node is a graph rather than seven pin declarations.
Specifications
- › ESP32-S3 + SX1262 Sub-GHz Radio
- › On-board 128x64 OLED
- › Vext Switch for Sensor Power
- › Target id: heltec-lora32-v3
Linux Native (x64 / ARM64)
Direct C++17 compilation for standard Linux IPCs, Raspberry Pi 4/5, Advantech, Beckhoff, and edge computing gateways.
Specifications
- › x86_64 and ARM64 Architectures
- › Realtime PREEMPT_RT Kernel Support
- › Socket / CAN Bus & Modbus TCP
- › Headless Systemd Daemon Execution
Desktop Simulator
Instant software-in-the-loop simulation running inside the SMFlow IDE. Test full state transitions and scan cycles without physical hardware attached.
Specifications
- › Cross-platform (Windows, Linux, macOS)
- › Step-by-step Scan Cycle Execution
- › Live Variable & Force Overrides
- › Zero Compile Delay
Peripheral Ecosystem
Supported Protocols & Interfaces
GPIO & Digital I/O
Per-pin internal pull-up / pull-down selection and high-frequency PWM outputs, bound to real board pins and validated against what the chosen chip supports.
Analog (ADC / DAC)
Sensor voltage scaling, raw calibration curves, moving-average filters, threshold comparators.
PWM & Tone Outputs
A pwm-output node takes a duty cycle from 0.0 to 1.0 on a PWM-capable pin — dimming, heaters, motor speed. A tone-output node drives a passive piezo, buzzer or speaker at a named frequency, claiming a hardware timer rather than a pin capability.
Modbus TCP Server
A controller answers a SCADA system, an HMI, or another PLC directly. A project declares a register map that binds shared variables to holding and input registers — function codes 3, 4, 6 and 16 — with the encoding and word order always declared rather than inferred. The server’s own health arrives back in the flow as read-only variables, so “the client went away, fall back to a safe state” is something the graph can express.
CAN Bus
A Microchip MCP2515 controller with an MCP2551-class transceiver, bound on any SPI-capable board. Bit timing is arithmetic done at build time from the crystal you declare and the bitrate you ask for, so an unreachable combination is a build error naming the rates you can have rather than a bus that silently never acknowledges. Frames per scan are budgeted like any other asynchronous device, and bus-off is reported back into the flow with the error counters — rejoining a bus is a control decision, not a driver’s.
Persistent Storage
A shared variable can be marked persistent and comes back after a power cycle, which is what a calibration coefficient, a commissioned setpoint, an hour meter or a totalizer needs. Commissioning values and running values live in separate regions, because flash and EEPROM endurance is finite and the two do not wear it at the same rate. Internal EEPROM, flash or NVS on the supported chips, a file on Linux, or an external 24LC256 EEPROM or MB85RC FRAM — and a write happens only when the flow asks for one.
I²C & SPI Buses
Hardware peripheral communication with OLEDs, accelerometers, temperature sensors, and external EEPROM.
UART & Serial
Custom protocol packet framing, telemetry streaming, RS232/RS485 Modbus RTU communication.
Timers & Clocks
On-delay (TON), off-delay (TOF), pulse timers (TP), and deterministic cyclic task schedulers.
Plug-in Peripheral Library
40 Supported Parts, Out of the Box
Specific parts ship as peripheral plug-ins, so a sensor is one node on the graph instead of a driver you write. Each plug-in compiles to ordinary C++ against the part’s real datasheet behavior — no runtime, no interpreter, nothing to install on the controller. Address, bus and calibration are settings on the binding, not code.
Environmental
8 partsTemperature, humidity, pressure and air quality.
BME280 Temperature, Humidity & Pressure Sensor
Combined digital sensor for calibrated temperature, relative humidity, and barometric pressure.
- ›environmental.bme280.read
BME680 Temp, Humidity, Pressure & Gas Sensor
Integrated 4-in-1 environmental sensor measuring temperature, humidity, pressure, and VOC gas resistance.
- ›environmental.bme680.read
CCS811 Ultra-Low Power Digital Gas Sensor
Digital gas sensor solution for monitoring indoor air quality (Total Volatile Organic Compounds and equivalent CO2).
- ›environmental.ccs811.read
ENS160 Digital Multi-Gas & Air Quality Sensor
Multi-gas sensor with 4 sensor elements computing AQI-UBA, TVOC, and equivalent CO2 (eCO2).
- ›environmental.ens160.read
HTU21D Digital Relative Humidity & Temperature Sensor
Digital relative humidity and temperature sensor with fast response time and CRC8 checksum.
- ›environmental.htu21d.read
MS5611 High-Resolution Barometric Pressure Sensor
High resolution barometric pressure sensor with 24-bit delta-sigma ADC and 10 cm altitude resolution.
- ›environmental.ms5611.read
PCT2075 1°C Temperature Sensor & Watchdog
1°C accurate digital temperature sensor and thermal watchdog with LM75 register compatibility.
- ›environmental.pct2075.read
Si7021 Temperature & Relative Humidity Sensor
Factory-calibrated digital relative humidity and temperature sensor with integrated heating element.
- ›environmental.si7021.read
Motion
11 partsAcceleration, rotation, magnetic heading and sensor fusion.
ADXL345 3-Axis Accelerometer
Ultra-low power 3-axis accelerometer with 13-bit resolution measuring up to ±16g.
- ›motion.adxl345.read
BNO055 9-DOF Intelligent Sensor Fusion IMU
9-axis absolute orientation sensor integrating accelerometer, gyroscope, magnetometer, and Cortex-M0 running sensor fusion.
- ›motion.bno055.read
FXOS8700 6-Axis Accelerometer & Magnetometer
Integrated 6-axis linear accelerometer and magnetometer with 14-bit accelerometer and 16-bit magnetometer ADC.
- ›motion.fxos8700.read
LIS2MDL Ultra-Low-Power 3-Axis Magnetometer
Ultra-low-power 3-axis digital magnetic sensor with ±50 gauss dynamic range.
- ›motion.lis2mdl.read
LIS3MDL 3-Axis Magnetometer
Ultra-low-power, high-performance 3-axis magnetic sensor (±4 to ±16 gauss full scale).
- ›motion.lis3mdl.read
LSM303 3D Accelerometer & 3D Magnetometer
System-in-package combining a 3D digital linear acceleration sensor and a 3D digital magnetic sensor.
- ›motion.lsm303.read
- ›motion.lsm303agr.read
LSM303AGR Ultra-Compact eCompass Module
Ultra-compact high-performance eCompass module combining 3D accelerometer and 3D magnetometer.
- ›motion.lsm303agr.read
MMC5603 3-Axis High-Accuracy Magnetometer
Monolithic 3-axis AMR magnetic sensor with 16-bit / 20-bit resolution and ±30 Gauss full scale.
- ›motion.mmc5603.read
MPU6050 6-Axis Gyroscope & Accelerometer
6-axis MotionTracking device combining a 3-axis gyroscope and a 3-axis accelerometer on a single silicon die.
- ›motion.mpu6050.read
MPU6500 6-Axis Gyroscope & Accelerometer
2nd generation 6-axis MotionTracking device with low power consumption and high-speed SPI/I2C.
- ›motion.mpu6500.read
TLV493D Low-Power 3D Magnetic Sensor
Low-power 3D Hall-effect magnetic field sensor measuring Bx, By, Bz and temperature.
- ›motion.tlv493d.read
Optical
5 partsAmbient light, colour, proximity, gesture and thermal imaging.
AMG8833 Grid-EYE 8x8 Infrared Array Sensor
8x8 (64 pixel) infrared thermopile array sensor for thermal imaging and two-dimensional temperature measurement.
- ›optical.amg8833.read
APDS9960 Digital Proximity, Gesture & RGB Sensor
Digital RGB, ambient light, proximity and gesture sensor with built-in IR LED and optical filtering.
- ›optical.apds9960.read
TCS34725 Color Light Sensor with IR Filter
Color light-to-digital converter with IR blocking filter for Red, Green, Blue, and Clear light sensing.
- ›optical.tcs34725.read
TSL2591 High Dynamic Range Light Sensor
High dynamic range (600,000,000:1) light sensor with dual broadband and infrared channels.
- ›optical.tsl2591.read
VEML7700 High-Accuracy Ambient Light Sensor
High accuracy ambient light digital 16-bit sensor measuring from 0 to 120,000 lux.
- ›optical.veml7700.read
Signal
6 partsExternal ADCs, thermocouples, load cells and touch panels — the parts that turn an analog measurement into a number the flow can trust.
ADS1115 16-Bit 4-Channel Precision ADC
Ultra-small, low-power, 16-bit precision ADC with internal programmable gain amplifier (PGA) and 4 input channels.
- ›signal.ads1115.read
MAX31855 Cold-Junction Thermocouple Converter
Precision thermocouple-to-digital converter with internal reference, cold-junction compensation, and open/short fault detection.
- ›signal.max31855.read
MAX6675 K-Type Thermocouple Digitizer
Cold-junction-compensated K-thermocouple-to-digital converter (0°C to +1024°C) with 12-bit SPI read-only output.
- ›signal.max6675.read
MaxBotix MX785x Tank Sensor
Ultrasonic rangefinder distance sensor with analog and pulse width output.
- ›maxbotix-mx785x-distance
NAU7802 24-Bit Dual-Channel Load Cell ADC
Precision 24-bit dual-channel sigma-delta ADC with programmable gain amplifier for bridge and weigh scale sensors.
- ›signal.nau7802.read
TSC2007 12-Bit Touch Screen Controller
4-wire resistive touch screen controller with 12-bit SAR ADC and auxiliary voltage/temperature inputs.
- ›signal.tsc2007.read
Power
2 partsBus voltage, load current and delivered power.
INA219 High-Side Current & Power Sensor
Zero-drift, bi-directional current and power monitor with I2C interface and external shunt resistor.
- ›ina219-read
INA260 Precision Current & Power Sensor (Internal Shunt)
Digital current, voltage, and power monitor with integrated precision 2 mΩ shunt resistor (up to 36V, 15A).
- ›ina260-read
Clock
2 partsBattery-backed wall-clock time that survives a power cycle.
DS1307 64 x 8 Real-Time Clock
5V binary-coded decimal (BCD) clock/calendar with 56 bytes of battery-backed NV SRAM.
- ›ds1307-read
PCF8523 Real-Time Clock & Calendar
Low-power real-time clock (RTC) and calendar with battery backup switchover and programmable alarm/timer.
- ›pcf8523-read
Display
2 partsLocal readouts on a panel or enclosure.
HD44780 Character LCD (I2C backpack)
Alphanumeric character LCD (16x2, 20x4) driven over an I2C PCF8574 backpack.
- ›hd44780-text
SSD1306 128x64 I2C OLED Display
128x64 monochrome graphic OLED display driven over I2C.
- ›ssd1306-text
Communication
2 partsLinks to the world beyond the controller.
Microchip MCP2515 CAN Controller
Standalone CAN 2.0B controller with SPI interface. Optional 'standby' pin connects to the MCP2551 transceiver's RS pin.
- ›can-rx
- ›can-status
- ›can-tx
Semtech SX1262 LoRa Transceiver
Sub-GHz long-range LoRa RF transceiver over SPI.
- ›sx1262-rx
- ›sx1262-tx
Storage
2 partsExternal parts that hold a calibration, a setpoint or a totalizer across a power cycle.
Fujitsu MB85RC256V 32KB I2C FRAM
256-Kbit (32KB) I2C ferroelectric RAM (FRAM) persistent store with unpaged bus-speed writes and unlimited endurance.
Microchip 24LC256 32KB I2C EEPROM
256-Kbit (32KB) I2C serial EEPROM with 64-byte page write and ACK polling.
Network
1 partPutting a controller on the wire.
WIZnet W5100 / W5500
The Ethernet shield that puts a controller on the network, and the transport under the Modbus TCP server. Addressing is static or DHCP; the lease is worked by SMFlow’s own client, stepped once per scan, so nothing in the scan ever waits on the network. Which part is fitted is declared, not guessed — the two are not register-compatible — and the running driver checks that declaration against what it finds.
- ›wiznet:w5100
- ›wiznet:w5500
Need a part that isn’t listed? Peripheral plug-ins are added regularly —request a peripheraland say what you’re building against.