1、溫濕度傳感器使用概述
土壤溫濕度傳感器是將土壤水分和土壤溫度傳感器集中于一體,具有攜帶方便,密封,高精度等優點,是土壤墑情,土壤溫度測量的理想選擇。本文采用德國 Heraeus 公司進口 A 級 ST-1-PT1000傳感器通過RS485轉接板轉換成TTL信號接在九聯開發板的TTL 接口(ttyS01),從硬件上來講完全可以接在開發板的485接口,但是目前切換USB還有點問題,所以先使用轉接板后期再直接連接到485端口。
1.1 傳感器RS485串口設置
標準 Modbus-RTU 協議,波特率:9600;校驗位:無;數據位:8;停止位:1
1.2 溫濕度數據轉換
土壤溫濕度傳感器在土壤飽和含水率范圍內具有良好的線性特征,以下是典型的標定公式,用戶可以參考使用,如果要獲得更高精度,需進行二次標定。

1.3 溫濕度串口數據協議
1.3.1 修改傳感器地址

若傳感器接收正確,數據按原路返回。
備注:如果忘記傳感器的原地址,可以使用廣播地址0XFE代替,使用0XFE時主機只能接一個從機,且返回地址仍為原地址,可以作為地址查詢的方法。
1.3.2 查詢傳感器數據
查詢傳感器(地址為1)的數據(土壤溫度,土壤濕度),主機→從機

若傳感器接收正確,返回以下數據,從機→主機

PC機測試
實驗之前可以先找個USB 轉串口,先在PC機上做一些簡單的協議測試,如下是使用ModeBusRTU調試工具查詢傳感器數據:

2、九聯開發板和傳感器的硬件連接
硬件清單:
-
九聯開發板
-
485 溫濕度傳感器
-
12V傳感器供電電源
-
485轉TTL 小板子
-
杜邦線若干
溫度傳感器-> 485轉TTL小板子 -> 九聯開發板TTL 接口(ttySL0)

3、DEMO流程
本次實驗包括了源碼文件修改,編譯,下載,上板測試。
3.1 源碼文件解析及修改
移植倉庫中的UART代碼到開發板中,源代碼倉庫如下:
https://gitee.com/openharmony/vendor_unionman/tree/master/unionpi_tiger/sample/hardware/gpio
首先把uart的整個文件夾拷貝到某個目錄下,我這里復制都openhamony/vendor/uniopi/unionpi_tiger/sample/hardware/下面,并在/openharmony/device/unionpi/a311d/BUILD.gn文件中增加該文件的路徑。如下:
-
在main.c文件中根據自己的需要增加代碼,我這里做的測試是給傳感器發送一個查詢數據的指令,然后把傳感器返回的數據打印出來。
3.1.1 打開串口
在這里可以定義使用哪個串口
`
(左右移動查看全部內容)
打開串口
char *uart_dev = UART_TTL_NAME;
fd = open(uart_dev, O_RDWR);
(左右移動查看全部內容)
3.1.2 初始化串口設置
ret = uart_init(fd, 9600L);`
// 設置波特率
int uart_init(int fd, int uartBaud)
{
set_baud(fd, conver_baudrate(uartBaud));
// uart param /
if (set_params(fd, 8L, 1, 'n')) {
printf("Set uart parameters fail.
");
return -1;
}
return 0;
}
(左右移動查看全部內容)
3.1.3 讀寫串口
串口的讀寫與普通文件一樣,使用read,write函數
read(fd, buf ,8);
write(fd,buff,8);
(左右移動查看全部內容)
main 修改demo
以下給出一個溫濕度模塊數據查詢和顯示的例子:
static int fd;
// 從串口讀的線程
void *_serial_input_task(void)
{
int i = 0;
int j = 0;
int ret = -1;
int buf = 0;
int recv[4] = {0};
char cmd_buf1[] = { 0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B};
printf("temperature Sensor Ready!
");
while (1) {
//------------向urat發送數據查詢數據-------------------
for (i = 0; i < 8; i++)
printf("%#X ", cmd_buf1[i]);
count = write(fd, cmd_buf1, 9);
if (count != 9) {
printf("send failed
");
return -1;
}
//------------等待傳感器返回數據-------------------
for (i = 0; i < 9 ; i++) {
ret = read(fd, &buf, 1);
//ret = data_proce(recv);
printf("%#X ", ret);
if (ret == -1) {
printf("data process error
");
exit(0);
}
}
}
int main(int argc, char **argv)
{
char *uart_dev = UART_TTL_NAME;
int ret = -1;
fd = open(uart_dev, O_RDWR);
if (fd == -1) {
printf("open file error
");
return ERR;
}
ret = uart_init(fd, 9600L);
if (ret == -1) {
printf("uart init error
");
return ERR;
}
// 創建線程 一直執行讀操作
pthread_t pid_t;
pthread_create(&pid_t, NULL, (void *)_serial_input_task, 0);
while (1) {}
close(fd);
return 0;
}
(左右移動查看全部內容)
3.2 編譯,下載,測試
開發板上電之后串口進入/bin 目錄下 執行./uart_test

程序啟動之后會發送一串查詢指令給傳感器,并將接收到的數據打印出來,并從數據包中解析出溫度和濕度的讀值。
-
這是接到到的數據包
0X10X30X400XE400X1F0XFB0XCC -
這是溫度值
temprature now is0XE4
-
這是濕度值
humidity now is 0X1F
總結
本文主要使用了串口來查詢溫濕度傳感器數據,主要包含的串口的讀寫功能測試,以及溫度傳感器的數據包解析。源碼編譯的要點基本再GPIO編譯測試里面都有提到。另外還有個問題,串口原來的計劃是使用485接口來調試,485串口需要切換到USB2.0,根據倉庫里的說明并沒有操作成功,這部分后面還需要再研究一下。
計劃接下來的工作是把485傳感器聯動GPIO信號。GPIO外接繼電器驅動用電設備。當溫濕度超過設置的閾值觸發用電設備工作。
更多熱點文章閱讀
- 最新爆料!RK3588 適配 OpenHarmony 的新進展
- 移植speexdsp到OpenHarmony標準系統②
- 移植speexdsp到OpenHarmony標準系統③
- 移植speexdsp到OpenHarmony標準系統④
-
證通電子人臉支付終端設備ZT8623通過OpenHarmony兼容性測評
提示:本文由電子發燒友社區發布,轉載請注明以上來源。如需社區合作及入群交流,請添加微信EEFans0806,或者發郵箱liuyong@huaqiu.com。
原文標題:九聯科技Unionpi Tiger開發板體驗:使用串口調試土壤溫濕度傳感器
文章出處:【微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
-
電子發燒友
+關注
關注
34文章
591瀏覽量
34133 -
開源社區
+關注
關注
1文章
95瀏覽量
798
原文標題:九聯科技Unionpi Tiger開發板體驗:使用串口調試土壤溫濕度傳感器
文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
HDC2010:低功耗溫濕度數字傳感器的卓越之選
HDC2080數字傳感器:高精度、低功耗的溫濕度監測解決方案
HDC2021高精度溫濕度傳感器:特性、應用與設計要點
HDC3120高精度溫濕度傳感器:設計與應用全解析
2025溫濕度變送器選購指南與傳感器應用方案解析
【瑞薩RA6E2地奇星開發板試用】SHT30傳感器串口調試學習和驗證
應用于智能門鎖的溫濕度傳感器解決方案
溫濕度傳感器HTU31D在溫濕度控器中的應用優勢
【上海晶珩睿莓1開發板試用體驗】Home Assistant 物聯網溫濕度計
中科銀河芯GXHT30溫濕度傳感器的卓越性能
零知開源——STM32F407VET6驅動SHT41溫濕度傳感器完整教程
九聯科技Unionpi Tiger開發板體驗:使用串口調試土壤溫濕度傳感器
評論