RFHunter代码解析:ESP32与OLED显示屏的完美结合

【免费下载链接】rfhunter RFHunter is a device to find hidden Cameras at AirBNBs 【免费下载链接】rfhunter 项目地址: https://gitcode.com/gh_mirrors/rf/rfhunter

RFHunter是一款用于在AirBNBs等场所发现隐藏摄像头的设备,它巧妙地将ESP32与OLED显示屏结合,实现了对无线信号的精准检测与直观显示。本指南将深入解析RFHunter的核心代码结构,展示ESP32与OLED显示屏如何协同工作,为您揭开这款信号检测工具的技术奥秘。

项目概述:ESP32与OLED的完美搭档

RFHunter采用ESP32作为主控单元,搭配128x64 OLED显示屏,能够实时监测并显示周围的无线信号强度。设备通过AD8317射频功率检测器采集信号,经ESP32处理后,在OLED屏幕上以数字和图形方式直观呈现信号参数,帮助用户快速识别潜在的隐藏摄像头。

RFHunter设备实物图 图:两台组装完成的RFHunter设备,分别采用紫色和绿色外壳,正面配备OLED显示屏和操作旋钮

硬件架构:核心组件与连接方式

RFHunter的硬件系统主要由以下关键组件构成:

  • ESP32开发板:负责数据处理和系统控制
  • AD8317射频功率检测器:用于信号强度采集
  • 128x64 OLED显示屏:提供用户界面
  • 3000mAh锂电池:提供便携电源
  • 电位器:用于灵敏度调节
  • 蜂鸣器:提供声音报警

RFHunter零件分解图 图:RFHunter的3D打印外壳零件与内部电子元件,包括电池和控制电路板

关键引脚定义

在代码中,硬件连接通过明确的引脚定义实现:

#define RF_SENSOR_PIN 34   // ADC1_CH6 (GPIO 34) - 连接AD8317输出
#define POT_PIN 35         // ADC1_CH7 (GPIO 35) - 连接电位器
#define OLED_SDA 21        // I2C数据引脚 - 连接OLED
#define OLED_SCL 22        // I2C时钟引脚 - 连接OLED
#define BUZZER_PIN 5       // 蜂鸣器控制引脚

OLED显示屏驱动:从初始化到数据显示

显示屏初始化

RFHunter使用Adafruit_SSD1306库驱动OLED显示屏,初始化过程具有重试机制,确保设备稳定启动:

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// 初始化显示屏,最多尝试3次
bool displayInitialized = false;
for (int attempt = 0; attempt < 3 && !displayInitialized; attempt++) {
  if (display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    displayInitialized = true;
  } else {
    // 初始化失败时重试
    Wire.end();
    delay(100);
    Wire.begin(OLED_SDA, OLED_SCL);
    delay(100);
  }
}

数据显示实现

显示屏主要显示以下信息:

  • 信号原始值(Raw)
  • 电压值(V)
  • 信号范围(Range)
  • 分贝毫瓦值(dBm)
  • 信号强度等级(Strength)
  • 图形化强度指示条

核心显示代码如下:

// 显示标题
display.setTextSize(1);
display.setCursor(0, 0);
display.println(F("RF Signal Strength"));

// 显示原始值和电压
display.setCursor(0, 16);
display.print(F("Raw: "));
display.print(average);
display.setCursor(64, 16);
display.print(F("V: "));
display.print(voltage, 2);
display.print(F("V"));

// 显示范围和dBm值
display.setCursor(0, 26);
display.print(F("Range: "));
display.print(baselineRange);
display.setCursor(64, 26);
display.print(F("dBm: "));
display.print(dBm, 1);

// 显示信号强度
display.setCursor(0, 36);
display.print(F("Strength: "));
display.print(signalStrength);

// 绘制信号强度条形图
for (int i = 0; i < 10; i++) {
  int barHeight = (i < signalStrength) ? map(i, 0, 9, 5, barMaxHeight) : 2;
  display.fillRect(startX + i * (barWidth + barSpacing), SCREEN_HEIGHT - barHeight, barWidth, barHeight, SSD1306_WHITE);
}

信号处理:从采集到强度计算

信号采集与滤波

为获得稳定的信号读数,RFHunter采用滑动平均滤波算法:

// 滑动平均滤波
total = total - readings[readIndex];
readings[readIndex] = analogRead(RF_SENSOR_PIN);
total = total + readings[readIndex];
readIndex = (readIndex + 1) % numReadings;
int average = total / numReadings;

电压与分贝转换

AD8317的输出电压通过以下公式转换为dBm值:

float voltageTodBm(float voltage) {
  if (voltage < V_MIN) return -70.0f;
  if (voltage > V_MAX) return 0.0f;
  return SLOPE * (voltage - V_MAX) + INTERCEPT;
}

其中,V_MIN为0.33V,V_MAX为1.65V,斜率SLOPE为-22.0mV/dB,这些参数根据AD8317的数据手册确定。

3D打印外壳:设计与组装

RFHunter提供了完整的3D打印外壳设计文件(RFHunter-3DPrint-v10.3mf),使您能够轻松制作专业的设备外壳。外壳设计考虑了所有电子元件的布局,确保完美贴合。

RFHunter 3D打印模型 图:RFHunter的3D打印模型设计,展示了外壳的各个组件

快速开始:构建您自己的RFHunter

要构建自己的RFHunter设备,请按照以下步骤操作:

  1. 克隆项目仓库:git clone https://gitcode.com/gh_mirrors/rf/rfhunter
  2. 准备所需电子元件(清单见rfhunter.cpp文件注释)
  3. 3D打印外壳组件
  4. 按照代码中的接线指南进行电路连接
  5. 使用PlatformIO或Arduino IDE上传代码到ESP32

结语:ESP32与OLED的协同优势

RFHunter展示了ESP32与OLED显示屏结合的强大潜力。通过简洁高效的代码,实现了专业级的信号检测功能。无论是电子爱好者还是安全专业人士,都能从这个项目中获得宝贵的学习经验和实用工具。

通过本文的解析,您不仅了解了RFHunter的代码结构和工作原理,还掌握了ESP32与OLED显示屏的集成方法。希望这个项目能激发您的创造力,开发出更多基于ESP32的创新应用!

【免费下载链接】rfhunter RFHunter is a device to find hidden Cameras at AirBNBs 【免费下载链接】rfhunter 项目地址: https://gitcode.com/gh_mirrors/rf/rfhunter

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐