在没有显示屏的情况下连接树莓派无非两种情况:1.通过VNC 2.通过SSH。但是这两种连接方式都需要树莓派的IP地址,每次登陆路由器管理员界面查ip非常麻烦(尤其是在管理员密码被忘记的情况下 亲测。。)。所以我想到写一个python程序,让树莓派自己把ip地址发给我,但由于树莓派开机自动运行python程序我还没弄好,之后做好了再更新。
上代码
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import smtplib
import urllib
import urllib.request
import socket
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
my_sender = 'XXXXXXXXXXX@qq.com' # 发件人QQ邮箱账号
my_pass = 'XXXXXXXXX' # 发件人QQ邮箱密码
my_user = 'XXXXXXX@qq.com' # 收件人QQ邮箱账号
def mail():
ret = True
try:
# msg = MIMEText('填写邮件内容', 'plain', 'utf-8')
msg = MIMEMultipart()
msg['From'] = formataddr(["陈大帅", my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(["陈大帅", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "树莓派IP地址" # 邮件的主题,也可以说是标题
# 邮件正文内容
msg.attach(MIMEText(ip, 'plain', 'utf-8'))
server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False
ret = False
return ret
# 检查网络连同性
def check_network():
while True:
try:
result=urllib.request.urlopen('https://www.baidu.com').read()
print(result)
print("Network is Ready!")
break
except Exception:
print(err)
print("Network is not ready,Sleep 5s....")
time.sleep(5)
return True
# 获得本级制定接口的ip地址
def get_ip_address():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("1.1.1.1",80))
ipaddr=s.getsockname()[0]
s.close()
return ipaddr
time.sleep(20)
check_network()
ip=get_ip_address()
ret = mail()
if ret:
print("OK")
else:
print("error")
需要注意的是QQ邮箱必须要打开SMTP服务才行(花了我4角钱 心痛o((>ω< ))o),这里的密码不是QQ密码,是一段登陆的授权码。
上一张成功图
两分钟后的更新。。。