一步一步玩轉樹莓派~
1.樹莓派的裝機教程
步驟:
- 映象檔案和映象寫入SD卡工具的下載
- RASPBIAN系統燒錄至micro SD卡
- 裝置連網
- 外接顯示器或者SSH連線
具體:
- 映象檔案地址 ,選擇RASPBIAN STRETCH WITH DESKTOP 版本的ZIP檔案,這是圖形化介面版本的系統,另一個是輕量級的不帶桌面的版本;
映象寫入SD卡工具地址,點選download下載到本地; - 開啟Win32 Disk Imager,選擇下載完解壓好的.image檔案,然後寫入位置為你的SD卡即可,其他選項都用預設的不用修改,幾分鐘後即可寫入完畢,最終彈出提示是否格式化,點否!
- 接下來是連網過程,樹莓派自帶了網線插槽,如果選擇有線連線的方式,直接插上網線即可
這裡主要講一下無線連線上網的方式:
將刷好 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的空檔案
!!!注意,此檔案沒有後綴名!
- 樹莓派自帶了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小燈亮
-
連線好樹莓派的引腳、LED小燈、電阻,我這裡是把LED的負極連線pin 6(GROUND),LED的正極連線的是 pin 12;一定要串聯一個電阻,否則小燈很容易燒掉 !
-
編寫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,有興趣的可以點進去檢視與收藏。
- 第一步還是連線裝置,我這裡買的是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
- 通過ssh登入到你的樹莓派主機,或者在樹莓派系統中開啟終端,安裝下面的包。
sudo apt-get update -y && sudo apt-get install python-smbus git i2c-tools -y
- 編輯 modules file
sudo nano /etc/modules
- 開啟的檔案中,對比下面的內容,沒有的內容則補充進去
# /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.
- 檢查黑名單中是否有i2c-bcm2708,如果有的話,則#註釋掉;開啟黑名單命令如下
sudo vi /etc/modprobe.d/raspi-blacklist.conf
- 輸入 sudo raspi-config命令,在開啟的圖形化介面中,選擇 5 Interfacing Options選項,進去之後 enable I2C這個服務;
- 下載Github上的程式碼到你的本地
- 執行Demo裡的python檔案 demo_lcd.py
4. 樹莓派進階:基於MQTT協議實現遠端控制(python實現&&Android實現)
-
MQTT通訊的三要素
-
基於Python實現MQTT通訊
-
基於Android實現MQTT通訊
具體:
- MQTT通訊的三要素是訊息訂閱方、訊息釋出方、訊息中介軟體。
-
基本流程:訊息訂閱方首先連線到訊息代理,然後訂閱代理伺服器上的某些主題,並保持監聽狀態;訊息釋出方也是連線到代理伺服器,然後朝某個主題傳送訊息;訊息代理接收到訊息之後,查詢訂閱了該主題的伺服器,再把訊息轉發過去;
-
需要說明一下的是,訊息釋出方和訊息訂閱方可以用不同的語言實現,我分別實現了兩個Demo,一個demo是釋出方和訂閱方都是python實現,另一個demo是python釋出訊息,Android APP接收訊息,本文結尾會附上程式碼;
-
我們在實現MQTT通訊的時候,第一件事是構建訊息中介軟體(代理),也就是所謂的Broker,這一部分的實現比較簡單,我們可以直接在伺服器上部署Mosquitto開源訊息代理元件,根據自己代理伺服器的作業系統,在連結介面選擇對應的並安裝。這裡再給一個CentOS安裝Mosquitto教程。要注意的是,一定要關閉伺服器上的防火牆服務,否則哪怕是安裝成功了訊息代理服務,我們的客戶端也還是會連不上代理伺服器;
-
基於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解決 ~