步驟1:連接
EzTemp使用串行端口在您的Raspberry Pi上進行通信。
確定Raspberry Pi上的串行引腳。然后將:
RPi GND連接到EzTemp GND。
RPi Tx到EzTemp Rx。
RPi Rx到EzTemp Tx。
RPi 3.3V至EzTemp 3.3V。
請注意,Tx引腳必須連接到Rx引腳,反之亦然。
現在您可以使用EzTemp!
[您可以在Tindie上獲得EzTemp]
步驟2:禁用串行控制臺
默認情況下,Raspberry Pi使用串行端口作為外殼程序。正如MarcR在評論中所指出的(感謝提示),我們需要禁用串行控制臺才能使用EzTemp。
方法1:raspi-config腳本
最簡單的方法通過運行raspi-config腳本來禁用串行控制臺。打開外殼并鍵入:
sudo raspi-config
它將顯示一個菜單,只需轉到 8 Advanced Options》 A7 Serial ,然后選擇 否 。
現在重新啟動Pi并轉到下一步。
方法2:自動腳本
我們可以使用 rpi-serial-console 腳本禁用和啟用串行控制臺。要安裝它,請打開外殼并鍵入:
sudo wget https://raw.githubusercontent.com/lurch/rpi-serial-console/master/rpi-serial-console -O /usr/bin/rpi-serial-console && sudo chmod +x /usr/bin/rpi-serial-console
要顯示當前是否啟用了串行控制臺,只需運行:
rpi-serial-console status
To禁用串行控制臺,只需運行:
sudo rpi-serial-console disable
要啟用串行控制臺,只需運行:
sudo rpi-serial-console enable
在啟用或禁用串行控制臺后,您可以
方法3:手動
然后用您喜歡的編輯器打開此文件:
sudo nano /boot/cmdline.txt
它的內容應該是這樣的:
dwc_otg.lpm_enable=0 console=tty1 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
刪除對ttyAMA0的任何引用,得到這樣的內容:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
保存更改,然后打開inittab:
sudo nano /etc/inittab
在文件末尾,注釋掉以下行:
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
重新啟動Pi并轉到下一步。
[您可以在Tindie上獲得EzTemp]
步驟3:下載示例腳本
在Raspberry Pi上,您必須下載此腳本。您可以打開外殼并輸入以下內容:
wget https://raw.githubusercontent.com/CAIMANICS/EzTempRH-for-Raspberry-Pi/master/software/EzTempRH.py
現在運行腳本輸入:
python EzTempRH.py
就是這樣!您正在運行EzTemp。
EzTemp&RH build 2
Temperature: 24.0C
Humidity: 48.0%
External: 1018 / 2048 counts
Version: 2
讓我們看看如何在程序中使用它。
[您可以在Tindie上獲得EzTemp]
第4步:修補程序
在這里,我們將分析腳本的各個部分,以便您可以理解它,并針對項目進行修改
首先,我們需要打開串行端口。該腳本使用PySerial模塊執行此操作。
import serial
ser = serial.Serial(‘/dev/ttyAMA0’, 9600, timeout=1)
現在,讓我們在傳感器中查詢構建值。這是一個靜態值,用于標識EzTemp的版本。
首先,我們需要向EzTemp發送命令‘v’:
ser.write(“v”)
構建值是2字節的值,因此我們應該期望EzTemp提供4字節(1字節回聲+ 2字節構建+ 1字節校驗和)的響應。現在,讀取響應:
s = ser.read(4)
盡管構建標識符是2字節的值,但數據是以單獨的字節接收的。要“重構”它,我們必須將最高有效字節向左移8位,然后添加最低有效字節。這樣,我們可以正確地恢復2字節的字段:
version = (ord(s[1]) 《《 8) + ord(s[2])
每次從EzTemp收到2字節的值時,都可以使用上面的句子。
最后一行此塊的代碼只是在屏幕上打印結果:
print ‘EzTemp&RH build ’ + str(version)
腳本的其余部分從EzTemp中查詢傳感器值相同。讓我們以溫度值為例:
ser.write(“d”)
s = ser.read(4)
temperature = (ord(s[1]) 《《 8) + ord(s[2])
print‘Temperature:’+ str(1.0 * temperature/10)+‘C’
在這種情況下,我們使用命令“ d”以攝氏0.1度的精度查詢溫度。如您所見,響應的捕獲非常相似。區別在于如何處理返回的值。
當我們以0.1精度查詢溫度或任何其他參數時,數據將以2個字節的整數形式接收,占該值的十分之一。也就是說,如果溫度為21.5oC,則EzTemp會收到值215,并且用戶腳本必須除以10才能獲得實際溫度。
如果不需要,所有值都具有整數精度命令。小數點。使用這些命令簡化了讀取和處理返回數據的過程。檢查數據表中完整的命令列表。
-
傳感器
+關注
關注
2565文章
52954瀏覽量
767010 -
樹莓派
+關注
關注
121文章
2001瀏覽量
107415
發布評論請先 登錄
評論