日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派与Arduino串口通讯获取DH11温湿度

發布時間:2024/3/12 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派与Arduino串口通讯获取DH11温湿度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文記錄了在樹莓派開發時,通過串口獲得Arduino開發板上采集到的溫濕度,并顯示在樹莓派上,使用python讀取Arduino串口的數據,獲得溫濕度采集器采集到的溫濕度,然后在樹莓派上做數據處理;
需要的庫文件DHT.h,如果運行報錯,請先添加這個庫文件,下載地址:https://github.com/adafruit/DHT-sensor-library
下載的文件中只要包含 .h 和 .cpp 文件即可,多余的可以刪掉,用不到

Arduino代碼:

運行時如果報/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秒,不然不準確)delay(2000);// 從串口讀數據并判斷if (Serial.available() > 0) {if ( Serial.find(target)) {// 獲取溫度或者濕度需要250毫秒!// 傳感器獲取到的溫度和濕度可能是2秒內的float h = dht.readHumidity();// 讀取當前的濕度float t = dht.readTemperature(); // 讀取當前的溫度,單位Cfloat f = dht.readTemperature(true);//讀取當前的溫度,單位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");}}}

然后可以在串口助手中進行測試,我這里因為項目需要,將GET TH 改為了數字8,并且修改了一下輸出,下面你們可以看到我做的更改,應該更符合同學們對數據處理的要求,這里你們在測試時仍然可以輸入GET TH進行測試:

樹莓派代碼(python):

需要先安裝python串口讀取的庫文件:pip install pyserial
(如果已經安裝過了則忽略)
找到Arduino的串口地址:/dev/ttyACM0

import serial ser = serial.Serial('/dev/ttyACM0', 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()

如果要單截取采集到的溫濕度,對數據進行處理,而不需要打印所有信息,我們可以在python和Arduino做如下更改:

首先在Arduino中,我們不需要像串口打印那么多數據,只取我們需要的溫濕度,像這樣(效果同上面的GIF):

Serial.print("hum: ");Serial.print(h);Serial.print("tem: ");Serial.println(t);// 打印出效果如下:hum: 33.0tem: 25.00

然后在python中,我們通過字符串截取,取到我們的溫濕度,這里我們截取兩位整數

response = str(single.readline().decode())if response.startswith('hum:'):#截取整數部分hum = response[5:7] #33tem = response[-6:-3] # 25# 將處理后的數據放在templateData 中templateData = {'tem': tem,'hum': hum}print(response.strip('\n'))

到這里我們就做好了簡單的數據處理,更多的操作可以自己根據需求去修改

總結

以上是生活随笔為你收集整理的树莓派与Arduino串口通讯获取DH11温湿度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。