#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SD.h>
#include <SPI.h>
// OLED display settings
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SD_CS 5 // CS pin for SD card
#define MOSI_PIN 4 // Updated MOSI pin
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// WiFi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// SD card pin
#define SD_CS 5 // Chip select pin for SD card module
void setup() {
Serial.begin(115200);
// Initialize OLED display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// Start boot sequence
hackerBootSequence();
// Connect to WiFi
display.clearDisplay();
display.setCursor(0, 0);
display.print(">>> CONNECTING TO WIFI...");
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
display.print(".");
display.display();
}
Serial.println(" Connected!");
// Display WiFi connection status
display.clearDisplay();
display.setCursor(0, 0);
display.print(">>> WIFI CONNECTED");
display.setCursor(0, 10);
display.print("IP: ");
display.print(WiFi.localIP());
display.setCursor(0, 20);
display.print("MAC: ");
display.print(WiFi.macAddress());
display.display();
delay(2000);
// Initialize SD card
if (!SD.begin(SD_CS)) {
Serial.println("SD Card initialization failed!");
display.clearDisplay();
display.setCursor(0, 0);
display.print("SD INIT FAIL!");
display.display();
while (true); // Stop if SD card fails
}
display.clearDisplay();
display.setCursor(0, 0);
display.print("SD INIT SUCCESS!");
display.display();
delay(1500);
}
void loop() {
// Clear display for new scan
display.clearDisplay();
display.setCursor(0, 0);
display.print(">>> NETWORK SCAN IN PROGRESS");
// Open file for appending
File file = SD.open("/network_scan.txt", FILE_APPEND);
if (!file) {
Serial.println("Failed to open file on SD card");
return;
}
// Generate and display random IP addresses and ports
for (int i = 0; i < 3; i++) {
int ip1 = random(192, 223);
int ip2 = random(0, 255);
int ip3 = random(0, 255);
int ip4 = random(1, 254);
int port = random(1000, 9999);
display.setCursor(0, 15 + (i * 12));
display.printf("IP: %d.%d.%d.%d:%d", ip1, ip2, ip3, ip4, port);
// Log IP and port to SD card
file.printf("IP: %d.%d.%d.%d Port: %d\n", ip1, ip2, ip3, ip4, port);
}
// Close file after writing
file.close();
// Matrix-style binary animation on the bottom of the screen
display.setCursor(0, 55);
for (int i = 0; i < SCREEN_WIDTH / 6; i++) {
display.print(random(0, 2)); // Display random 0s and 1s
if (i % 10 == 0) display.print(" ");
}
// Update display
display.display();
delay(1500);
}
void hackerBootSequence() {
display.clearDisplay();
display.setCursor(0, 0);
display.print(">>> BOOTING SYSTEM...");
display.display();
delay(1000);
// Simulate loading bar
for (int i = 0; i < SCREEN_WIDTH; i += 10) {
display.fillRect(i, SCREEN_HEIGHT / 2 - 5, 10, 10, SSD1306_WHITE);
display.display();
delay(100);
}
// "Access Granted" message after boot
delay(500);
display.clearDisplay();
display.setCursor(0, 0);
display.print(">>> ACCESS GRANTED");
display.display();
delay(1500);
}