#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD(0x27, 16, 2); // 根据实际 I2C 地址和引脚数量初始化 LCD
const char* ssid = "Wokwi-GUEST"; // WiFi 名称
const char* password = ""; // WiFi 密码,Wokwi-GUEST 网络无需密码
const char* ntpServer = "pool.ntp.org"; // NTP 服务器
const int BUTTON_PIN = 5; // 按钮连接到 GPIO 5
// 凯撒密码加密函数
String caesarEncrypt(String text, int shift) {
String encryptedText = "";
for (char c : text) {
if (isalpha(c)) {
char base = islower(c)? 'a' : 'A';
encryptedText += (char)(((c - base + shift) % 26) + base);
} else {
encryptedText += c;
}
}
return encryptedText;
}
// 凯撒密码解密函数
String caesarDecrypt(String encryptedText, int shift) {
return caesarEncrypt(encryptedText, 26 - shift);
}
void setup() {
Serial.begin(115200);
LCD.init(); // 初始化 LCD
LCD.backlight();
pinMode(BUTTON_PIN, INPUT_PULLUP); // 设置 BUTTON_PIN 为输入并启用内部上拉电阻
// 显示连接到 WiFi 的过程
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
// WiFi 连接代码
WiFi.begin(ssid, password);
while (WiFi.status()!= WL_CONNECTED) {
delay(500);
LCD.print(".");
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// 更新 LCD 显示
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Online");
LCD.setCursor(0, 1);
LCD.print("Press Button");
}
void loop() {
static const char* originalDocument = "shanyuqi"; // 替换为需要加密的原始文档
static bool buttonPressed = false; // 用于跟踪按钮按下的状态
if (!buttonPressed && digitalRead(BUTTON_PIN) == LOW) { // 检测按钮是否被按下
buttonPressed = true; // 更新按钮状态
delay(200); // 简单的消抖
}
if (buttonPressed) {
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Original: ");
LCD.print(originalDocument);
int shift = 3; // 加密移位数
String encryptedText = caesarEncrypt(originalDocument, shift);
LCD.setCursor(0, 1);
LCD.print("Encrypted: ");
LCD.print(encryptedText);
} else {
// 显示等待按钮按下的信息
LCD.setCursor(0, 1);
LCD.print("to Show Encryption");
}
}