RisalDash RisalDash

ESP32 · ESP8266 · Без железа

Собери весь дашборд до того, как приедет первый сенсор

RisalFake — header-only библиотека фейк-сенсоров для ESP32 и Arduino. Она подаёт в виджеты реалистичные «дрейфующие» показания — медленный тренд плюс колебание плюс немного шума, по суточному циклу, а не плоская синусоида — так что можно проектировать, отлаживать и показывать целый UI, ничего не подключая. Приедет настоящий сенсор — меняешь одну строку.

Посмотри вживую — на фейках

Теплица — RisalFakeEnv по суточному циклу
GPS-трекер — RisalFakeGPS на живой карте

Без железа и ожидания

Начинай UI сегодня — без макетки, пайки и доставки. Дашборд выглядит и ведёт себя вживую, пока ты правишь вёрстку и логику.

Реалистично, не random

Значения дрейфуют по виртуальному суточному циклу с мягким шумом — теплица прогревается к полудню, батарея проседает под нагрузкой — графики и шкалы выглядят как реальная сборка, а не дёрганая линия.

Zero-Waste и портируемо

Opt-in и header-only: ничего не компилируется, пока не подключишь; зависит только от Arduino.h + math.h. Один код собирается на ESP8266 и ESP32.

Целая среда в три строки

Фейк управляет теми же переменными, что и будущий реальный драйвер. Приедет BME280 — заменишь три env.*() чтения, остальной скетч не меняется.

#include <RisalUI.h>
#include <RisalFake.h>          // opt-in: nothing is compiled unless you include it

RisalUI dash("Greenhouse");
RisalFakeEnv env;               // a whole environment — no wires, no sensors
float temp, hum, pres;

void setup() {
  dash.gauge("Temp", &temp, 0, 50, "C");
  dash.metric("Humidity", &hum, "%");
  dash.chart("Pressure", &pres);
  dash.beginAP("RisalDash", "12345678");
  env.begin();
}

void loop() {
  dash.update();
  env.update();
  temp = env.temperature();     // when the BME280 arrives: bme.readTemperature();
  hum  = env.humidity();
  pres = env.pressure();
}

Готовые бандлы

Каждый класс заполняет тематический набор значений, которые вяжутся прямо к виджетам. Комбинируй их или бери обычный RisalFake под любую одну величину.

RisalFake one drifting value → any widget
RisalFakeEnv temp · humidity · pressure · soil · light
RisalFakeWeather wind · gust · direction · rain · UV
RisalFakePower V · A · W · kWh (household load)
RisalFakeAir PM1/2.5/10 · CO₂ · VOC · NOx
RisalFakeIMU pitch · roll · yaw · compass
RisalFakeWeight HX711 load cell, settles on items
RisalFakeBattery SoC · pack V · current · temp
RisalFakeFlow flow rate · total litres
RisalFakeHealth heart rate · SpO₂
RisalFakeGas smoke / CO alarm with trips
RisalFakeGPS a waypoint route → the map widget
RisalFakeBLE a fake nearby-device scan
RisalRecorder record a real trace, replay forever

Почему выглядит по-настоящему

Суточные профили

Показания идут по виртуальным часам (сутки ≈ 3 минуты): свет нарастает и спадает, температура отстаёт от солнца, воздух дрейфует. Не random — правдоподобный тренд.

GPX-плейбек GPS

RisalFakeGPS проходит маршрут по точкам с переменной скоростью, интерполируя между ними, и двигает живой map-виджет — метка едет без GPS-модуля.

Record & replay

Запиши реальный сигнал один раз через RisalRecorder и крути его вечно — воспроизведи точный след сенсора в демо или регресс-тесте.

У каждого пресета сенсора есть свой фейк.