Będąc (nie)młodym elektronikiem zawsze uważałem programowanie za upierdliwy acz niezbędny dodatek do swoich wspaniałych mikroprocesorowych projektów. Co gorsza aplikacje HMI obsługujące dostęp do tych systemów mikroprocesorowych to już zupełna domena programistów. Trwało to latami aż do momentu pojawienia się zdolnego młodego asystenta zakochanego wręcz w programowaniu ale który nie potrafi przylutować nawet prostego opornika. Czy uda się z sukcesem połączyć moje i jego zdolności? Dziś o tym jak AI może pomóc w tworzeniu projektów dla VIRTUINO
Oczywiście wstępną grafikę tego bloga też przygotował mój asystent. Ale do rzeczy
Na stronie https://virtuino.blogspot.com/2025/10/virtuino-iot-skryty-dowolne.html umieściłem przykład jak AI zaprogramował skrypt dla VIRUINO. Szybko i bezbłędnie i bez konieczności uczenia się całego tego JavaScript. Skrypty to naprawdę potężna broń by móc dowodnie kształtować działanie aplikacji i całego systemu mikroprocesorowego bez konieczności przeprogramowywania modułów. Trzeba tylko zmienić filozofię działania systemu (co już powoli się dzieje) by zwiększyć rolę aplikacji w jego funkcjonowaniu. Do tej pory VIRTUINO jako standardowy HMI służył do wizualizacji pracy systemu ewentualnie do zadawania jakiś wartości sterujących. Teraz jest szansa by aktywnie przejąło na siebie część zadań funkcjonalnych do tej pory realizowanych na poziomie mikrokontrolerów. "Zacieśnianie" współpracy między modułami już powoli ma miejsce ale z dużą nieśmiałością. Ciągle pracuję nad tym jak przekształcić system by realizacje funkcji wymagających wspólnych działań więcej niż jednego modułu koordynowane przez aplikację VIRTUINO nie rozsypały totalnie systemu w przypadku "padnięcia" aplikacji. Czyli jakie fragmenty sterowania systemu muszą na zawsze pozostać na poziomie mikrokontrolerów a co można przenieść poziom wyżej do VIRTUINO. Ale to jeszcze przede mną.
Na razie uczę się współpracy z nowym asystentem by maksymalnie wykorzystać jego możliwości w ewentualnym docelowy przekształceniu mojego systemu domowej automatyki.
Prawie dwa lata temu zapytałem AI o kod połączenia Virtuino z mikrokontrolerem za pomocą protokołu Websocket https://100-x-arduino.blogspot.com/2024/01/ai-sztuczna-inteligencja-czyli-o.html.
Wynik nie był powalający a AI mocno tłumaczył się ze swojej niewiedzy.
Obecnie powtórzyłem identyczne pytanie i wynik był zgoła inny
#include <WiFi.h>
#include <WebSocketsServer.h>
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// Virtuino IoT WebSocket – zalecany port 8000
WebSocketsServer webSocket = WebSocketsServer(8000);
// Przykładowe zmienne (Virtuino może ich używać)
float V0 = 0;
float V1 = 0;
int ledPin = 2; // GPIO2 – dioda LED
bool ledState = false;
// ---- Odbiór danych od Virtuino ----
void handleMessage(String msg, uint8_t clientID) {
Serial.println("Odebrano: " + msg);
// Format Virtuino IoT: VAR=VALUE
// Przykład: V0=1
if (msg.startsWith("V0=")) {
V0 = msg.substring(3).toFloat();
if (V0 == 1) {
ledState = true;
digitalWrite(ledPin, HIGH);
} else {
ledState = false;
digitalWrite(ledPin, LOW);
}
// potwierdzenie do Virtuino
webSocket.sendTXT(clientID, "V0=" + String(V0));
}
if (msg.startsWith("V1=")) {
V1 = msg.substring(3).toFloat();
webSocket.sendTXT(clientID, "V1=" + String(V1));
}
}
// ---- Obsługa WebSocket ----
void wsEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length) {
switch (type) {
case WStype_CONNECTED:
Serial.printf("Virtuino połączone: Client %u\n", num);
break;
case WStype_DISCONNECTED:
Serial.printf("Virtuino rozłączone: Client %u\n", num);
break;
case WStype_TEXT:
handleMessage(String((char*)payload), num);
break;
}
}
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
Serial.println("\nŁączenie z WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println("\nPołączono z WiFi!");
Serial.print("Adres ESP32-C3: ");
Serial.println(WiFi.localIP());
// Start WebSocket server
webSocket.begin();
webSocket.onEvent(wsEvent);
Serial.println("WebSocket server działa na porcie 8000");
}
void loop() {
webSocket.loop();
// przykładowe wysyłanie danych do Virtuino co 1 sekundę
static unsigned long lastSend = 0;
if (millis() - lastSend > 1000) {
lastSend = millis();
// V1 – przykładowa zmienna (np. odczyt czujnika)
V1 = analogRead(0);
webSocket.broadcastTXT("V1=" + String(V1));
}
}
I jakkolwiek kod jeszcze nie będzie działał z aplikacją to już wygląda całkiem nieźle. Trzeba tylko dopytać AI w temacie struktury danych jakie wymieniają między sobą moduł i aplikacja by uzyskać w miarę działający kod
Zabawne są te komentarze generowane przez AI ale wynik jest już całkiem Ok.
Wnioski
- AI ewidentnie przyspiesza pracę dla prostych przykładów - odciąża z mozolnego wpisywania kolejnych linii kodu i pozwala uniknąć typowych błędów nowicjusza jak brak średnika czy niedomknięty nawias
- dla bardziej złożonych funkcji konieczne jest uszczegółowianie pytań by naprowadzić go na oczekiwane rozwiązanie
- trzeba zmuszać go do maksymalnego upraszczania kodu bo ma tendencję do jego rozwlekania
- przy szybkich odpowiedziach nie wykorzystuje całej wiedzy ale odpowiada coś by zgadzało się mniej więcej z pytaniem a czasem konfabuluje
Ale tym niech się już martwi nasz ulubiony ciąg dalszy
Brak komentarzy:
Prześlij komentarz