讓你的樹莓派自動連上WiFi,並告訴你地址

週一的時候樹莓派總算是到手了,很早之前就瞭解過了,心裏長草很多年,但就是一直沒出手。最近在搞Arduino的小玩意,我們做的這個東西需要網絡通信(一個可以遠程控制的機器人小車),必須要藉助上位機(一臺android手機)的網絡來接受命令,真想再給它再上一塊WiFi擴展板,把手機扔了。然後就突然想起了這貨,樹莓派基於linux的只有信用卡的大小計算機。你可以把這貨當成一個正常linux服務器就是,基本上你平時在linux上能做到的事情,它都能做到,比如當成rails服務器,在上面運行rails程序什麼的(不過我沒試,應該是可以的,sinatra可以)。然後這貨有usb口,再然後插上你在某寶買的usb無線網卡,它就可以用WiFi了。下面是我第一次,第二次以及第n次連上WiFi的過程。

第一次連上WiFi

第一次連wifi之前,你需要做一件事情,那就是打開樹莓派的terminal(俗稱命令行),你有兩種選擇:

  • 通過HDMI連個顯示器,再接個USB接個鍵盤,然後你就可以像用一臺普通的pc一樣用樹莓派了
  • 插個網線,通過樹莓派的ip地址ssh進去。

    ssh pi@your_raspi_ip
    #password: raspberry
    

我是通過插網線的方式進去的,這個方法比較麻煩的地方是,你得去找到樹莓派從DHCP的獲取到的ip(當然能設靜態ip又是另一回事了)。我是在自己家連,可以從路由器的客戶端列表裏面找到樹莓派的ip。

在進到terminal後,你就可以開始安裝軟件,修改配置了

  1. 可能需要安裝的軟件(因爲我拿到手的時候,發現系統裏已經有了,不知道是某寶的親幫我裝的,還是raspbian已經預裝了)

    sudo apt-get install wireless-tools
    
  2. 然後可以開始配置網絡了,修改/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 YOUR-SSID-HERE
        wpa-psk YOUR-PASSWORD-HERE
    

    主要是添加wpa-ssid和wpa-psk,直接把你要連接的wifi的ssid和對應密碼寫上就行了。

  3. 重啓網絡

    /etc/init.d/networking restart
    # or: service networking restart
    

    然後你應該就已經連上wifi了,如果沒有連上:

    1. 檢查時候你要連接的wifi是不是隱藏的WiFi(不廣播自己的ssid的WiFi網絡),這種配置方法沒辦法連接隱藏的WiFi。通過下面的命令檢查你要連的WiFi是不是在列表裏:
      iwlist wlan0 scan
    2. 檢查你的ssid和密碼是否正確!!!
    3. 檢查你要連的wifi網絡是否正常,檢查你的USB無線網卡是不是正常
    4. 如果還連不上就google吧,我也無能爲力了

這樣的配置在你重新啓動樹莓派後也能自動連接這個WiFi,這裏連接WiFi使用的是wpa_supplicant

自動連接多個WiFi網絡

當你經常切換到不同WiFi網絡中時,你可以配置多個WiFi網絡,讓樹莓派能自動連接到可用WiFi網絡中。這裏就要用到高大上的wpa_supplicant.conf了

  1. 修改/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
  2. 修改/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網絡。

在這個配置裏面有一個ssid=’pi’網絡,這是一個最低優先級網絡,是用來在陌生網絡中配置樹莓派的。當處在一個樹莓派配置裏面的沒有的WiFi網絡中時,我會自己創建一個叫pi的WiFi,當其他網絡都不可用時,樹莓派連到這個網絡裏,然後我便可以ssh進樹莓派,添加網絡配置,然後重啓,就可以讓樹莓派加入到新的網絡中。

讓樹莓派告訴你它的IP(軟件的方式)

那麼如何在你的樹莓派加入新的網絡後獲取到它當前的ip地址呢?因爲你在重新配置樹莓派的網絡並重啓後,你跟樹莓派的連接會斷掉,因此你需要知道樹莓派在新網絡中的ip,從而使你能重新連接到樹莓派。在網上很多免費提供的域名解析服務,你可以某個域名解析成你設置的ip地址。每次樹莓派啓動後都會更新自己的域名對應的ip,我是用的DNSDynamic提供的服務,進行簡單的設置就OK了。

  1. 註冊賬號~~~~
  2. 設置一個啓動腳本來獲取本機ip並且更新到DNSDynamic上:

    • 修改/etc/rc.local,添加如下內容:

      IP=`hostname -I`
      EMAIL=your_username_in_dnsdynamic
      PASSWORD=your_password
      DOMAIN=your_registered_domain.dnsdynamic.com
      curl -v --user "$EMAIL:$PASSWORD" -k "https://www.dnsdynamic.org/api/?hostname=$DOMAIN&myip=$IP" > /var/log/update-dns.log 2>&1
      

腳本後面的內容是調用dnsdynamic提供的api更新域名對應的ip地址

每一次樹莓派啓動之後都會執行這個腳本更新自己的ip地址,也可以將這段腳添加到cron job裏定時更新ip,但是感覺好像沒有必要。

  1. 之後你就不用管ip地址了,可以通過域名直接ssh進樹莓派:

    ssh pi@your_registered_domain.dnsdynamic.com
    

總結

上面的提供的方案其實一定程度依賴於網絡(internet),如果樹莓派連接到的wifi是沒有internet連接的,那麼就沒辦法通過dnsdynamic更新ip了,那麼我們也就沒有辦法獲取到它當前的ip,除非它使用靜態ip.
在failover的網絡(上面設置的名叫pi的wifi)設置上也可以通過另一個方式,就是在樹莓派啓動之後可以自己開啓一個wifi AP,然後我們可以連接進去,進而做各種設置,arduino最新的板子arduino yun就是通過這種方式進行設置的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章