#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* GEMINI_TOKEN = "";
const char* MODEL = "gemini-2.5-flash";
String userQuestion = "";
// Connect to Wi-Fi
void connectWiFi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
Serial.println("Connected to Wi-Fi: " + String(WiFi.localIP()));
}
// Ask Gemini API
void askGemini(const String& prompt) {
if (WiFi.status() != WL_CONNECTED) { Serial.println("Wi-Fi not connected"); return; }
HTTPClient http;
String url = "https://generativelanguage.googleapis.com/v1beta/models/" + String(MODEL) + ":generateContent";
if (!http.begin(url)) { Serial.println("Connection failed"); return; }
http.addHeader("Content-Type", "application/json");
http.addHeader("x-goog-api-key", String(GEMINI_TOKEN));
DynamicJsonDocument reqDoc(2048);
JsonArray contents = reqDoc.createNestedArray("contents");
JsonObject content = contents.createNestedObject();
JsonArray parts = content.createNestedArray("parts");
JsonObject part = parts.createNestedObject();
part["text"] = "Answer in one clear and complete sentence only: " + prompt;
JsonObject genConfig = reqDoc.createNestedObject("generationConfig");
genConfig["maxOutputTokens"] = 250;
genConfig["temperature"] = 0.2;
String requestBody;
serializeJson(reqDoc, requestBody);
int httpCode = http.POST(requestBody);
String response = http.getString();
if (httpCode == 200) {
DynamicJsonDocument resDoc(8192);
DeserializationError error = deserializeJson(resDoc, response);
if (error) { Serial.println("JSON parse error: " + String(error.c_str())); }
else if (resDoc["candidates"][0]["content"]["parts"][0]["text"].is<String>()) {
Serial.println(resDoc["candidates"][0]["content"]["parts"][0]["text"].as<String>());
} else { Serial.println("Invalid response."); }
} else { Serial.println("Request failed: " + String(httpCode)); }
http.end();
}
// Setup
void setup() {
Serial.begin(115200);
connectWiFi();
Serial.println("Ask your Question:");
}
// Loop
void loop() {
if (Serial.available()) {
userQuestion = Serial.readStringUntil('\n');
userQuestion.trim();
if (userQuestion.length() > 0) {
Serial.println("Asking: " + userQuestion);
askGemini(userQuestion);
Serial.println("\nAsk your Question:");
}
}
}