#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const String url = "https://v2.jokeapi.dev/joke/Programming";
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
String getJoke() {
HTTPClient http;
http.useHTTP10(true);
http.begin(url);
http.GET();
String result = http.getString();
DynamicJsonDocument doc(2048);
DeserializationError error = deserializeJson(doc, result);
// Test if parsing succeeds.
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return "<error>";
}
String type = doc["type"].as<String>();
String joke = doc["joke"].as<String>();
String setup = doc["setup"].as<String>();
String delivery = doc["delivery"].as<String>();
http.end();
return type.equals("single") ? joke : setup + " " + delivery;
}
void nextJoke() {
// display.setTextColor(ILI9341_WHITE);
display.println("\nLoading joke...");
String joke = getJoke();
// tft.setTextColor(ILI9341_GREEN);
display.println("test");
display.display();
}
void setup() {
WiFi.begin(ssid, password, 6);
Serial.begin(9600);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.display();
delay(2000); // Pause for 2 seconds
// Clear the buffer
display.clearDisplay();
nextJoke();
}
void loop() {
}