UNKO.fun

Blog Post

拿到一块不带屏幕的树莓派

September 2, 2019 | 3 min

树莓派

Post content

树莓派4B

具备

  1. Wi-Fi芯片
  2. 网线接口
  3. TF卡接口

没有屏幕怎么办

没有屏幕的情况下想要ssh到树莓派需要

  1. 联网
  2. ssh开启

开启网络与ssh

拿到烧录好的TF卡,进入根目录,一般来说是**boot/**。

如果是使用Wi-Fi,那么创建或编辑wpa_supplicant.conf文件,然后在里面写上Wi-Fi配置。

country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="你要连接到Wi-Fi名1"
psk="Wi-Fi密码"
key_mgmt=WPA-PSK # 加密方式
priority=1 # 优先级,数字越大优先级越高
}

network={
ssid="你要连接到Wi-Fi名2"
psk="Wi-Fi密码"
key_mgmt=WPA-PSK # 加密方式
priority=1 # 优先级,数字越大优先级越高
}

这样树莓派启动时就会加载这些Wi-Fi信息然后自动连接了。

然后是开启ssh,只需要执行touch ssh生成一个名为ssh文件就可以了。

需要注意的是树莓派启动后这些文件会消失。

我的树莓派呢

在自己掌控的局域网环境下,你能很容易知道树莓派的IP地址,但是离开了自己的地盘怎么拿到树莓派的IP呢。

监控网络变化

只要监控网络变化然后给自己发信息就能知道IP了。

复制下面的网络检测代码,然后在print('Internet is up') # (103行)这里替换自己要触发的代码。

Gist 示例

Slack

我使用了Slack接收消息。

  1. 拥有一个Slack Workspace
  2. 创建一个Slack App
  3. 创建WebHook
  4. 拿到网络信息
  5. 使用WebHook发送信息

网络信息

我这里使用了psutil库,psutil.net_if_addrs()就可以拿到网络地址相关的信息。

代码

在检测网络的代码里,将需要替换的部分替换为notification.networkIsOn()就行了。

## notification.py
def sendNetworkInfo():
    import tools.fetch_info as fetch
    info = fetch.networkAddr()

    import tools.slack as slack
    msg = slack.makeMessage(info)
    slack.toSlack(msg)

def networkIsOn():
    sendNetworkInfo()

## fetch_info.py
def networkAddr():
    import psutil
    return psutil.net_if_addrs()
    
## slack.py
def toSlack(msg):
    import requests
    url = "你的WebHook"
    r = requests.post(url, json=msg)

def makeMessage(content):
    fields = []
    for k, v in content.items():
        field = "*" + str(k) + "*" + "\n" + str(v)
        fields.append(field)
    return {
        "type":"section",
        "text":"```" + "\n".join(fields) + "```"
    }

开机启动

在文件/etc/rc.local里添加 sudo python3 自定义路径/network_detect.py就可以开机运行该命令了。