Sots — ESP32 simulation

An interactive ESP32 circuit simulation you can run free in your browser on Velxio, by gameralord.

Components

Sketch code

/*********************************************************************
   ESP‑32 – Master (SSD1306 OLED)
   --------------------------------------
   • Читает координаты от шести child‑ов по адресам 0x10…0x15  
   • Отображает их на OLED:  S<id> : (<q>,<r>)
*********************************************************************/
#include <Wire.h>
#include <U8g2lib.h>

const uint8_t BASE_ADDR = 0x10;          // child‑ы используют BASE_ADDR + side
const int     MAX_CHILD = 6;

// -----------------------------------------------------------
// OLED – без аргументов (передаём nullptr, чтобы не было ошибки)
// -----------------------------------------------------------
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g(nullptr);   // rotation=nullptr

// -------------------- Хранение координат child‑ов -------------
int q[MAX_CHILD];
int r[MAX_CHILD];
bool known[MAX_CHILD];

// --------------------------------- Чтение одного child’а ----
bool readFromChild(int side, int &q_out, int &r_out)
{
    Wire.requestFrom(BASE_ADDR + side, 2);      // ждём два байта
    if (Wire.available() < 2) return false;   // ничего не пришло

    q_out = Wire.read();       // первый байт – q
    r_out = Wire.read();       // второй байт – r
    return true;
}

void setup()
{
    Serial.begin(115200);
    Wire.begin();                     // I²C‑master

    u8g.begin();
    u8g.setFont(u8g_font_ncenB08);   // любой встроенный шрифт

    for (int i = 0; i < MAX_CHILD; ++i) known[i] = false;
}

void loop()
{
    /* читаем координаты от всех child’ов */
    for (int i = 0; i < MAX_CHILD; ++i)
    {
        int q_val, r_val;
        if (readFromChild(i, q_val, r_val))
        {
            q[i] = q_val;
            r[i] = r_val;
            known[i] = true;
        }
        else
            known[i] = false;
    }

    /* отрисовка на OLED */
    u8g.clearBuffer();
    int line = 10;
    for (int i = 0; i < MAX_CHILD; ++i)
    {
        if (!known[i]) continue;

        char txt[32];
        sprintf(txt, "S%d : (%d,%d)", i, q[i], r[i]);
        u8g.setCursor(0, line);
        u8g.print(txt);
        line += 12;
    }

    if (line == 10)          // если ни один child не найден
    {
        u8g.setCursor(0, 20);
        u8g.print("NO CHILD");
    }

    u8g.sendBuffer();         // выводим в экран
    delay(200);                // ~5 гц обновления
}

More projects by gameralord