本文記錄通過樹莓派USB連接Arduino進(jìn)行通訊的過程如暖。
實(shí)現(xiàn)的功能:
Arduino上連接機(jī)智云GoKit開發(fā)套件,獲取DH11溫度與濕度返回給樹莓派忌堂。
原材料:
樹莓派b3+
Arduino Uno R3
Arduino代碼編寫
首先我們需要調(diào)用DHT獲取溫度濕度數(shù)據(jù)
#include <DHT.h>
#define DHTPIN 3
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
dht.begin();
Serial.println("Hi Vcancy. Arduino is running...");
}
/**
Arduino loop
@param none
@return none
*/
char target[] = "GET TH";
void loop() {
// 每次等待2秒后再輸出(這里必須等大于1秒盒至,不然不準(zhǔn)確)
delay(2000);
// 從串口讀數(shù)據(jù)并判斷
if (Serial.available() > 0) {
if ( Serial.find(target)) {
// 獲取溫度或者濕度需要250毫秒!
// 傳感器獲取到的溫度和濕度可能是2秒內(nèi)的
float h = dht.readHumidity();// 讀取當(dāng)前的濕度
float t = dht.readTemperature(); // 讀取當(dāng)前的溫度,單位C
float f = dht.readTemperature(true);//讀取當(dāng)前的溫度,單位F
// 如果讀取失敗則退出枷遂,再讀取一次
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// 讀取體感溫度樱衷,單位F
float hif = dht.computeHeatIndex(f, h);
// 讀取體感溫度,單位C
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("濕度: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("溫度: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t");
Serial.print("體感溫度: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *F");
}
}
}
串口調(diào)試:輸入 "GET TH"酒唉,串口返回?cái)?shù)據(jù)
樹莓派
樹莓派USB連接到Arduino
ls /dev
找到Arduino的串口地址:/dev/ttyUSB0
編寫一個(gè)python程序矩桂,調(diào)用串口獲取數(shù)據(jù)。
安裝pyserial痪伦,串口庫(kù)
pip install pyserial
編寫一個(gè)python腳本
import serial
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
try:
while 1:
ser.write(b"GET TH")
response = str(ser.readline().decode())
if response.startswith('濕度:'):
print(response.strip('\n'))
except KeyboardInterrupt:
ser.close()