1. 程式人生 > >一步一步玩轉樹莓派~

一步一步玩轉樹莓派~

1.樹莓派的裝機教程

步驟:

  1. 映象檔案和映象寫入SD卡工具的下載
  2. RASPBIAN系統燒錄至micro SD卡
  3. 裝置連網
  4. 外接顯示器或者SSH連線

具體:

  1. 映象檔案地址 ,選擇RASPBIAN STRETCH WITH DESKTOP 版本的ZIP檔案,這是圖形化介面版本的系統,另一個是輕量級的不帶桌面的版本;
    映象寫入SD卡工具地址,點選download下載到本地;
  2. 開啟Win32 Disk Imager,選擇下載完解壓好的.image檔案,然後寫入位置為你的SD卡即可,其他選項都用預設的不用修改,幾分鐘後即可寫入完畢,最終彈出提示是否格式化,點否!
  3. 接下來是連網過程,樹莓派自帶了網線插槽,如果選擇有線連線的方式,直接插上網線即可
    這裡主要講一下無線連線上網的方式:

將刷好 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="此處填寫:你的無線網的名稱"
psk=" 此處填寫:你的無線網的密碼"
}

為了啟用樹莓派的ssh服務,我們還需要在/boot目錄下再新建一個名稱為ssh的空檔案
!!!注意,此檔案沒有後綴名!

  1. 樹莓派自帶了HDMI插槽,所以說,有顯示器的同學,可以直接通過HDMI連線樹莓派和顯示器,然後開啟你的樹莓派之旅~
    當然,這裡更推薦採用ssh連線的方式,通過電腦遠端登入你的樹莓派主機,詳細步驟如下:
    (1)大家知道,遠端登入的話,需要知道你遠端伺服器的IP地址,所以這裡我們第一步是要獲取到樹莓派的IP地址,方法有兩種,一是登入到你的路由器閘道器(查詢路由器地址,最簡單的辦法是開啟你手機的WiFi,檢視你當前連線的WiFi的詳情,裡面的路由器的IP地址即為所求);
    (2)在電腦端進入路由器的管理介面,找到raspiberry的名稱,所對應的IP地址就是我們所找的;

補充一下,如果沒有顯示器的話,還可以下載一個開源的軟體,名為

ipscan然後一個一個的試你的樹莓派的IP地址

         (3)上述辦法是你完全不想用顯示器的時候,所採取的方法,不過我想大部分搞計算機的,都還是會買一個顯示器的,那麼我們這裡可以偷懶,稍微藉助一下顯示器,登入到樹莓派圖形介面,開啟命令列視窗,然後用 ifconfig命令檢視樹莓派IP地址;
         (4)獲取到IP地址之後,我們就可以通過ssh連線到咱們的樹莓派啦!(windows使用者可以下載putty或者xshell軟體進行登入; Linux/Mac使用者可以直接在命令列 通過 ssh [email protected]_address 遠端登入,初始預設密碼是 raspberry 你的電腦和樹莓派需要在同一個區域網,或者二者能相互ping通即可
         (5)ssh登入成功之後,輸入 sudo passwd ,修改預設的登入密碼;輸入 sudo vi /etc/hostname 修改主機名,重啟;或者直接輸入 sudo raspi-config 在圖形化介面中進行更改一系列的配置!

2. 樹莓派入門:控制LED小燈亮

  1. 連線好樹莓派的引腳、LED小燈、電阻,我這裡是把LED的負極連線pin 6(GROUND),LED的正極連線的是 pin 12;一定要串聯一個電阻,否則小燈很容易燒掉 !
          

  2. 編寫python程式,程式碼也比較簡單,如下所示:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time 
# 樹莓派上的引腳,有兩種GPIO的編號方式
# GPIO.BOARD模式是採用Z形計數法,如上圖的 1,2,3,4,5,6,7...
# GPIO.BCM模式,去掉了具有特定功能的引腳,編號為GPIO2,GPIO3,GPIO4...
# 囉嗦一句:在GPIO.BCM模式中,如果想要繫結的編號是GPIO18,那麼寫作LED_PIN = 18
GPIO.setmode(GPIO.BOARD) 	  # 1.設定編號模式;
LED_PIN = 12			  # 2.設定要繫結的pin值;
GPIO.setup(LED_PIN,GPIO.OUT) 	  # 3.設定pin的功能;
GPIO.output(LED_PIN,GPIO.HIGH)	  # 4.設定輸出為低電平還是高電平;
time.sleep(3)					  
GPIO.cleanup()			  # 5.程式執行結束,清空所有GPIO的配置

3. 樹莓派進階:LCD顯示屏顯示資訊(python實現)

      我這裡是參考了這篇文章,這是一份提交在Github上面的程式碼,提供一個Demo,有興趣的可以點進去檢視與收藏。

  1. 第一步還是連線裝置,我這裡買的是4pin版本的LCD顯示屏,如圖:
             

#1 Connect GND to GROUND. (Pin 6)
#2 Connect VCC to 5V. (Pin 2)
#3 Connect SDA to GPIO.(Pin 3)參考GPIO介面圖,這是固定的pin
#4 Connect SCL to GPIO. (Pin 5)參考GPIO介面圖,這是固定的pin

  1. 通過ssh登入到你的樹莓派主機,或者在樹莓派系統中開啟終端,安裝下面的包。

sudo apt-get update -y && sudo apt-get install python-smbus git i2c-tools -y

  1. 編輯 modules file

sudo nano /etc/modules

  1. 開啟的檔案中,對比下面的內容,沒有的內容則補充進去
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835     # This enables GPIO pins on the pi.
i2c-dev         # This enables i2c communication.
  1. 檢查黑名單中是否有i2c-bcm2708,如果有的話,則#註釋掉;開啟黑名單命令如下

sudo vi /etc/modprobe.d/raspi-blacklist.conf

  1. 輸入 sudo raspi-config命令,在開啟的圖形化介面中,選擇 5 Interfacing Options選項,進去之後 enable I2C這個服務;
  2. 下載Github上的程式碼到你的本地
  1. 執行Demo裡的python檔案 demo_lcd.py

4. 樹莓派進階:基於MQTT協議實現遠端控制(python實現&&Android實現)

  1. MQTT通訊的三要素

  2. 基於Python實現MQTT通訊

  3. 基於Android實現MQTT通訊

具體:

  1. MQTT通訊的三要素是訊息訂閱方、訊息釋出方、訊息中介軟體。

 

  1. 基本流程:訊息訂閱方首先連線到訊息代理,然後訂閱代理伺服器上的某些主題,並保持監聽狀態;訊息釋出方也是連線到代理伺服器,然後朝某個主題傳送訊息;訊息代理接收到訊息之後,查詢訂閱了該主題的伺服器,再把訊息轉發過去;

  2. 需要說明一下的是,訊息釋出方和訊息訂閱方可以用不同的語言實現,我分別實現了兩個Demo,一個demo是釋出方和訂閱方都是python實現,另一個demo是python釋出訊息,Android APP接收訊息,本文結尾會附上程式碼;

  3. 我們在實現MQTT通訊的時候,第一件事是構建訊息中介軟體(代理),也就是所謂的Broker,這一部分的實現比較簡單,我們可以直接在伺服器上部署Mosquitto開源訊息代理元件,根據自己代理伺服器的作業系統,在連結介面選擇對應的並安裝。這裡再給一個CentOS安裝Mosquitto教程要注意的是,一定要關閉伺服器上的防火牆服務,否則哪怕是安裝成功了訊息代理服務,我們的客戶端也還是會連不上代理伺服器

  4. 基於python實現MQTT通訊(我這裡用的是這個開源框架

     (1)訊息訂閱方的實現程式碼 mqtt_sub.py

# 使用之前 pip install paho-mqtt
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    # Subscribing in on_connect() means that if we lose the connection and
    # reconnect then subscriptions will be renewed.    
    client.subscribe("/jianghui/test")
    
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))
    if(msg.payload == "hello world"):
    	print("hello world!")
 
 client = mqtt.Client()
 client.on_connect = on_connect
 client.on_message = on_message
 client.connect("your broker's ip_adress", 1883, 60)
 
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()

     (2)訊息釋出方的實現程式碼 mqtt_pub.py

#-*- coding: UTF-8 -*- 
import paho.mqtt.publish as publish
publish.single("/jianghui/test", "hello world", hostname="your broker's ip_adress")
print("publish successfully!")

     (3)程式碼測試
        開啟兩個ssh連線你的樹莓派伺服器的會話,在會話一中執行 python mqtt_sub.py 命令,如果Shell視窗輸出 Connected with result 0,那就說明訂閱主題成功,處於監聽狀態,否則說明broker的配置出了問題,或者mqtt_sub.py程式碼有問題;
        在會話二中執行 python mqtt_pub.py 命令,輸出 publish successfully! 就說明發布訊息出錯,遇到其他錯誤,直接Google解決 ~

  1. 基於Android實現MQTT通訊(我參考了這篇部落格)上面給的部落格連結中,給出了詳細的步驟說明,此處不再贅述,但是上面的部落格只給了程式碼的講解,具體實現請看我這裡,程式碼下載,已測試成功,有疑問歡迎評論或者私信交流。