I had a few ESP8266’s lying around and some OLED Displays and wanted to do a project with them. So, I decided to put a joke API (http://official-joke-api.appspot.com) I discovered earlier to use.
Wire up your display to the ESP8266 according to the following schematics:
Then add the following code to your ESP8266 with the Arduino Application. You need to edit in the Wireless SSID and Password on line 4 and 5.
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> const char* ssid = "Wifi SSID"; const char* password = "Wifi Password"; #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <ArduinoJson.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); void setup () { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;;); } display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 10); // Display static text display.println("Waiting for Joke"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting.."); } Serial.println('\n'); Serial.print("Connected to "); Serial.println(WiFi.SSID()); // Tell us what network we're connected to Serial.print("IP address:\t"); Serial.println(WiFi.localIP()); } void loop() { Serial.println("Loop"); if (WiFi.status() == WL_CONNECTED) { //Check WiFi connection status HTTPClient http; //Declare an object of class HTTPClient http.begin("http://official-joke-api.appspot.com/random_joke"); //Specify request destination int httpCode = http.GET(); //Send the request if (httpCode > 0) { //Check the returning code String payload = http.getString(); //Get the request response payload Serial.println(payload); DynamicJsonDocument doc(2048); deserializeJson(doc, payload); const char* joke = doc["setup"]; const char* punchline = doc["punchline"]; Serial.println(joke); display.clearDisplay(); display.setCursor(0, 10); // Display static text display.println(joke); display.display(); delay(4000); display.clearDisplay(); display.setCursor(0, 10); // Display static text display.println(punchline); display.display(); } http.end(); //Close connection } delay(6000); //Send a request every 30 seconds }
Also, the following Libraries need to be installed via the Library Manager in the Arduino Software. (under Tools, Library Manager)
ArduinoJson, Adafruit_SSD1306, Adafruit-GFX-Library
Also, you need to add the URL “http://arduino.esp8266.com/stable/package_esp8266com_index.json” in the preferences and install esp8266 platform (Open Boards Manager from Tools > Board menu).
Don’t forget to select the ESP8266 board from Tools > Board menu after the installation.
And voilĂ , your joke machine should be finished and will be showing first a setup and then a few seconds later the punchline.