// CANVAS DEMO #include #define AP_SSID "Alex" #define AP_PASS "alexpass" #include GyverHub hub; gh::Pos pos2; // обработка кликов по холсту для loop void build(gh::Builder& b) { if (b.beginRow()) { // 0. ХОЛСТ // пустой холст без обработки кликов // будем обновлять в loop по имени b.Canvas_(F("cv0"), 300, 300); // 1. ХОЛСТ // холст с рисунком, без имени и обновлений gh::Canvas cv1; b.BeginCanvas(300, 300, &cv1); cv1.fill(0x00ff00); // жёлтый cv1.noStroke(); cv1.circle(150, 150, 50); // круг в центре b.EndCanvas(); b.endRow(); } if (b.beginRow()) { // 2. ХОЛСТ // холст с именем и рисунком и подключенным обработчиком кликов gh::Canvas cv2; b.BeginCanvas_(F("cv2"), 200, 200, &cv2, &pos2); cv2.stroke(0xff0000); cv2.strokeWeight(5); cv2.line(0, 0, -1, -1); // крест cv2.line(0, -1, -1, 0); b.EndCanvas(); // 3. ХОЛСТ // пустой холст с обработкой кликов в билдере gh::Pos pos3; b.Canvas_(F("cv3"), 300, 300, nullptr, &pos3); // был клик if (pos3.changed()) { Serial.print("Canvas cv3: "); Serial.print(pos3.x); Serial.print(','); Serial.println(pos3.y); // рисуем кружок gh::CanvasUpdate cv3("cv3", &hub); cv3.fill(0xff0000); cv3.circle(pos3.x, pos3.y, 10); cv3.send(); } b.endRow(); } } void setup() { Serial.begin(115200); #ifdef GH_ESP_BUILD WiFi.mode(WIFI_STA); WiFi.begin(AP_SSID, AP_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println(WiFi.localIP()); hub.mqtt.config("test.mosquitto.org", 1883); #endif hub.config(F("MyDevices"), F("ESP"), F("")); hub.onBuild(build); hub.begin(); } void loop() { hub.tick(); // 0. обновление холста cv0 по таймеру static gh::Timer tmr(500); if (tmr) { gh::CanvasUpdate cv0("cv0", &hub); cv0.noStroke(); cv0.fill(gh::Color(random(255), random(255), random(255)), random(100, 255)); cv0.circle(random(0, 300), random(0, 300), random(5, 30)); cv0.send(); } // 2. был клик по холсту cv2 if (pos2.changed()) { Serial.print("Canvas cv2: "); Serial.print(pos2.x); Serial.print(','); Serial.println(pos2.y); // рисуем кружок gh::CanvasUpdate cv2("cv2", &hub); cv2.circle(pos2.x, pos2.y, 10); cv2.send(); } }