sobota, 20 stycznia 2024

AI Sztuczna inteligencja - czyli o początku końca świata programistów

 

Mile zaskoczony nowym procesorem od Espressif  tj.ESP32 C3 i jego  implementacjami w ciekawe moduły dla IoT postanowiłem poprogramować go sobie trochę. Poczta dostarczyła właśnie świeżą partię  modułów ESP32 C3 Super Mini, jest więc okazja do ich przetestowania. Stary dobry ESP8266 znam już na pamięć. Nowy ESP ma  swoją specyfikę, którą trzeba poznać by kompilator Arduino IDE nie pluł czerwonymi komunikatami o błędach. W tym celu należałoby prześledzić kilka internetowych przykładów. Ale, że lenistwo to piękna męska cecha mocno wspierająca postęp technologiczny ludzkości, postanowiłem  zwalić tę robotę na sztuczną inteligencję.

Dziś mały odprysk możliwości AI w obszarze mocno związanym z tym blogiem - w dziedzinie programowania.


Koniec końców przyszedł czas by przyjrzeć się bliżej tematowi, który już dziś rozpala niektóre ludzkie umysły do czerwoności - na AI czyli sztuczną inteligencję. AI udostępniona jest od jakiegoś czasu wszystkim za darmo lub za niewielkie miesięczne opłaty - tylko 20 dolarów. To, że jest to kolejna technologiczna rewolucja naszych czasów po Internecie i komórkach nikt już chyba nie ma wątpliwości. Pytanie brzmi - jak bardzo zmieni się nasz świat, który znamy i na ile my odnajdziemy się w tym nowym świecie. 

Na początek sprawdziłem jak AI radzi sobie z prostymi zadaniami z zakresu programowania. Oto cztery przykłady kodów wygenerowanych w ChatGPT 3.5  Oprócz samego kodu AI dodaje jeszcze  opis w raz niezbędnymi działaniami by ten kod mógł realizować żądaną funkcję. Nie powiem jestem pod wrażeniem. Są to proste przykłady więc niby nie ma się czym podniecać.  Ale samo ich napisanie lub tylko wyszukanie w Internecie i skopiowania zajęłoby dobrych kilkanaście minut. AI wygenerował to w kilkanaście sekund.  W trzecim przykładzie zapomniał dodać jednej biblioteki by kod skompilował się bez błędów. Czwarty przykład z VIRTUINO dobrałem trochę złośliwie myśląc, że AI się wysypie. Ale i tam sobie jakoś poradził biorąc pod uwagę jak bardzo zwięzłe i mocno ogólne było moje zapytanie.

Zadanie nr 1

Wygeneruj kod Arduino IDE dla ESP32 C3 który przesyła dane z łącza szeregowego RS do odbiorcy WiFi

#include <WiFi.h>
#include <WiFiClient.h>

// Parametry WiFi
const char* ssid     = "Twoje_SSID";
const char* password = "Twoje_Haslo";

// Serwer TCP
WiFiServer wifiServer(80);

void setup() {
  Serial.begin(115200); // Inicjalizacja Serial dla debugowania
  Serial1.begin(9600, SERIAL_8N1, RXD_PIN, TXD_PIN); // Inicjalizacja Serial1 dla RS-232 (ustaw odpowiednie piny)

  // Połączenie z WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Łączenie z WiFi...");
  }
  Serial.println("Połączono z WiFi");

  wifiServer.begin(); // Start serwera TCP
}

void loop() {
  WiFiClient client = wifiServer.available(); // Sprawdź czy klient jest dostępny

  if (client) {
    Serial.println("Nowy klient");
    // Pętla obsługująca klienta
    while (client.connected()) {
      if (Serial1.available()) {
        // Przeczytaj z RS-232 i wyślij do klienta TCP
        char c = Serial1.read();
        client.write(c);
      }

      if (client.available()) {
        // Przeczytaj od klienta TCP i wyślij do RS-232
        char c = client.read();
        Serial1.write(c);
      }
    }

    client.stop(); // Zakończ połączenie z klientem
    Serial.println("Klient rozłączony");
  }
}

Wyjaśnienie kodu


Inicjalizacja i Połączenie WiFi: Kod rozpoczyna się od połączenia z siecią WiFi.

Uruchomienie Serwera TCP: Następnie uruchamiany jest serwer TCP na porcie 80.

Komunikacja Szeregowa RS-232: Serial1 jest używany do komunikacji szeregowej RS-232. Musisz określić piny RX i TX odpowiednie dla twojego ESP32-C3.

Przesyłanie danych: Kod odczytuje dane z RS-232 i przesyła je do klienta TCP, a także odczytuje dane od klienta TCP i przesyła je do RS-232.


Warto zauważyć:

Musisz zastąpić Twoje_SSID i Twoje_Haslo odpowiednimi danymi dostępu do sieci WiFi.

Piny RX i TX muszą zostać skonfigurowane zgodnie z twoim połączeniem RS-232 na ESP32-C3.

Port TCP (w tym przypadku 80) można zmienić według potrzeb.

Ten kod jest podstawowym przykładem i może wymagać dostosowania do konkretnego zastosowania, w tym obsługi błędów, konfiguracji parametrów połączenia RS-232, oraz bezpieczeństwa sieciowego.

----------------

Zadanie nr 2

Kod programu w Arduino IDE dla ESP32 C3 do odczytu temperatury i wilgotności z czujnika DHT22

Aby odczytać temperaturę i wilgotność z czujnika DHT22 za pomocą płytki ESP32-C3 w Arduino IDE, będziesz musiał użyć biblioteki DHT. Należy pamiętać, że nie wszystkie biblioteki są w pełni kompatybilne z ESP32-C3, ale jeśli używasz najnowszej wersji Arduino IDE i bibliotek, powinno działać dobrze.

Oto kod przykładowy:

Otwórz Arduino IDE.

Zainstaluj bibliotekę do obsługi czujnika DHT22. Przejdź do "Sketch" -> "Include Library" -> "Manage Libraries...". Wyszukaj "DHT" i zainstaluj bibliotekę "DHT sensor library" od Adafruit.

Po instalacji biblioteki, skorzystaj z poniższego kodu jako szablonu:

#include <DHT.h> #define DHTPIN 2 // Definiuj pin, do którego jest podłączony czujnik DHT22 #define DHTTYPE DHT22 // Określ typ czujnika DHT (DHT22 lub DHT11) DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); Serial.println("DHT22 test!"); dht.begin(); } void loop() { delay(2000); // Poczekaj 2 sekundy między odczytami float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); // Sprawdź, czy odczyt z czujnika był udany if (isnan(humidity) || isnan(temperature)) { Serial.println("Błąd odczytu z czujnika DHT!"); return; } Serial.print("Wilgotność: "); Serial.print(humidity); Serial.print("%\tTemperatura: "); Serial.println(temperature); }

Wczytaj powyższy kod do swojego projektu w Arduino IDE, wybierając odpowiednią płytę (ESP32-C3) i port w menu "Tools".

Uruchom monitor szeregowy (Serial Monitor) za pomocą przycisku w prawym górnym rogu Arduino IDE, aby zobaczyć odczyty wilgotności i temperatury.

Upewnij się, że poprawnie podłączyłeś czujnik DHT22 do płytki ESP32-C3 i używasz poprawnego pinu w kodzie (w przykładzie jest to pin 2). Jeśli używasz innego pinu, dostosuj wartość DHTPIN w kodzie.

Powyższy kod odczytuje wilgotność i temperaturę co 2 sekundy i wysyła wyniki do monitora szeregowego. Możesz dostosować częstotliwość odczytu według własnych potrzeb.

------------

Zadanie nr 3

Kod programu w Arduino IDE dla ESP32 C3 odczytujący parametry procesora

void setup() { Serial.begin(115200); } void loop() { // Odczytaj i wyświetl informacje o procesorze ESP32-C3 Serial.println("\nInformacje o procesorze ESP32-C3:"); // Odczytaj częstotliwość procesora w MHz uint32_t cpuFrequency = ESP.getCpuFreqMHz(); Serial.print("Częstotliwość procesora: "); Serial.print(cpuFrequency); Serial.println(" MHz"); // Odczytaj ilość dostępnej pamięci RAM Serial.print("Dostępna pamięć RAM: "); Serial.print(ESP.getFreeHeap() / 1024); Serial.println(" KB"); // Odczytaj numer rdzenia procesora Serial.print("Numer rdzenia procesora: "); Serial.println(ESP.getChipCores()); // Odczytaj informacje o obszarze pamięci flash Serial.print("Rozmiar pamięci flash: "); Serial.print(ESP.getFlashChipSize() / (1024 * 1024)); Serial.println(" MB"); Serial.print("ID układu pamięci flash: "); Serial.println(ESP.getFlashChipId(), HEX);

Serial.println("Using lower level function:");
Serial.println(esp_get_idf_version());
delay(5000); // Poczekaj 5 sekund przed kolejnym odczytem }


Powyższy kod wykorzystuje funkcje dostępne w bibliotece ESP32, aby odczytać i wyświetlić informacje o procesorze ESP32-C3, takie jak częstotliwość procesora, ilość dostępnej pamięci RAM, numer rdzenia procesora oraz informacje o obszarze pamięci flash.
Upewnij się, że masz odpowiednie narzędzia i sterowniki zainstalowane w Arduino IDE oraz wybraną poprawną płytę (ESP32-C3) przed wgrywaniem kodu na płytkę.

UWAGA: Kod wygenerowany rzez AI nie jest do końca poprawny pokazuje błąd w linii  Serial.println(ESP.getFlashChipId(), HEX);
brak biblioteki #include "esp32c3/rom/spi_flash.h"
no cóż ......
-------------------------------------
Zadanie nr 4

Kod programu w Arduino IDE dla ESP32 C3  dla połączenia z aplikacją VIRTUINO przy pomocy Web Socket connection 


#include <WiFi.h> #include <WebSocketsServer.h> const char *ssid = "TwojaSiecWiFi"; const char *password = "HasloWiFi"; WebSocketsServer webSocket = WebSocketsServer(81); void setup() { Serial.begin(115200); // Połączenie z siecią WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Inicjalizacja serwera WebSocket webSocket.begin(); webSocket.onEvent(webSocketEvent); } void loop() { webSocket.loop(); } void webSocketEvent(uint8_t num, WStype_t type, uint8_t *payload, size_t length) { switch (type) { case WStype_DISCONNECTED: Serial.printf("[%u] Disconnected!\n", num); break; case WStype_CONNECTED: { IPAddress ip = webSocket.remoteIP(num); Serial.printf("[%u] Connected from %d.%d.%d.%d\n", num, ip[0], ip[1], ip[2], ip[3]); break; } case WStype_TEXT: // Otrzymano dane tekstowe od klienta WebSocket handleWebSocketData(num, payload, length); break; case WStype_BIN: // Otrzymano dane binarne od klienta WebSocket // handleWebSocketBinary(num, payload, length); break; } } void handleWebSocketData(uint8_t num, uint8_t *payload, size_t length) { // Obsługa otrzymanych danych od klienta WebSocket Serial.printf("[%u] Received text: %s\n", num, payload); // Tu możesz dodać kod obsługi otrzymanych danych od klienta VIRTUINO }

-----------------------------

Patrząc na powyższe wyniki zapytań AI na razie powstrzymam się od jakiego mądrego komentarza. Poczekam co powie nieco osłupiały nasz ulubiony ciąg dalszy ...





Brak komentarzy:

Prześlij komentarz