树莓开机发邮件告诉自己ip

本文介绍了一个使用Python编写的脚本,该脚本能够检查网络连接状态,并通过163邮箱向指定QQ邮箱发送当前设备的所有IP地址。文章详细展示了如何利用Python的smtplib库发送邮件、urllib库检查网络连接以及socket库获取本地IP地址。
 1 #!/usr/bin/env python
 2 # coding=utf-8
 3 
 4 import smtplib
 5 import urllib
 6 import time
 7 import socket
 8 import struct
 9 import fcntl
10 import array
11 GMAIL_USER = 'XXXXX@163.com'
12 GMAIL_PASS = 'XXXXXX'       //需要现在163邮箱里面设置授权安全码
13 SMTP_SERVER = 'smtp.163.com'    //之前在这里写了错smtp@163.com,好几天都没有查出来。。。
14 #SMTP_PORT = 465
15 SMTP_PORT = 25
16 recipient = 'XXXXXX@qq.com'
17 def checknet():                 //网络连通性
18     for i in range(0,5):
19         try:
20             check = urllib.urlopen('http://baidu.com').read()
21             print check
22             break
23         except :
24             time.sleep(3)
25     else:
26         return False
27     return True
28 
29 def get_ip():
30     SIOCGIFCONF = 0x8912
31     SIOCGIFADDR = 0x8915
32     BYTES = 4096
33     sck = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
34     names = array.array('B',b'\0' * BYTES)                 //定义数组
35     bytelen = struct.unpack('iL',fcntl.ioctl(sck.fileno(),SIOCGIFCONF,struct.pack('iL',BYTES,names.buffer_info()[0])))[0]
36     namestr = names.tostring()
37     ifaces = [namestr[i:i+32].split('\0',1)[0] for i in range(0,bytelen,32)]
38     ipList = []
39     for ifname in ifaces:
40         ip = socket.inet_ntoa(fcntl.ioctl(sck.fileno(),SIOCGIFADDR,struct.pack('256s',ifname[:15]))[20:24])
41         ipList.append(ifname+':'+ip)
42     return ipList
43 
44 if checknet():
45     try:
46         smtpserver = smtplib.SMTP(SMTP_SERVER,SMTP_PORT)
47         smtpserver.ehlo()
48         smtpserver.starttls()
49         smtpserver.ehlo()
50         smtpserver.login(GMAIL_USER,GMAIL_PASS)
51         header = 'To:'+recipient+'\n'+'From:'+GMAIL_USER
52         header = header + '\n'+ 'Subject:'+ 'IP'+'\n'
53         ip = '\r\n'.join(get_ip())
54         msg = header + '\n' + ip + '\n\n'
55         smtpserver.sendmail(GMAIL_USER,recipient,msg)
56         smtpserver.close()
57     except:
58         print 'error for stmp'
59 else:
60     print 'failed'

好了,脚本保存为send_ip.py,然后在/etc/rc.local里加上下面这行

/usr/bin/python /home/pi/send_ip.py

转载于:https://www.cnblogs.com/mrAAron/p/6782087.html

### 树莓派 GPIO 使用教程与配置示例 树莓派的GPIO(General Purpose Input/Output)引脚是其最强大的功能之一,可以用于连接各种硬件设备,如LED、按钮、传感器等。以下将详细介绍树莓派GPIO的基本使用方法和配置示例。 #### 1. GPIO 引脚基础知识 树莓派的GPIO引脚可以通过编程设置为输入或输出模式。作为数字输出时,GPIO引脚能够输出高电平(3.3V)或低电平(0V)。作为数字输入时,GPIO引脚可以检测外部信号的变化。此外,某些GPIO引脚还支持特殊功能,例如I2C、SPI和UART通信[^2]。 #### 2. 配置 GPIO 引脚 在树莓派上配置GPIO引脚通常需要通过命令行或编程语言实现。以下是两种常见的配置方式: - **通过命令行配置** 使用`gpio`命令可以快速设置GPIO引脚的功能。例如: ```bash # 将GPIO12设置为输出模式,并输出高电平 gpio -g mode 12 out gpio -g write 12 1 ``` 上述命令中,`-g`表示使用BCM编号模式,`mode`用于指定引脚模式,`write`用于写入电平值[^2]。 - **通过 Python 编程配置** Python树莓派上常用的编程语言之一,可以借助 `RPi.GPIO` 库来控制GPIO引脚。以下是一个简单的示例,用于控制一个LED灯的亮灭: ```python import RPi.GPIO as GPIO import time # 设置GPIO模式为BCM编号 GPIO.setmode(GPIO.BCM) # 定义引脚并设置为输出模式 led_pin = 12 GPIO.setup(led_pin, GPIO.OUT) try: while True: # 输出高电平点亮LED GPIO.output(led_pin, GPIO.HIGH) time.sleep(1) # 输出低电平熄灭LED GPIO.output(led_pin, GPIO.LOW) time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() ``` 在上述代码中,`GPIO.setmode(GPIO.BCM)` 设置了引脚编号模式为BCM模式,`GPIO.setup()` 用于初始化引脚,`GPIO.output()` 用于控制引脚的高低电平[^4]。 #### 3. GPIO 配置注意事项 - **电流限制**:树莓派的GPIO引脚只能提供有限的电流(通常不超过16mA),因此直接驱动大功率设备可能会损坏引脚。建议使用外部驱动电路或限流电阻[^4]。 - **引脚保护**:在连接外部设备时,请务必添加适当的保护措施,例如限流电阻或二极管,以防止过压或过流损坏GPIO引脚[^1]。 - **引脚编号**:树莓派的GPIO引脚有两种编号模式:物理引脚编号(BOARD)和BCM编号。推荐使用BCM编号,因为它更符合硬件设计规范[^2]。 #### 4. 实际应用示例 以下是一些基于树莓派GPIO的实际项目示例: - **电子邮件通知器**:通过GPIO引脚连接LED灯,当收到新邮件时点亮LED[^1]。 - **声音播放与按钮控制**:使用GPIO引脚连接按钮和扬声器,实现按下按钮播放声音的功能[^1]。 - **电阻式传感器读取**:通过GPIO引脚读取电阻式传感器的模拟信号,并将其转换为数字信号进行处理[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值