SMFlow IconSMFlow
Hardware Agnostic Logic

Target Hardware

From $2 microcontrollers to DIN-rail industrial PLCs and Linux IPCs. Design your control logic independently of the exact target chip.

Microcontroller & Wireless

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
ARM Cortex-M Microcontroller

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
Industrial micro-PLC

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
Microcontroller

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
8-bit Microcontroller

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
8-bit Microcontroller

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
Wireless Node

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
Industrial PC / IPC

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
Virtual Runtime

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 parts

Temperature, humidity, pressure and air quality.

Bosch SensortecI²C

BME280 Temperature, Humidity & Pressure Sensor

Combined digital sensor for calibrated temperature, relative humidity, and barometric pressure.

  • ›environmental.bme280.read
Bosch SensortecI²C

BME680 Temp, Humidity, Pressure & Gas Sensor

Integrated 4-in-1 environmental sensor measuring temperature, humidity, pressure, and VOC gas resistance.

  • ›environmental.bme680.read
ScioSenseI²C

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
ScioSenseI²C

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
TE ConnectivityI²C

HTU21D Digital Relative Humidity & Temperature Sensor

Digital relative humidity and temperature sensor with fast response time and CRC8 checksum.

  • ›environmental.htu21d.read
TE ConnectivityI²C

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
NXP SemiconductorsI²C

PCT2075 1°C Temperature Sensor & Watchdog

1°C accurate digital temperature sensor and thermal watchdog with LM75 register compatibility.

  • ›environmental.pct2075.read
Silicon LabsI²C

Si7021 Temperature & Relative Humidity Sensor

Factory-calibrated digital relative humidity and temperature sensor with integrated heating element.

  • ›environmental.si7021.read

Motion

11 parts

Acceleration, rotation, magnetic heading and sensor fusion.

Analog DevicesI²C

ADXL345 3-Axis Accelerometer

Ultra-low power 3-axis accelerometer with 13-bit resolution measuring up to ±16g.

  • ›motion.adxl345.read
Bosch SensortecI²C

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
NXP SemiconductorsI²C

FXOS8700 6-Axis Accelerometer & Magnetometer

Integrated 6-axis linear accelerometer and magnetometer with 14-bit accelerometer and 16-bit magnetometer ADC.

  • ›motion.fxos8700.read
STMicroelectronicsI²C

LIS2MDL Ultra-Low-Power 3-Axis Magnetometer

Ultra-low-power 3-axis digital magnetic sensor with ±50 gauss dynamic range.

  • ›motion.lis2mdl.read
STMicroelectronicsI²C

LIS3MDL 3-Axis Magnetometer

Ultra-low-power, high-performance 3-axis magnetic sensor (±4 to ±16 gauss full scale).

  • ›motion.lis3mdl.read
STMicroelectronicsI²C

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
STMicroelectronicsI²C

LSM303AGR Ultra-Compact eCompass Module

Ultra-compact high-performance eCompass module combining 3D accelerometer and 3D magnetometer.

  • ›motion.lsm303agr.read
MEMSICI²C

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
InvenSenseI²C

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
InvenSenseI²C

MPU6500 6-Axis Gyroscope & Accelerometer

2nd generation 6-axis MotionTracking device with low power consumption and high-speed SPI/I2C.

  • ›motion.mpu6500.read
InfineonI²C

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 parts

Ambient light, colour, proximity, gesture and thermal imaging.

PanasonicI²C

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
BroadcomI²C

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
AMSI²C

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
AMSI²C

TSL2591 High Dynamic Range Light Sensor

High dynamic range (600,000,000:1) light sensor with dual broadband and infrared channels.

  • ›optical.tsl2591.read
VishayI²C

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 parts

External ADCs, thermocouples, load cells and touch panels — the parts that turn an analog measurement into a number the flow can trust.

Texas InstrumentsI²C

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
Maxim IntegratedSPI

MAX31855 Cold-Junction Thermocouple Converter

Precision thermocouple-to-digital converter with internal reference, cold-junction compensation, and open/short fault detection.

  • ›signal.max31855.read
Maxim IntegratedSPI

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
MaxBotixUART

MaxBotix MX785x Tank Sensor

Ultrasonic rangefinder distance sensor with analog and pulse width output.

  • ›maxbotix-mx785x-distance
NuvotonI²C

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
Texas InstrumentsI²C

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 parts

Bus voltage, load current and delivered power.

Texas InstrumentsI²C

INA219 High-Side Current & Power Sensor

Zero-drift, bi-directional current and power monitor with I2C interface and external shunt resistor.

  • ›ina219-read
Texas InstrumentsI²C

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 parts

Battery-backed wall-clock time that survives a power cycle.

Maxim IntegratedI²C

DS1307 64 x 8 Real-Time Clock

5V binary-coded decimal (BCD) clock/calendar with 56 bytes of battery-backed NV SRAM.

  • ›ds1307-read
NXP SemiconductorsI²C

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 parts

Local readouts on a panel or enclosure.

HitachiI²C

HD44780 Character LCD (I2C backpack)

Alphanumeric character LCD (16x2, 20x4) driven over an I2C PCF8574 backpack.

  • ›hd44780-text
Solomon SystechI²C

SSD1306 128x64 I2C OLED Display

128x64 monochrome graphic OLED display driven over I2C.

  • ›ssd1306-text

Communication

2 parts

Links to the world beyond the controller.

MicrochipSPI

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
SemtechSPI

Semtech SX1262 LoRa Transceiver

Sub-GHz long-range LoRa RF transceiver over SPI.

  • ›sx1262-rx
  • ›sx1262-tx

Storage

2 parts

External parts that hold a calibration, a setpoint or a totalizer across a power cycle.

FujitsuI²C

Fujitsu MB85RC256V 32KB I2C FRAM

256-Kbit (32KB) I2C ferroelectric RAM (FRAM) persistent store with unpaged bus-speed writes and unlimited endurance.

    MicrochipI²C

    Microchip 24LC256 32KB I2C EEPROM

    256-Kbit (32KB) I2C serial EEPROM with 64-byte page write and ACK polling.

      Network

      1 part

      Putting a controller on the wire.

      WIZnetSPI

      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.