树莓派4B开机自启动Python程序,发送WIFI-IP至指定邮箱

  • 树莓派开机自启动Python并发送IP地址到指定邮箱
    • 环境
    • 用Python发送邮件
    • 获取WIFI的IP地址
    • 整合发送邮件和获取WIFI-IP的程序
    • 开机自启动

树莓派开机自启动Python并发送IP地址到指定邮箱

作为电子工程师,我之前都是使用STM32、51单片机或FPGA作为嵌入式开发控制核心,通过C语言或者VHDL进行开发。偶然一次了解到树莓派强大的功能和兼容性,可以直接用Python开发,我决定试一试这个有趣的东西。
在调试树莓派远程登录时,我发现必须要知道树莓派的IP才能连接,如果树莓派能够自己发送一个IP到邮箱岂不是妙哉?
我搜了一下,发现还有不少人和我想法一样。
话不多说,开始我们的工作:

环境

Python 3.7

用Python发送邮件

目前Python中可以采用smtplib库做这件事情。参考代码:

from time import sleepdef sentemail():host = 'smtp.163.com'  # 设置发件服务器地址port = 465  # 设置发件服务器端口号。注意,这里有SSL和非SSL两种形式,现在一般是SSL方式sender = 'xxxx@163.com'  # 设置发件邮箱,一定要自己注册的邮箱pwd = 'xxxx'  # 设置发件邮箱的授权码密码,根据163邮箱提示,登录第三方邮件客户端需要授权码receiver = 'xxx@qq.com' # 设置邮件接收人,可以是QQ邮箱body = '<h1>测试</h1><p>树莓派</p>' # 设置邮件正文,这里是支持HTML的msg = MIMEText(body, 'html') # 设置正文为符合邮件格式的HTML内容msg['subject'] = '发送邮件测试' # 设置邮件标题msg['from'] = sender  # 设置发送人msg['to'] = receiver  # 设置接收人try:s = smtplib.SMTP_SSL(host, port)  # 注意!如果是使用SSL端口,这里就要改为SMTP_SSLs.login(sender, pwd)  # 登陆邮箱s.sendmail(sender, receiver, msg.as_string())# 发送邮件!print ('Done.sent email success')except smtplib.SMTPException:print ('Error.sent email fail')if __name__ == '__main__':sentemail()

我是参考别人的程序写的,链接如下:raspberry PI 将Python脚本写成服务并设置开机启动
这个代码可以先测试好。接着我们准备第二步。

获取WIFI的IP地址

在Python中获取本机IP地址可以参考python 获取本机ip地址的两种实现方法
我的程序如下:

#!/usr/bin/pythonimport socket
import fcntl
import structdef get_ip_address(ifname):s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)return socket.inet_ntoa(fcntl.ioctl(s.fileno(),0x8915,  # SIOCGIFADDRstruct.pack('256s', bytes(ifname[:15],'utf-8')))[20:24])ip1 = get_ip_address('wlan0')
print(ip1)

将该程序命名为:get_ip.py

整合发送邮件和获取WIFI-IP的程序

将发送邮件的程序稍作修改,调用获取IP的程序。程序命名为:send_mail.py
代码见下:

import smtplib
from email.mime.text import MIMEText
# 引入smtplib和MIMEText
from time import sleep
from get_ip import get_ip_addressdef sentemail(text_to_send):host = 'smtp.163.com'  # 设置发件服务器地址port = 465  # 设置发件服务器端口号。注意,这里有SSL和非SSL两种形式,现在一般是SSL方式sender = 'xxx@163.com'  # 设置发件邮箱,一定要自己注册的邮箱pwd = 'xxx'  # 设置发件邮箱的授权码密码,根据163邮箱提示,登录第三方邮件客户端需要授权码receiver = 'xxx@qq.com' # 设置邮件接收人,可以是QQ邮箱body = '<h1>Your have sent IP successfully</h1><p>IP of Lijiwei_raspberry:</h1></p>%s</p>' %text_to_send# 设置邮件正文,这里是支持HTML的msg = MIMEText(body, 'html') # 设置正文为符合邮件格式的HTML内容msg['subject'] = '树莓派IP' # 设置邮件标题msg['from'] = sender  # 设置发送人msg['to'] = receiver  # 设置接收人try:s = smtplib.SMTP_SSL(host, port)  # 注意!如果是使用SSL端口,这里就要改为SMTP_SSLs.login(sender, pwd)  # 登陆邮箱s.sendmail(sender, receiver, msg.as_string())# 发送邮件!print ('Done.sent email success')except smtplib.SMTPException:print ('Error.sent email fail')if __name__ == '__main__':ip1 = get_ip_address('wlan0')sentemail(ip1)

开机自启动

开机自启动我摸索了两天多,网上各种办法都试了一遍,发现还是要看英文原版。
参考原版网页:Run a script on start up

  1. 注意以下几点
  • It must start with a shebang (#!/bin/bash) followed by a LSB header, a set of specially formatted comments that contain information about the service.
    这点我不是很明确,但是根据该文件夹中bluetooth服务的写法,即“#空格!/bin/bash”;
  • 缩进规则尽量按照bluetooth中的,避免出错;
  1. 用nano编辑代码:
  • 在编辑前,将terminal的权限设为root,即:sudo su root
  • 新建并编辑:sudo nano /etc/init.d/mailip
  • 把代码编辑好,保存并退出(ctrl+Ob保存, ctrl+X退出)
    编辑时注意,要添加延迟命令,否则该服务会在boot的同时运行,则出现错误,即添加:sleep 10s
    注:1s即1秒,1m即1分钟
  • 升级该服务的权限:sudo chmod +x /etc/init.d/mailip
  • 启动该服务:sudo /etc/init.d/mailip start
    这时,terminal中会显示运行python程序
  • 将该程序加入到自启动中:
    sudo update-rc.d /etc/init.d/mailip
    注明:如果工作目录已经设置为/etc/init.d则要注意不要写绝对路径了,这样就可以:sudo update-rc.d mailip,否则会告诉你无法读出
  1. 重启树莓派,一会儿就会自动收到邮件啦
    我的代码:
#! /bin/bash
# /etc/init.d/mailip### BEGIN INIT INFO
# Provides:          ljw
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This service is a test
### END INIT INFOcase $1 in start)echo "Starting mailip"sleep 10ssu pi -c "python3 /home/pi/mail_ip/send_mail.py";;stop)echo "Stopping mailip"killall mailip;;*)echo "Usage: /etc/init.d/mailip start|stop"exit 1;;
esacexit 0

树莓派4B开机自启动Python程序,发送WIFI-IP至指定邮箱相关推荐

  1. 树莓派开机运行python脚本_【树莓派】开机自启动脚本方法之一(.Desktop文件)...

    转载处: 首先,树莓派使用的是官方推荐的镜像:RASPBIAN: 在树莓派上常常会需要开机自启动python程序,方法如下: 机制上类似于 Windows 的"开始"菜单中的&qu ...

  2. 树莓派自启动python程序,远程树莓派桌面,重装树莓派系统,串口驱动,永不休眠,树莓派旋转屏幕方向,树莓派定时重启,修改矫正树莓派时间,raspbian Linux 系统命令常用

    一.树莓派4B自启python的脚本方法 1.rc.local文件修改 (1)新建运行脚本 pi@zero:~/raspberry $ sudo nano test.sh #!/bin/sh cd / ...

  3. 使用robot-upstart开机自启动ROS程序

    使用robot-upstart开机自启动ROS程序 1.环境 2.说明 3.安装robot-upstart 4.编写launch文件 5.添加自启动任务 6.upstart问题及其他事项 6.1 自启 ...

  4. Android开机自启动C程序调试

    Android开机自启动C程序调试 本次记录是关于如何在rk3566的Android11版本下将led时钟显示添加成开机自启动的C程序. 首先,当然是在sdk中会被执行到的.rc文件中将我们所需要执行 ...

  5. 树莓派开机自启动opencv程序脚本及报错分析及拓展

    解决看完可直接跳结论 解决放开头:三连不发愁!!! .desktop desktop 文件的基本模板 开机启动操作!!! 结论与拓展 解决放开头:三连不发愁!!! Ubuntu 桌面程序开机自启 开机 ...

  6. 怎样使程序开机自启动和程序挂掉自动重启

    碰到这个问题基本都是属于服务端工程部署的事情,在部署好我们的算法服务后,怎么样保证当服务器关机重启后,我们的算法服务自动重新运行?如果碰到异常bug使得我们的程序挂掉后,怎样让它重新运行? 下面方法都 ...

  7. 树莓派4B ubuntu20.04 python点亮LED 教程

    关于如何在ubuntu上配置python控制gpio的环境参见这篇博客 https://blog.csdn.net/ourkix/article/details/113417800 关于GPIO引脚 ...

  8. 树莓派4B 不同无线网卡自动连接不同wifi

    树莓派4B中只有一张无线网卡,在日常使用中,有时可能会出现需要两张无线网卡分别连接不同WIFI的情况.如果想让树莓派开机后两张无线网卡能自动连接上对应的WIFI,不产生连接的错位,首先,需要购买一张无 ...

  9. 树莓派能直接运行python程序_树莓派怎么运行python程序

    树莓派运行Python程序的方法: 一.RaspBerry系统设置 1.首先在开发板没有通电情况下,连接硬件,以及项目中用到传感器.比如当前项目需要将LED灯插在面包板上,然后通过杜邦线将开发板和面包 ...

最新文章

  1. LeakCanary 源码解析
  2. 前端面试技巧和注意事项_我的前端面试总结(套路篇)
  3. 用户操作-用户详情查询流程分析
  4. 一次挖掘SRC漏洞 - 从0到有
  5. JAVA线程并发数量控制_线程同步工具(二)控制并发访问多个资源
  6. unity3D游戏开发实战原创视频讲座系列7之消消乐游戏开发
  7. python 进程通信 延时_Python-----进程通信队列
  8. Linux环境下FTP工具的使用方法
  9. zookeeper学习二
  10. day31 模块 与包
  11. openEuler软件包加固项目笔记
  12. 十进制和二进制之间的转换
  13. 01-SA8155 QNX 虚拟机Hypervisor
  14. RabbitMQ连接超时问题
  15. 【笔记整理】node.js笔记
  16. 关于智能机器人的一些伦理道德问题
  17. Consul微服务注册与发现
  18. 联发科的MT6735和MT6737有什么差别?有哪些MTK芯片资料可以下载的?
  19. S3C2440 开发板实战(10):signal async 异步通信
  20. (休息几天)读曼昆之微观经济学——供求关系

热门文章

  1. Charles抓包工具测试实战
  2. Win32-API: 终于能正常的捕获焦点事件: WM_COMMAND、BN_SETFOCUS、EN_SETFOCUS
  3. Swift语法学习--字典
  4. 阿博茨科技:不仅是工具,基于用户体验的CRM再选择
  5. 数据结构与算法——中缀表达式转后缀表达式
  6. Android结合源码分析Power按键处理流程
  7. thinkpad S3笔记本无线网速慢的解决方案
  8. jQuery的几种显示隐藏方法
  9. 无需交 300 元认证费,快速创建已认证的小程序
  10. Stanford Named Entity Recognizer (NER) 斯坦福命名实体识别(NER)