使用树莓派投射安卓设备

使用Scrpy将您的手机屏幕转换为与树莓派或任何其他基于Linux的设备上的应用程序一起运行的应用程序。

很难远离我们每天使用的小玩意儿。在现代生活的喧嚣中,我想确保我不会错过手机屏幕上弹出的朋友和家人的重要通知。我也很忙,不想迷失在分心中,拿起电话回复消息往往会分散注意力。

使事情进一步复杂化的是,有很多设备。幸运的是,他们中的大多数人,从强大的工作站到笔记本电脑,甚至卑微的树莓派,都可以运行Linux。因为他们运行Linux,我为一台设备找到的几乎每个解决方案都非常适合其他设备。

一刀切

我想在我凝视的任何屏幕上都能统一我生活中的不同数据来源。

我决定通过将手机屏幕复制到电脑上来解决这个问题。本质上,我把我的手机变成了一个与所有其他应用程序一起运行的应用程序。这有助于我将注意力集中在桌面上,防止我在精神上徘徊,并让我更容易回复紧急通知。

听起来很吸引人吗?这也是你做这件事的方法。

设置Scrpy

Scrcpy,通常称为屏幕复制,是一个开源的屏幕镜像工具,用于从Linux、Windows或macOS显示和控制Android设备。Android设备和计算机之间的通信主要通过USB连接和Android调试桥(ADB)进行。它使用TCP/IP,不需要任何根访问。

Scrcpy的设置和配置非常简单。如果您正在运行Fedora,您可以从Copr存储库安装它:

$ sudo dnf copr enable zeno/scrcpy
$ sudo dnf install scrcpy -y

在Debian或Ubuntu上:

sudo apt install scrcpy

您还可以自己编译scrcpy。使用scrcpyGitHub页面上的说明,即使在树莓派上也可以构建很长时间。

在树莓派上:

先安装snap

$ sudo apt install snaps

scrcpy目前树莓派上没有正式版,安装beta版

$ sudo snap install --beta scrcpy

设置手机

安装scrcpy后,您必须启用USB调试,并将每台设备(树莓派、笔记本电脑或工作站)授权为受信任的控制器。

打开安卓设备上的“设置”应用程序,然后向下滚动到开发人员选项。如果开发人员选项未激活,请按照Android的说明解锁它

接下来,启用USB调试

启用USB调试选项

然后通过USB将手机连接到树莓派或笔记本电脑(或您正在使用的任何设备),并将模式设置为PTP(如果可以的话)。如果您的手机不使用PTP,请设置手机用于传输文件的模式(例如,而不是用作连接或MIDI设备)。

您的手机可能会提示您授权您的计算机,并通过其RSA指纹进行识别。您只需要在第一次连接时这样做;之后,您的手机将识别并信任您的计算机。

使用lsusb命令确认设置:

$ lsusb
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 011 Device 004: ID 046d:c21d Logitech, Inc. F310 Gamepad
Bus 005 Device 005: ID 0951:1666 Kingston Technology DataTraveler G4
Bus 005 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 004 Device 001: ID 18d1:4ee6 Google Inc. Nexus/Pixel Device (PTP + debug)
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

然后执行$ scrcpy,使用默认设置启动它。

Scrcpy在树莓派上运行

性能和响应能力因您使用什么设备来控制手机而异。在Pi上,一些动画可能很慢,甚至响应有时也会滞后。Scrcpy为此提供了一个简单的修复方法:降低图像scrcpy显示器的比特率和分辨率使您的计算机更容易跟上。使用以下操作:

scrcpy --bit-rate 1M --max-size 800

尝试不同的价值观来找到你喜欢的。为了更容易键入,一旦您确定了命令,请考虑创建自己的Bash别名

切断电源线

scrcpy运行后,您甚至可以通过WiFi连接手机和计算机。scrcpy安装过程还安装adb,这是一个与Android设备通信的命令。Scrcpy还使用此命令与您的设备通信,adb可以通过TCP/IP进行连接。

在计算机上运行的Scrpy

要尝试,请确保您的手机通过WiFi连接到计算机正在使用的同一无线网络上。暂时不要断开手机与USB的连接!

接下来,通过导航到“设置”并选择“关于手机”来获取手机的IP地址。查看“状态”选项以获取您的地址。它通常以192.168或10开头。

或者,您可以使用adb获取手机的IP地址:

$ adb shell ip route | awk '{print $9}'
To connect to your device over WiFi, you must enable TCP/IP connections. This, you must do through the adb command:
$ adb tcpip 5555
Now you can disconnect your mobile from USB.
Whenever you want to connect over WiFi, first connect to the mobile with the command adb connect. For instance, assuming my mobile's IP address is 10.1.1.22, the command is:
$ adb connect 10.1.1.22:5555

一旦连接好,您可以像往常一样运行scrcpy。

遥控器

Scrcpy易于使用。您可以在终端或GUI应用程序中尝试。

您是否使用其他屏幕镜像应用程序?如果是这样,请在评论中告诉我们。

用 Cockpit 管理你的树莓派

用 Cockpit 建立你的树莓派的控制中心。

去年,我写了关于使用 Cockpit 管理我的 Linux 服务器的文章。它是一个基于 Web 的工具,为管理多个服务器及其相关的服务和应用提供了一个简洁、强大的界面。它还简化了日常的管理任务。

在这篇文章中,我将会介绍如何在树莓派基金会提供的标准操作系统树莓派 OS 上安装用于 Linux 服务器的 Cockpit Web 控制台。我还会简要介绍它的特性。

在树莓派 OS 上安装 Cockpit

在 sudo 权限下使用一个账户通过 SSH 登录你的树莓派系统。如果你还没有建立一个账户:

$ ssh pibox
alan@pibox's password:
Linux pibox.someplace.org 5.10.17-v7+ #1403 SMP Mon Feb 22 11:29:51 GMT 2021 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue May  4 09:55:57 2021 from 172.1.4.5
alan@pibox:~ $

在树莓派 OS 上安装 Cockpit Web 控制台和在 Linux 服务器上一样简单:

$ sudo apt install cockpit

Cockpit 只需要 60.4 KB 的磁盘空间。加上它的几个包依赖项,总使用量是 115MB。

安装过程将负责设置和启动服务。你可以使用 systemctl 命令来验证状态:

$ systemctl status cockpit.socket
● cockpit.socket - Cockpit Web Service Socket
   Loaded: loaded (/lib/systemd/system/cockpit.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Tue 2021-05-04 10:24:43 EDT; 35s ago
     Docs: man:cockpit-ws(8)
   Listen: 0.0.0.0:9090 (Stream)
  Process: 6563 ExecStartPost=/usr/share/cockpit/motd/update-motd  localhost (code=exited, status=0/SUCCESS)
  Process: 6570 ExecStartPost=/bin/ln -snf active.motd /run/cockpit/motd (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 2181)
   CGroup: /system.slice/cockpit.socket

使用 Cockpit

连接

默认的监听端口号是 9090。打开你最喜欢的 Web 浏览器并输入地址,如果是本机就输入: http://127.0.0.1:9090。如果远程登录就输入:http://192.168.0.100:9090,(这里假设IP地址为192.168.0.100)。


你现在可以使用你的普通账户登录。同样,这个账户上需要有使用 sudo 的权限 —— 很可能就是你用来 SSH 和运行 Apt 的那个账户。一定要勾选“为特权任务重用我的密码”。

管理你的树莓派

Cockpit 的初始屏幕以 “System” 页开始,提供当前 CPU 和内存使用的详细信息和图表。你可以从这个屏幕看到硬件细节。

通过点击每一项来展开左边的列(例如,日志、存储、服务等)。这些是标准的 Cockpit 部分,不言自明。让我快速描述一下每个部分。

日志

这部分展示了日志。它们可以根据日期和严重程度来过滤。

存储

存储部分展示了已经安装的物理驱动器和 RAID 设备。例如大小、序列号等细节都被展示了出来。还展示了读/写活动和实际空间使用的图表。存储的具体日志显示在底部。

网络

这部分展示了发送和接收活动、IP 地址以及网络特定的日志。你还可以使用相应的按钮添加更多的网络设备,如绑定、网桥和 VLAN。

账户

这里展示了已有的账户。点击每个账户来管理,或使用创建新账户按钮来添加用户。账户也可以被删除。

服务

这部分可以让管理员查看系统所有服务的状态。点击任何服务都会转到一个包含启动、重启和禁用的标准任务的屏幕。

应用程序

通常,这个屏幕提供了各种用于管理功能的应用程序,例如 389 目录服务器或创建 Podman 容器。但在我的树莓派 OS 上,这个屏幕只显示“没有安装或可用的应用程序”。在写这篇文章的时候,这个或许还没有实现。虽然,你可能会怀疑这类型的程序对于树莓派硬件来说是否太过沉重。

软件更新

对任何系统管理员来说,保持软件最新是最重要的任务之一。Cockpit 的软件更新部分可以检查并进行更新。

终端

Cockpit 最方便的特点之一是终端。你可以使用它,而不是打开一个单独的终端模拟器并使用 SSH。我使用终端来安装 ScreenFetch:

$ sudo apt install screenfetch

使用 ScreenFetch 生成了这张截图:

使用 Cockpit 的中心控制

Cockpit 在树莓派上的表现就像它在其他 Linux 系统上一样。你可以将它添加到仪表盘上进行集中控制。它允许企业在 Cockpit 作为管理仪表盘解决方案的任何地方,将基于树莓派的服务和系统整合到他们的整体 Linux 基础设施中。因为树莓派经常在高密度机架数据中心以无外接控制headless方式运行,而这些数据中心通常会缺乏 KVM 访问方式,这是非常方便的。

用树莓派建造一个家庭恒温器

ThermOS项目是现成智能恒温器诸多缺点的答案。

我和妻子于2020年10月搬进了新家。天一冷,我们就意识到家里旧的供暖系统(包括一个一直开着的供暖区)的一些缺点。我们之前家里有Nest恒温器,目前的设置远没有那么方便。我们家有多个恒温器,有些有计划供暖时间表,有些有不同的时间表,有些根本没有。

旧恒温器

是时候该换一换了,但房子有一些限制:

  • 它建于 20 世纪 60 年代末,在 90 年代进行了翻修。
  • 热量是水暖的(热水)。
  • 它有六个加热区的六个恒温器。
  • 每个恒温器(红色和白色)只有两根电线加热。
炉子阀门

购买还是建造?

我想要对所有热区(时间表、自动化、家/客场等)进行“智能”恒温器控制。如果我想买现货,我有几种选择,但它们都有缺点:

选项1:Nest 或 Ecobee

  • 很贵:没有智能恒温器可以处理多个区域,所以我每个区域都需要一个(~200美元*6 = 1200美元)。
  • 这很难:我必须重新运行恒温器线才能获得臭名昭著的C wire,这使恒温器能够连续供电。电线每根在墙上长20到100英尺,可能会钉在螺柱上。

选项2:电池供电的恒温器,如Sensi WiFi恒温器

  • 电池只能用一两个月。
  • 在仅限电池的模式下,它不兼容HomeKit。

选项3:商用现成的恒温器,但只有一家提供(有点过分了):霍尼韦尔的TrueZONE 

  • 它很旧,支持不力(于2008年发布)。
  • 它很贵——仅控制器就超过300美元,您需要一个RedLINK网关才能让劣质应用程序工作。

最后我的选择是…

选项4:我自己来做!
我决定建造自己的多区智能恒温器,我把它命名为ThermOS

  • 它集中在一块电路板里(你需要一个设备,而不是六个设备)。
  • 它使用现有的墙内恒温器线。
  • 它兼容HomeKit,具有自动化、调度、家/场景等。
  • 等等等等,这…有趣吗?是的,有趣……我想。

ThermOS硬件

我知道我想用树莓派。由于它们变得如此便宜,我决定使用树莓派4型号B 2GB。我相信我可以用树莓派Zero W,但那是未来的修订。

以下是我使用的部件的完整列表:

姓名数量价格
树莓派4型号B 2GB129.99 美元
树莓派4官方15W电源16.99 美元
内陆400系点面包板12.99 美元
Arduino的内陆8通道5V继电器模块18.99 美元
内陆杜邦跳线20厘米(3包)14.99 美元
Mouser.com的DS18B20温度传感器(正品)66.00 美元
3 针螺丝接线板(40 件装)17.99 美元
用于树莓派的RPi GPIO终端块突破板模块117.99 美元
鳄鱼夹测试线索(10包)15.89美元
Southwire 18/2恒温器线(50英尺)110.89美元
收缩包装14.99 美元
可焊面包板(5包)111.99 美元
PCB安装支架(50包)17.99 美元
塑料外壳/外壳127.92美元

我开始在draw.io上绘制硬件图表,并意识到我缺乏一些关于电路板的关键知识。我打开侧板,找到了拆卸变压器,该变压器采用120V电线,使其成为加热系统的24V。如果您的加热系统与我的系统相似,您将在塔可区阀门之间看到许多跳线。Taco上的3号端口跳过了我所有的区域阀门。这是因为无论打开/打开多少阀门,它只是控制循环泵。如果一到五个阀门的任何组合是打开的,它应该打开;如果没有阀门打开,它应该关闭……很简单!

炉子布线建筑

在本质上,恒温器只是一种开关。一旦恒温器内的热敏电阻(温度传感器)检测到较低的温度,开关就会关闭并完成24V电路。这个项目不是在每个房间都有一个恒温器,而是把它们都放在炉子旁边,这样所有六区阀门都可以由一个继电器模块控制,使用八个继电器中的六个。树莓派充当恒温器的大脑,独立控制每个继电器。

使用树莓派和Python手动设置继电器

下一个问题是如何从每个房间获得温度读数。我可以在每个房间有一个无线温度传感器,在Arduino或树莓派上运行,但这可能会变得昂贵和复杂。相反,我想重复使用墙上现有的恒温器线,但纯粹是为了温度传感器。

“1-wire”DS18B20温度传感器似乎符合要求:

  • 它的准确度为+/- 0.5°C或0.9°F。
  • 它使用“1线”协议进行数据处理。
  • 最重要的是,DS18B20可以使用“parasitic power”模式,只需两根电线即可获得电力和数据。提醒一下……几乎所有的DS18B20都是假冒的。我买了一些(希望它们是真的),但当我尝试使用电源时,它们不会起作用。然后我从Mouser.com上买了真品,它们就像一个符咒一样!
温度传感器

从面包板和本地所有组件开始,我开始编写代码来与所有组件交互。一旦我证明了这个概念,我就在混合物中添加了现有的壁内恒温器线。我得到了与那个设置一致的读数,所以我开始让他们更精致一点。在我父亲的帮助下,我们焊接了自称“足够好”的焊料,我们焊接了三针螺丝端子(以避免传感器过热),然后将传感器连接到终端上。现在传感器可以用线螺母连接到现有的壁内布线。

附加温度传感器

我仍在“美化”我的温度传感器壁挂装置,但我经历了一些3D打印修订,我想我快到了。

壁挂

ThermOS软件

像往常一样,写逻辑不是难的部分。然而,决定应用程序架构和框架是一个令人困惑的多天过程。我开始评估像PiHome这样的开源项目,但它依赖于特定的硬件,并且是用PHP编写的。我是Python的粉丝,决定从头开始,编写自己的REST API。

由于HomeKit集成如此重要,我想我最终会写一个HomeBridge插件来集成它。我没有意识到有一个名为HAP-Python的Python HomeKit框架来实现配件协议。它帮助我在30分钟内通过iPhone的“家庭”应用程序运行和控制概念验证。

ThermOS HomeKit集成
ThermOS软件架构

其余的“临时”逻辑相对简单,但我确实想强调一下我最初错过的一块。我的代码运行了几天,我正在处理硬件,这时我注意到我的继电器每隔几秒钟就会打开和关闭一次。这种“短循环”不一定有害,但它肯定没有效率。为了避免这种情况,我添加了一些阈值,以确保热开关仅在+/- 0.5°时切换。

以下是阈值逻辑(你可以参考rubber-duck debugging):

# check that we want heat
if self.target_state.value == 1:
    # if heat relay is already on, check if above threshold
    # if above, turn off .. if still below keep on
    if GPIO.input(self.relay_pin):
        if self.current_temp.value - self.target_temp.value >= 0.5:
            status = 'HEAT ON - TEMP IS ABOVE TOP THRESHOLD, TURNING OFF'
            GPIO.output(self.relay_pin, GPIO.LOW)
        else:
            status = 'HEAT ON - TEMP IS BELOW TOP THRESHOLD, KEEPING ON'
            GPIO.output(self.relay_pin, GPIO.HIGH)
    # if heat relay is not already on, check if below threshold
    elif not GPIO.input(self.relay_pin):
        if self.current_temp.value - self.target_temp.value <= -0.5:
            status = 'HEAT OFF - TEMP IS BELOW BOTTOM THRESHOLD, TURNING ON'
            GPIO.output(self.relay_pin, GPIO.HIGH)
        else:
          status = 'HEAT OFF - KEEPING OFF'
门槛

我实现了我的最终目标——能够从手机上控制所有这一切。

ThermOS作为HomeKit Hub

把我的ThermOS放在午餐盒里

我的概念证明相当混乱。

初始ThermOS设置

随着软件和一般硬件设计的到位,我开始想出如何以更持久和更精致的形式打包所有组件。我对永久安装的主要担忧之一是使用带有杜邦跳线的面包板。我订购了一些可焊接面包板和一个螺丝终端突破板(感谢@arduima的树莓派GPIO销)。

以下是带有支架和外壳的可焊接面包板正在进行中的样子。

正在打包的ThermOS硬件

在这里,安装在锅炉房里。

安装的热操作系统

现在我只需要整理电线并贴上标签,然后我就可以开始将恒温器的剩余部分交换到ThermOS上。我将开始我的下一个项目:用于中央空调的ThermOS。

树莓派bullseye的国内镜像源

使用说明Debian 11 (bullseye)

  • 官方源
    /etc/apt/sources.list
    deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
  • #Uncomment line below then ‘apt-get update’ to enable ‘apt-get source’
  • #deb-src http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
  • /etc/apt/sources.list.d/raspi.list
    deb http://archive.raspberrypi.org/debian/ bullseye main
  • #Uncomment line below then ‘apt-get update’ to enable ‘apt-get source’
  • #deb-src http://archive.raspberrypi.org/debian/ bullseye main

1、 清华源

# 编辑 `/etc/apt/sources.list` 文件,删除原文件所有内容,用以下内容取代:
deb [arch=armhf] http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
# 如果需要 arm64 软件源,在 `/etc/apt/sources.list` 中加上
deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/raspbian/multiarch/ bullseye main
# 编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main

注意:网址末尾的raspbian重复两次是必须的。因为 Raspbian 的仓库中除了APT软件源还包含其他代码。APT软件源不在仓库的根目录,而在raspbian/子目录下。

编辑镜像站后,请使用sudo apt-get update命令,更新软件源列表,同时检查您的编辑是否正确。

2、阿里源

sudo nano /etc/apt/sources.list

编辑 /etc/apt/sources.list 文件,删除原文件所有内容,用以下内容取代:

deb http://mirrors.aliyun.com/raspbian/raspbian/ bullseye main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ bullseye main non-free contrib

sudo nano /etc/apt/sources.list.d/raspi.list

编辑 /etc/apt/sources.list.d/raspi.list 文件,删除原文件所有内容,用以下内容取代:

deb http://mirrors.aliyun.com/raspberrypi/ bullseye main

树莓派安装cURL和XMLReader的简单方式

在树莓派上安装WordPress,如果需要SSL安全链接或Astra这样的经典主题,这时就需要cURL和XMLReader环境支持,这两个环境如何建立,网上有大量资料可供参考,但都比较复杂而且容易安装失败,本站之前也提供了类似方法。为方便大家越过这些非关键但必要的步骤,这里总结一下简单易用的环境搭建方法(我用的是php7.4,各位根据自己的版本修改即可):

1、安装cURL

sudo apt-get install php7.4-curl

2、安装XMLReader

sudo apt install php7.4-xml

安装完成后需要重启apache

sudo service apache2 restart

WordPress人气主题Astra去掉底部版权信息的方法

Astra是WordPress非常有名的主题,深受广大网管喜爱,但在安装好Astra主题后,默认它会在网站底部添加一个指向Astra官网的链接,大多数情况下大家并不希望出现这些信息,此时可用Astra自带的功能将其去掉,具体如下:

打开主题自定义,选择页脚选项

然后选择 页脚栏,找到区域1的自定义文本框,这里就是我们在页脚看到的所有文字,其中[theme_author]短代码表示的就是Astra主题链接

这里我们选择将其修改成需要的信息,当然你也可以使用html代码添加链接等其他格式的内容

最后点击 发布 即可