Dự án ESP32 ChatGPT với API OpenAI

Trong chủ đề ESP32 ChatGPT lần này, mình sẽ hướng dẫn bạn cách tích hợp thêm khả năng xử lý ngôn ngữ tự nhiên cho ESP32, giúp nâng cấp dự án của bạn. Nhờ vào đó, bạn có thể tạo ra các ứng dụng tương tác phức tạp hơn, chẳng hạn như chatbot hoặc trợ lý giọng nói, có thể phản hồi lại kết quả nhanh chóng cho chúng ta khi nhập văn bản.

ChatGPT là gì?

ChatGPT là mô hình xử lý ngôn ngữ tự nhiên nâng cap (Advanced Natural Language Processing – NLP) do OpenAI phát triển. Mô hình này có thể tạo ra phản hồi giống con người dựa trên văn bản mà bạn cung cấp. Chúng sử dụng thuật toán học máy để hiểu ngữ cảnh và ý nghĩa của văn bản, cũng như ghi nhớ những gì bạn đã nói trước đó.

Đến nay, ChatGPT đã trở nên cực kỳ phổ biến và được nhiều người sử dụng. Chúng đang dần trở thành xu hướng trên Internet gần đây.

Mặc dù ChatGPT ban đầu được phát triển để phục vụ các ứng dụng đàm thoại như chatbot, nhưng việc tích hợp ChatGPT với các thiết bị IoT sẽ mang lại nhiều dự án thú vị và phức tạp hơn cho bạn.

ChatGPT là gì? Cách làm dự án ESP32 ChatGPT chi tiết
ChatGPT là gì? Cách làm dự án ESP32 ChatGPT chi tiết

Ví dụ: Hãy tưởng tượng bạn đang có một hệ thống Smart Home có thể điều khiển nhiều thiết bị trong nhà như đèn, điều hòa và camera. Thay vì sử dụng điện thoại để điều khiển từ xa hoặc điều khiển bằng giọng nói, bạn có thể tích hợp thêm ChatGPT để giao tiếp với hệ thống Smart Home này bằng ngôn ngữ tự nhiên có ngữ cảnh, ví dụ như “Tôi cảm thấy nóng”.

Khi đó, hệ thống sẽ kiểm tra nhiệt độ trong nhà và nếu nhiệt độ quá cao, chúng sẽ đề xuất hạ nhiệt độ.

Cách dùng ESP32 ChatGPT

Việc tích hợp ESP32 với ChatGPT mở ra nhiều hướng mới cho các dự án IoT nâng cao và hiện đại, chẳng hạn như chatbot tự động, trợ lý giọng nói,… Dưới đây là các bước chính để nhận phản hồi từ ChatGPT trong ứng dụng của bạn thông qua mạch ESP32:

  1. Đăng ký tài khoản OpenAI và cài thư viện ESP32 trên Arduino
  2. Tạo một dự án mới trên API OpenAI và tạo key API
  3. Sử dụng key API để xác thực các yêu cầu
  4. Gửi nội dung văn bản đã nhập tới API Open AI thông qua yêu cầu HTTP và nhận phản hồi bằng file .JSON
  5. Phân tích phản hồi và dùng chúng để điều khiển mạch ESP32 hoạt động tương ứng

Cách code chương trình ESP32 với ChatGPT từng bước một

Trước tiên, bạn cần cài sẵn thư viện ESP32 Arduino Core và chuẩn bị sẵn key OpenAI API.

1. Khai báo các thư viện cần thiết để ESP32 giao tiếp và kết nối WIFi, thực hiện yêu cầu HTTP và file .JSON:

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

2. Khai báo mạng WiFi mà bạn dùng (gồm tên và mật khẩu WiFi) và key API của bạn:

const char* ssid     = "your_SSID";
const char* password = "your_PASSWORD";
const char* apiKey = "your_API_KEY";

3. Chúng ta sẽ lập trình để ESP32 kết nối với mạng Wi-Fi và gửi yêu cầu HTTP POST tới API OpenAI tại setup():

void setup() {
    //
}

4. Trong setup(), đầu tiên bạn cần tạo cổng Serial ở tốc độ 9600:

  // Khởi tạo Serial
  Serial.begin(9600);

5. Kết nối với mạng WiFi của bạn để phục vụ dự án ESP32 ChatGPT:

// Kết nối vào mạng WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

6. Gửi yêu cầu HTTP Post đến điểm cuối (endpoint) của API Open AI, sử dụng thư viện HTTP Client:

  // Send request to OpenAI API
  String inputText = "Hello, ChatGPT!";
  String apiUrl = "https://api.openai.com/v1/completions";
  String payload = "{\"prompt\":\"" + inputText + "\",\"max_tokens\":100, \"model\": \"text-davinci-003\"}";

  HTTPClient http;
  http.begin(apiUrl);
  http.addHeader("Content-Type", "application/json");
  http.addHeader("Authorization", "Bearer " + String(apiKey));

Đoạn thông tin trong input text cho chúng ta biết lời nhắc cho ChatGPT, trong trường hợp này đang là “Hello, ChatGPT!”.

APIurl cho phép chỉ định điểm cuối hoàn thành.

payload là một đối tượng JSON chứa các tham số, ví dụ như số lượng thông báo tối đa cần tạo và mô hình cần dùng. Trong ví dụ này, IoTZone đang dùng mô hình “Text-Davinci-003” và cho phép tối đa 100 Token.

Sau đó, một HTTPClient http sẽ được tạo và hàm begin() được dùng để xác định điểm cuối apiUrl.

Cuối cùng, bạn thêm các tiêu đề HTTP, ví dụ như:

  • “content-Type”: Chỉ định việc chúng ta sẽ giao tiếp với nhau bằng dữ liệu JSON
  • “Authorization”: Xác thực với API ChatGPT bằng APU Key

7. Bước cuối cùng, bạn hãy dùng http.POST để gửi yêu cầu HTTP.POST đến các dịch vụ OpenAI API.

int httpResponseCode = http.POST(payload);
  if (httpResponseCode == 200) {
    String response = http.getString();
  
    // Parse JSON response
    DynamicJsonDocument jsonDoc(1024);
    deserializeJson(jsonDoc, response);
    String outputText = jsonDoc["choices"][0]["text"];
    Serial.println(outputText);
  } else {
    Serial.printf("Error %i \n", httpResponseCode);
  }

The http.POST trả về mã phản hồi HTTP, trong trường hợp này là HTTP 200, thì hệ thống sẽ phân tích file JSON và in kết quả ra màn hình Serial.

Trong trường hợp mã phản hồi HTTP không phải 200, màn hình Serial sẽ in ra dòng chữ lỗi “Error: HTTP CODE“. Ví dụ, nếu API token của bạn không hợp lệ, chúng sẽ in lỗi “Error: 401”.

Cuối cùng, chúng ta thêm đoạn code về vòng lặp loop(). Bên trong chúng không thực thi câu lệnh nào của dự án ESP32 ChatGPT, mà chỉ đơn giản là 1 trình giữ chỗ cho các đoạn code khác bạn sẽ thêm vào trong tương lai nếu cần.

Code ESP32 ChatGPT hoàn chỉnh

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>

// Replace with your network credentials
const char* ssid     = "your_SSID";
const char* password = "your_PASSWORD";

// Replace with your OpenAI API key
const char* apiKey = "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";

void setup() {
  // Initialize Serial
  Serial.begin(9600);

  // Connect to Wi-Fi network
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
      Serial.print('.');
      delay(1000);
  }
  Serial.println(WiFi.localIP());

  // Send request to OpenAI API
  String inputText = "Hello, ChatGPT!";
  String apiUrl = "https://api.openai.com/v1/completions";
  String payload = "{\"prompt\":\"" + inputText + "\",\"max_tokens\":100, \"model\": \"text-davinci-003\"}";

  HTTPClient http;
  http.begin(apiUrl);
  http.addHeader("Content-Type", "application/json");
  http.addHeader("Authorization", "Bearer " + String(apiKey));
  
  int httpResponseCode = http.POST(payload);
  if (httpResponseCode == 200) {
    String response = http.getString();
  
    // Parse JSON response
    DynamicJsonDocument jsonDoc(1024);
    deserializeJson(jsonDoc, response);
    String outputText = jsonDoc["choices"][0]["text"];
    Serial.println(outputText);
  } else {
    Serial.printf("Error %i \n", httpResponseCode);
  }
}

void loop() {
  // do nothing
}

Xử lý sự cố khi làm dự án ESP32 ChatGPT

Trong trường hợp bạn gặp phải sự cố khi dùng ESP32 với ChatGPT, bạn nên kiểm tra lại:

  • Đảm bảo đã nhập chính xác thông tin đăng nhập mạng WIFI, key API OpenAI và đã nhập chuỗi lời nhắc vào mã.
  • Kiểm tra kết nối mạng WiFi, đảm bảo ESP32 được kết nối với đúng mạng Wi-Fi và mạng đó có tín hiệu mạnh.
  • Kiểm tra xem bạn đã nạp tất cả các thư viện cần thiết vào Arduino IDE của mình chưa. Code ESP32 ChatGPT trên yêu cầu các thư viện sau: WiFi, HTTPClient và ArduinoJson.
  • Đảm bảo URL điểm cuối API là chính xác và có thể truy cập được từ mạng của bạn.
  • Kiểm tra xem tải trọng cho yêu cầu HTTP POST có được định dạng đúng hay không, bao gồm chuỗi lời nhắc và mọi tham số khác.

Lời kết

Trên đây là các hướng dẫn chi tiết để bạn làm việc với ESP32 ChatGPT, chúc bạn thành công! Ngoài ra, IoTZone có cung cấp sẵn các mạch EPS32 cùng với nhiều bài hướng dẫn khác thú vị về chủ đề này trên Website, bạn đừng bỏ lỡ nhé!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *