Sterowanie ESP8266 za pomocą chat GPT

Typ_projektu
microPython
Zdjecie główne
Krótki opis projektu

Projekt ma na celu stworzenie systemu umożliwiającego użytkownikowi komunikację z modelem językowym OpenAI GPT-3.5 przez mikrokontroler ESP8266. System pozwala na wysyłanie zapytań (promptów) do modelu AI, otrzymywanie wygenerowanego kodu Python, jego zapis na urządzeniu oraz wykonanie na ESP8266.

Niezbędne elementy

1. ESP8266 (NodeMCU)

2. płytka stykowa

3. kable męsko - męskie oraz x1 męsko - żeński

4. diody led x2 czerwone i x2 zielone 

5. czujnik temperatury

6. pasek led

7. komputer PC z Thonny

Opis projektu

1. ESP8266:

Łączy się z siecią Wi-Fi.
Wysyła zapytania do serwera proxy zdefiniowanego w projekcie.
Odbiera wygenerowany kod Python od modelu GPT i zapisuje go do pliku.
Wykonuje otrzymany kod Python na mikrokontrolerze.
Uruchamia lokalny serwer HTTP do udostępniania zapisanych odpowiedzi.
2. Serwer Proxy (Flask):

Odbiera zapytania z ESP8266.
Przekazuje zapytania do API OpenAI GPT-3.5.
Przetwarza odpowiedzi i usuwa zbędne formatowanie (Markdown).
Zwraca odpowiedź w formacie JSON, która zawiera wygenerowany kod Python.
3. Funkcjonalności systemu:

Komunikacja z GPT-3.5: Użytkownik podaje zapytanie, które trafia do modelu GPT-3.5, z prośbą o wygenerowanie kodu dla ESP8266, np. sterowanie diodami LED lub odczyt temperatury z czujnika DHT11.
Wykonanie kodu na ESP8266: Wygenerowany kod jest automatycznie uruchamiany na urządzeniu.
Zapis odpowiedzi: Zapytania i odpowiedzi są zapisywane w pliku gpt_responses.txt na ESP8266.
Serwer plików HTTP: Pozwala na pobranie zapisanych odpowiedzi poprzez przeglądarkę.

 

Opis funkcji w projekcie:
connect_wifi(): Łączy ESP8266 z siecią Wi-Fi. Aktywuje interfejs Wi-Fi, próbuje połączyć się z podaną siecią (SSID i hasło). Jeśli połączenie jest udane, wyświetla informacje o połączeniu (adres IP, maska podsieci, brama).


send_prompt_to_gpt(prompt): Wysyła zapytanie (prompt) do serwera proxy. Przesyła dane w formacie JSON do serwera proxy, który z kolei komunikuje się z API OpenAI. Odbiera odpowiedź z kodem i zwraca ją w postaci słownika JSON. Obsługuje błędy połączenia i serwera.


execute_generated_code(code): Wykonuje wygenerowany kod Python na ESP8266. Korzysta z funkcji exec() do uruchomienia przekazanego kodu. Obsługuje błędy wykonania i wyświetla je w konsoli.


start_file_server(): Uruchamia lokalny serwer HTTP, który udostępnia plik gpt_responses.txt. Nasłuchuje na porcie 8080. W przypadku żądania HTTP odczytuje zawartość pliku i zwraca go jako odpowiedź. Jeśli plik nie istnieje, zwraca błąd 404.


main(): Główna pętla programu, obsługuje interakcję użytkownika. Łączy się z Wi-Fi, pobiera zapytanie od użytkownika, wysyła je do serwera proxy, odbiera odpowiedź, zapisuje ją do pliku i wykonuje kod. Obsługuje komendę exit do zakończenia programu.


Dodatkowe funkcje serwera proxy:
chat_proxy(): Odbiera zapytania od ESP8266, przekazuje je do API OpenAI, i zwraca odpowiedź. Pobiera dane w formacie JSON, tworzy odpowiedni payload do API OpenAI, przesyła żądanie, przetwarza odpowiedź, usuwa formatowanie Markdown i zwraca czysty kod Python. Obsługuje błędy związane z API OpenAI i połączeniem.

 

 

Instrukcja uruchamiania:
1. Uruchom serwer proxy:

Upewnij się, że klucz API (API_KEY) w pliku zgadza się z kluczem dostępnym na stronie OpenAI (https://platform.openai.com/api-keys).

Otwórz terminal i przejdź do katalogu z plikiem proxy_server.py.
Wykonaj komendę:
python proxy_server.py


2. Sprawdź konfigurację adresu proxy w ESP8266:

Upewnij się, że zmienna PROXY_URL w pliku main.py zawiera prawidłowy adres IP i port serwera proxy, np.:
PROXY_URL = "http://192.168.0.101:5000/api/chat" (adres proxy będziesz widział w cmd)


3. Skonfiguruj Wi-Fi w ESP8266:

Uzupełnij zmienne SSID i PASSWORD w pliku main.py, aby ESP8266 mogło połączyć się z tą samą siecią Wi-Fi, co serwer proxy.


4. Uruchom ESP8266:

Wgraj kod z pliku main.py na ESP8266 i uruchom mikrokontroler.


5. Praca z systemem:

Po uruchomieniu ESP8266 system poprosi o podanie zapytania (prompt) dla modelu GPT.
Podaj zapytanie w języku angielskim, np.:
"Turn on red LED on and green LED on."
Jeśli pojawi się błąd, spróbuj ponownie – niektóre bardziej złożone zapytania mogą wymagać kilku prób.

6. Uwagi:

Jeśli zadanie generuje kod zawierający pętlę nieskończoną, konieczne będzie zresetowanie ESP8266, aby przerwać działanie programu.

 

UWAGI DO SCHEMATU:

Jak widać schemat sam w sobie nie jest skomplikowany jednak ze względu na to, że nie udało mi się wgrać na tinkercardzie esp8266 są uwagi:

 

Patrzymy na górną część płytki stykowej i odpowiednio:

do kolumny 1 powinien zostać doprowadzony D1

do kolumny 7 powinien zostać doprowadzony VIN

do kolumny 8 powinien zostać doprowadzony D2

do kolumny 11 powinien zostać doprowadzony D7

do kolumny 14 powinien zostać doprowadzony D3

do kolumny 17 powinien zostać doprowadzony D5

do kolumny 19 powinien zostać doprowadzony D8

do kolumny 30 powinien zostać doprowadzony GND

kod programu

ZIP poniżej

Pliki_projektu
Schemat
Youtube
Tagi
micropython chatgpt AI łączenie po API