九联科技Unionpi Tiger开发板体验:使用串口调试土壤温湿度传感器

描述

 

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、九联开发板和传感器的硬件连接

硬件清单:

  1. 九联开发板

  2. 485 温湿度传感器

  3. 12V传感器供电电源

  4. 485转TTL 小板子

  5. 杜邦线若干

 

温度传感器-> 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 打开串口

在这里可以定义使用哪个串口

`#define UART_TTL_NAME "/dev/ttyS1"`

(左右移动查看全部内容)

 

打开串口

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

以下给出一个温湿度模块数据查询和显示的例子:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "serial_uart.h"


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开发板体验:使用串口调试土壤温湿度传感器

文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分