树莓派与Arduino串口通讯获取DH11温湿度
本文記錄了在樹莓派開發(fā)時,通過串口獲得Arduino開發(fā)板上采集到的溫濕度,并顯示在樹莓派上,使用python讀取Arduino串口的數(shù)據(jù),獲得溫濕度采集器采集到的溫濕度,然后在樹莓派上做數(shù)據(jù)處理;
需要的庫文件DHT.h,如果運(yùn)行報錯,請先添加這個庫文件,下載地址:https://github.com/adafruit/DHT-sensor-library
下載的文件中只要包含 .h 和 .cpp 文件即可,多余的可以刪掉,用不到
Arduino代碼:
運(yùn)行時如果報/x86或者ASCII碼無法解析錯誤。可以將代碼中的中文全部換成英文,就不會錯了,可能是因為無法識別中文
#include <DHT.h>#define DHTPIN 3 #define DHTTYPE DHT11DHT 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)前的溫度,單位Cfloat f = dht.readTemperature(true);//讀取當(dāng)前的溫度,單位F// 如果讀取失敗則退出,再讀取一次if (isnan(h) || isnan(t) || isnan(f)) {Serial.println("Failed to read from DHT sensor!");return;}// 讀取體感溫度,單位Ffloat hif = dht.computeHeatIndex(f, h);// 讀取體感溫度,單位Cfloat 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");}}}然后可以在串口助手中進(jìn)行測試,我這里因為項目需要,將GET TH 改為了數(shù)字8,并且修改了一下輸出,下面你們可以看到我做的更改,應(yīng)該更符合同學(xué)們對數(shù)據(jù)處理的要求,這里你們在測試時仍然可以輸入GET TH進(jìn)行測試:
樹莓派代碼(python):
需要先安裝python串口讀取的庫文件:pip install pyserial
(如果已經(jīng)安裝過了則忽略)
找到Arduino的串口地址:/dev/ttyACM0
如果要單截取采集到的溫濕度,對數(shù)據(jù)進(jìn)行處理,而不需要打印所有信息,我們可以在python和Arduino做如下更改:
首先在Arduino中,我們不需要像串口打印那么多數(shù)據(jù),只取我們需要的溫濕度,像這樣(效果同上面的GIF):
Serial.print("hum: ");Serial.print(h);Serial.print("tem: ");Serial.println(t);// 打印出效果如下:hum: 33.0tem: 25.00然后在python中,我們通過字符串截取,取到我們的溫濕度,這里我們截取兩位整數(shù)
response = str(single.readline().decode())if response.startswith('hum:'):#截取整數(shù)部分hum = response[5:7] #33tem = response[-6:-3] # 25# 將處理后的數(shù)據(jù)放在templateData 中templateData = {'tem': tem,'hum': hum}print(response.strip('\n'))到這里我們就做好了簡單的數(shù)據(jù)處理,更多的操作可以自己根據(jù)需求去修改
總結(jié)
以上是生活随笔為你收集整理的树莓派与Arduino串口通讯获取DH11温湿度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python animation 轨迹_
- 下一篇: 用sharesdk第三方等陆或分享到QQ