这篇文章展示了如何在基于Raspberry Pi的Pi-Hole系统中添加OLED状态屏幕。
Pi-Hole是一种网络范围的广告阻止程序,您可以在Raspberry Pi上运行。它在所有Pi型号上都能很好地运行,并且是较旧硬件的理想项目。您可以在上阅读更多有关它的信息。 Pi-Hole官方网站.
在Raspberry Pi B +上设置Pi-Hole之后,我想要一种添加显示器的方法,这样我就可以快速检查它是否在工作。所以我加了便宜的0.96″OLED显示屏和瞬时开关。开关允许显示屏根据需要显示其他详细信息。 LED在那里可以为包装盒增加漂亮的彩色发光,但是当然这是可选的。

OLED状态屏幕硬件设置
硬件要求是相当基本的。
- Raspberry Pi(任何型号,但理想情况下您需要以太网端口)
- SD卡(建议使用8GB或更大容量,但可以使用4GB)
- 电源供应
- 网络连接
- 以太网电缆
- 或车载WiFi
- 或USB WiFi加密狗
- 显示器(可选)
- 键盘(可选)
- 皮套(可选)
状态屏幕和交换机升级要求:
Pi-Hole安装& Setup
安装Pi-Hole非常简单。我不’真的想在这里复制该过程。取而代之的是,我将总结自己所做的工作,并提供指向其他指南的适当链接。根据您的喜好,您可以使用SSH或键盘和监视器来执行设置。
- 使用以下命令创建新的Raspbian SD卡“Raspbian 精简版” image and Etcher [指南]
- 添加名为的空文本文件“ssh”启动分区以启用SSH [指南]
- 使用新的SD卡启动Pi
- 将默认密码更改为明智的密码 [指南]
- 跑“sudo apt update” followed by “sudo apt upgrade”
- 通过以下任一方式获取Pi的IP地址:
- 在Pi上运行ifconfig
- 看你的路由器设置
- 使用网络扫描仪
- (可选)将路由器配置为始终为Raspberry Pi分配相同的IP地址
- 请执行以下说明的安装过程之一 Pi-Hole GitHub页面。我用了“一站式自动安装”
屏幕和开关接线
开关使用跳线直接连接到GPIO接头,然后用两部分环氧树脂胶粘贴到盖子上。

屏幕,开关和LED的接线如下图所示:

屏幕由3.3V引脚供电,而LED由GPIO引脚供电。
OLED屏幕设置
使用I2C协议的OLED屏幕非常容易连接,因为您可以使用跨接电缆直接连接到GPIO接头。在我的Pi中可以找到向Pi添加一个文件并安装库的过程。 如何使用OLED显示模块 教程。
确保您可以运行示例Python脚本,并且屏幕可以正常工作。
开关硬件
开关可以直接连接到GPIO接头。我将其连接到GPIO21(引脚40)和地(引脚39)之间。该脚本将GPIO21定义为“High”它将被拉“Low”当按下开关时。
gpiozero安装
蟒蛇脚本将使用gpiozero来控制LED和按钮。通过运行以下命令确保已安装:
sudo apt install 蟒蛇3-gpiozero
蟒蛇脚本安装
蟒蛇脚本使用Pi-Hole API。这允许脚本从Pi-Hole请求当前数据,然后Python可以格式化它以显示在屏幕上。
使用以下命令下载Python脚本:
wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/pihole/stats.py
并获取所需的字体文件:
wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/pihole/VCR_OSD_MONO_1.001.ttf
然后通过使用以下命令编辑cron来使Pi在启动时运行:
crontab -e
并将以下行添加到末尾:
@reboot 蟒蛇3 /home/pi/stats.py &
您的cron文件将如下所示:
# For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command @reboot 蟒蛇3 /home/pi/stats.py &
保存并退出使用 CTRL-X, Y 然后 输入.
重启Pi,脚本将在30秒后在屏幕上显示Pi-Hole数据。这种延迟使Pi有时间在尝试向Pi-Hole询问数据之前连接到网络。按下按钮会将另外一组数据滚动到屏幕上。
OLED屏幕边框
黑色屏幕边框经过3D打印以封闭OLED屏幕,’的PCB。由于OLED模块的变化,边框允许进行一些调整。屏幕必须手动放置,然后粘贴到位。使用双面胶带将边框固定在外壳上。
可从以下位置获得STL文件 我的Thingiverse频道.
这是3D打印边框的基本动画:
Pi-Hole状态屏幕正在运行
以下是三个可用的状态屏幕:

主屏幕每30秒滚动并刷新一次数据。这很好地表明了该脚本仍在运行,而无需检查其他任何内容。
- 屏幕1(主)
- 总阻止百分比
- 阻止总数
- 屏幕2
- IP地址
- 封锁百分比
- 阻止总数
- 查询总数
- 屏幕3
- IP地址
- CPU利用率
- 正在使用的内存/总内存
- 已用磁盘空间/总磁盘空间
我的情况’m using is a “DesignSpark black” case from RS组件.
关于广告拦截的想法
我决定尝试使用Pi-Hole,因为作为父母,我需要证明自己可以完全控制我的网络,而我的家庭互联网规则是法律。这通常是为了确保使用我的WiFi而不是监视成年人的儿童的安全。
当我儿子的时候尤其如此’的朋友正在将支持互联网的设备带到我家。我没有’不想否认他们使用这些设备的能力,但我无法控制它们的配置方式。家长控制或精美的应用可能会帮助您自己的孩子,但您可以’将它们强加给访客。
广告屏蔽是一个有争议的主题,尤其是在那些依靠广告来产生收入流的广告屏蔽中。对于该网站而言,广告确实可以抵消托管费用,这是正确的。一世’关于是否应鼓励其他人运行一个系统,该系统将剥离该网站和其他内容生成器的网站上的广告,我一直有两种想法。我了解人们为什么要这样做,但我也觉得在该网站上投放广告对于支付通常对人们有帮助的内容来说是很小的代价。
但是选择最终是您的。
10条留言
很难为此添加睡眠模式吗?
可以使用其他按钮在预定时间唤醒屏幕,第一个按钮将按设计滚动。
喜欢您发布的出色教程。
谢谢。
如果您不这样做,这里有一个挡板’t have a 3D printer [链接]
嗨,您好。较旧的Raspi可以做这些事情吗?我在您的教程中尝试过,但显示保持黑色。
干杯
Pi-Hole在较旧的型号上运行良好。我使用B +。我最近更新了该教程,因此可能值得重试。
对我不起作用。干净安装“Lite”在我的Pi 2上。我遵循了您的I2C显示器指南–一切都好。我可以看到动画,图像…使用python3命令。 PiHole已安装且正在运行,Web界面等所有功能。问题是,重启后OLED不会重置。我仍然有来自测试脚本的最后一张图像,它就坐在那里,就像显示没有正确初始化或重置一样。您的脚本在显示部分显示(rst = None)吗?将其更改为rst = RST并没有帮助。我的OLED的温度为0x3C,正如我所说的,其他所有功能都可以正常工作。有任何想法吗?
I’我刚刚更新了说明,以包括gpiozero的安装’t included by default in 树莓派 精简版.
sudo apt install 蟒蛇3-gpiozero
在Raspbian LITE映像上未默认安装gpiozero模块。我手动运行了脚本,它返回了ModuleNotFound错误。运行sudo apt install 蟒蛇3-gpiozero解决了该问题。辛苦了让我的矿山运行在另外收集灰尘的Pi 2上。
当它说有15.2%的查询被阻止时,是否意味着其余84.8%的查询导致了广告通过?我认为’根据您的黑名单/白名单?
那有道理吗?
我认为这意味着其他84.8%’没有考虑过广告,因此被允许通过。因此,对于您的网络网页,图像,小猫视频,Facebook帖子等上要求的所有其他内容,通常会向允许的域发出请求。
感谢您整理这些内容,我需要做的一件事是下载字体后将其复制到/ usr / share / fonts / truetype
并运行fc font-cache
如果我将字体与stats.py脚本放在同一目录中,则似乎没有关系–但是从其他目录运行此文件或使用crontab似乎需要安装字体。