树莓派采用DHCP连接到局域网中,每一次登陆IP都会改变,虽说使用ipscan扫描局域网可以解决,但是非常麻烦。
经过一番搜索,终于找到了解决方案。资料来自(技术贴)如何让你的树莓派开机将ip发到你的邮箱
在实现过程中遇到了一些问题,应该是由于资料采用的python版本较早,而我采用的是3.4版本,所以会出现一些语法错误。
例如:print 在python2中是语句,在python3中是函数,所以 print () 才是正确的。
python异常早期语句是: Exception,ex: 现在是 except Exception as e:
import socket import fcntl import time import struct import smtplib import urllib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.image import MIMEImage def sendEmail(smtpserver,username,password,sender,receiver,subject,msghtml): msgRoot = MIMEMultipart('related') msgRoot["To"] = ','.join(receiver) msgRoot["From"] = sender msgRoot['Subject'] = subject msgText = MIMEText(msghtml,'html','utf-8') msgRoot.attach(msgText) smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(username, password) smtp.sendmail(sender, receiver, msgRoot.as_string()) smtp.quit() def check_network(): while True: try: result=urllib.urlopen('http://baidu.com').read() print (result) print ("Network is Ready!") break except Exception as e: print (e) print ("Network is not ready,Sleep 5s....") time.sleep(5) return True 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 if __name__ == '__main__': check_network() ipaddr=get_ip_address() sendEmail('smtp.163.com','发送邮件的邮箱(我采用的是163邮箱)','发送邮件的邮箱的密码','发送邮件的邮箱',['接收邮件的邮箱'],'IP Address Of Raspberry Pi',ipaddr)
以上代码只需修改发送邮箱和接收邮箱就可以在树莓派raspbain系统中使用,smtp.163.com是163的服务器,可以类似修改成其他服务器,不懂可搜索相关smtp资料。
接下来在/home/pi目录下执行python脚本
python send-ip.py
执行成功便可以收到邮件
再来将python添加到树莓派的开机启动中去
首先进入root账户(sudo -s)
cd /etc
nano rc.local
在fi后面添加这一行
python /home/pi/send_ip.py(此处与找到的资料不同)
重启树莓派(sudo reboot),邮箱就会有树莓派的ip了。