树莓派配置自动连接wifi,ip自动发送到163邮箱

实际环境:

       在普通场景下我们是无法登陆路由器管理界面查看树莓派ip的,我们该怎么办呢,方法是有的,先让树莓派连接我的手机热点,查看树莓派的mac地址,得到mac地址后再让树莓派连接本地wifi,我们笔记本也连接本地wifi,现在树莓派和笔记本在同一局域网,这时用nmap扫描局域网,找到mac跟树莓派mac相同的ip地址就可以了,实现自动连接wifi后就是将ip发送到163邮箱。

下面我来讲步骤

包含知识点:

        自动连接wifi

        如何查看自己树莓派的mac,如果在局域网用nmap扫描出自己树莓派的ip地址(mac区分)

        开启ssh服务

        连接成功后将ip自动发送到163邮箱

 

1、将刷好 Raspbian 系统的 SD 卡用电脑读取。在 boot 分区,也就是树莓派的 /boot 目录下新建 wpa_supplicant.conf 文件,按照下面的参考格式填入内容并保存 wpa_supplicant.conf 文件。

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

#手机热点
network={
ssid="vivo Y66"           #wifi名字
psk="liuww123"          #wifi密码
key_mgmt=WPA-PSK
priority=2              #连接优先级,数字越大优先级越高(不可以是负数    
}

#本地wifi
network={
ssid="SZP"           #wifi名字
psk="sssssss"          #wifi密码
key_mgmt=WPA-PSK
priority=2              #连接优先级,数字越大优先级越高(不可以是负数    
}


######  扩展参数解释
 
network={
ssid="WiFi-B"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1             #连接隐藏WiFi时需要指定该值为1
}

 

     如果你的 WiFi 没有密码

 

network={

ssid="你的无线网络名称(ssid)"

key_mgmt=NONE

}

   如果你的 WiFi 使用WEP加密

 

network={

ssid="你的无线网络名称(ssid)"

key_mgmt=NONE

wep_key0="你的wifi密码"

}

    如果你的 WiFi 使用WPA/WPA2加密

 

network={

ssid="你的无线网络名称(ssid)"

key_mgmt=WPA-PSK

psk="你的wifi密码"

}

    如果你不清楚 WiFi 的加密模式,可以在安卓手机上用 root explorer 打开 /data/misc/wifi/wpa/wpa_supplicant.conf,查看 WiFi 的信息。

2、开启ssh服务

      同样在/boot 下创建名为ssh的空文件,没有扩展名

3、启动树莓派后查看手机热点状态

   

4、手机关闭热点,让树莓派连接本地wifi,在同一局域网情况下,笔记本利用VMware开启centos虚拟机,网路使用桥接模式

    

5、在centos下用nmap扫描局域网主机

      

      nmap -sP 172.16.15.0/24 | grep -i -B 2 "b8:27:eb:05:0c:2c"

              参数解释  : -i  不区分大小写

                                   -B   2  :输出匹配行前面2行(包含匹配行)

     

6、用ssh连接到树莓派

      树莓派默认账号密码

           账号:pi

           密码:raspberry

      

7、修改root用户密码然后以超级管理员登录

        sudo passwd root

        su - root

8、简单吧,那我们扩展一下,让以后都自动连接多个WiFi网络

         多个wifi连接方法

         注意:/etc/wpa_supplicant/wpa_supplicant.conf 就是我们在/boot目录下创建的文件,启动后/boot 下的那个文件就被删除了,取而代之是现在编辑的文件

     第一步:

  •      修改/etc/wpa_supplicant/wpa_supplicant.conf,下面是我使用的配置文件:

    ctrl_interface=/var/run/wpa_supplicant
    #ap_scan=1
    
    network={
           ssid="wo_shi_yige_wifi_ssid"
           scan_ssid=1
           psk="wo_shi_mi_ma"
           priority=5
    }
    
    network={
           ssid="pi"
           psk="onlyforpi"
           priority=1
    }
    
    • **ap_scan:**1是默认值,因此我注掉了
      • 1:这个模式下总是先连接可见的WiFi,如果扫描完所有可见的网络之后都没有连接上,则开始连接隐藏WiFi。
      • 2:会按照network定义的顺序连接WiFi网络,遇到隐藏的将立刻开始连接,因此在这个模式下连接顺序不受priority影响
    • ctrl_interface:这个文件夹里面存的是一个当前使用的interface的socket文件,可以供其他程序使用读取WiFi状态信息
    • network:是一个连接一个WiFi网络的配置,可以有多个,wpa_supplicant会按照priority指定的优先级(数字越大越先连接)来连接,当然,在这个列表里面隐藏WiFi不受priority的影响,隐藏WiFi总是在可见WiFi不能连接时才开始连接。
      • ssid:网络的ssid
      • psk:密码
      • priority:连接优先级,越大越优先
      • scan_ssid:连接隐藏WiFi时需要指定该值为1
         

    第二步:   

  • 修改/etc/network/interfaces使用wpa_supplicant.conf来配置无线网络

    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    
    allow-hotplug wlan0
    auto wlan0
    iface wlan0 inet dhcp
        pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B 
    

      以后每次启动时,树莓派都会主动去连接配置文件中预定义的这些wifi网络。

    单个wifi连接可以使用以下方法

                修改/etc/network/interfaces文件,把它修改成这个样子

                  auto lo
                  iface lo inet loopback

                 auto eth0
                 iface eth0 inet dhcp

                 allow-hotplug wlan0
                 auto wlan0
                 iface wlan0 inet dhcp
                 wpa-ssid wifi名字
                 wpa-psk wifi密码

        主要是添加wpa-ssid和wpa-psk,直接把你要连接的wifi的ssid和对应密码写上就行了。

     其他方式设置见:https://www.cnblogs.com/playboysnow/p/4987103.html

9、再扩展一下,我们每次不可能获得ip都一样,所以当连接成功后将ip发送到163邮箱。

      注意:请使用python3来运行我的脚本

       第一步:在/root目录下创建163.py脚本  /root/163.py

# -*-coding:utf-8-*-
import smtplib 
from email.mime.text import MIMEText 
from email.header import Header 
import sys

SMTPserver="smtp.163.com"
Sender="自己的163账号@163.com"   #写自己的163账号
password="密码"        #写自己的邮箱密码
#类容
ip=str(sys.argv)
tet=ip
print (tet)
msg=MIMEText(tet, 'plain', 'utf-8') 

#标题
msg["Subject"]=Header(u'树莓派IP', 'utf-8').encode()
#发件人
msg["From"]=Sender 
#收件人,
msg["to"]="自己的163账号@163.com"          #也写自己的邮箱账号

mailserver=smtplib.SMTP(SMTPserver,25) 

try:
    #登录邮箱
    mailserver.login(Sender,password) 
    #发送邮件
    mailserver.sendmail(Sender,["自己的163账号@163.com"],msg.as_string()) #也写自己的邮箱账号
    mailserver.quit() 
    print ("邮件发送成功!")
except smtplib.SMTPException:
    print ("error:邮件发送失败!")

再写shell脚本来判断网络连通性/root/ping.sh,并发送邮件到自己邮箱

#!/bin/bash

while :
do
	ping -c 2 www.baidu.com  &>/dev/null
	[ $? -eq 0 ] && break
done	

a=`ifconfig wlan0 | grep broadcast`
python3 /root/163.py "wlan0:$a"
echo "ok"

10、最后就是将脚本加入开启自启程序/etc/rc.local

        在exit 0 之前加入如下代码,没有exit就直接加到后面就行        

        bash /root/ping.sh

 

测试:

      直接拔电源让树莓派重连wifi,看效果

           

     手机端app查看

            

       然后用ssh连接树莓派好像只能先用pi登录,然后才能切换root用户‘

           

        

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用Qt编写的树莓派WiFi自动连接代码,代码中使用了wpa_supplicant工具实现WiFi连接: ```c++ #include <QCoreApplication> #include <QProcess> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QProcess process; QString program = "sudo"; QStringList arguments; arguments << "wpa_supplicant" << "-B" << "-i" << "wlan0" << "-c" << "/etc/wpa_supplicant/wpa_supplicant.conf"; process.start(program, arguments); process.waitForFinished(-1); QString output = process.readAllStandardOutput(); qDebug() << output; program = "sudo"; arguments.clear(); arguments << "wpa_cli" << "-i" << "wlan0" << "scan"; process.start(program, arguments); process.waitForFinished(-1); output = process.readAllStandardOutput(); qDebug() << output; program = "sudo"; arguments.clear(); arguments << "wpa_cli" << "-i" << "wlan0" << "scan_results"; process.start(program, arguments); process.waitForFinished(-1); output = process.readAllStandardOutput(); qDebug() << output; program = "sudo"; arguments.clear(); arguments << "wpa_cli" << "-i" << "wlan0" << "list_networks"; process.start(program, arguments); process.waitForFinished(-1); output = process.readAllStandardOutput(); qDebug() << output; program = "sudo"; arguments.clear(); arguments << "wpa_cli" << "-i" << "wlan0" << "reconfigure"; process.start(program, arguments); process.waitForFinished(-1); output = process.readAllStandardOutput(); qDebug() << output; return a.exec(); } ``` 这段代码中,首先使用wpa_supplicant工具连接WiFi,然后使用wpa_cli工具扫描附近的WiFi,并列出扫描结果和已连接的网络列表,最后重新配置WiFi连接。在实际使用中,可以根据扫描结果自动连接到信号最强的WiFi网络。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值