用Linux树莓派来读取JY61的串口数据

## 简述

  有很多的小伙伴说用Linux树莓派来读取JY61的串口数据不知道怎么操作。今天我和大家分享下我是从三个方面分享的。1、JY61和树莓派的连接方式及VNC的使用;2、下载到树莓派的程序是如何编写的;3、结果展示

## 1、JY61和树莓派的连接方式及VNC的使用

## 1.1给树莓派 连接电源和网线


## 1.2连接上树莓派和JY61的模块

注意六合一串口模块拨码1为ON、拨码2为OFF,开关S1置other ;

JY61模块跟六合一串口模块引脚需要一一对应

VCC对3V3

RX对TX

TX对RX

GND对GND


## 1.3 下载VNC

前往官网下载VNC,官网地址:https://www.realvnc.com/en/

软件安装步骤参考官网安装步骤,在下载的文件夹VNC Viewer中打开vncviewer.exe


在这里输入树莓派的ip地址(可通过ip搜索器搜索,选择ip名为raspberrypi的ip地址)

(## IP搜索器可自行百度下载)

## 1.4 登陆VNC

输入账号密码, 账号:**** 密码:**** 账号密码参考自己的树莓派资料


## 1.5 把代码拷贝到VNC


## 1.6 拷贝文件位置


1.7终端运行

注:右键可打开终端

终端中的Desktop文件夹即为桌面

编辑:gcc Uart61Demo.cpp -o Uart61Demo

运行:./ Uart61Demo


## 2 程序编写

程序一共包括串口打开部分、串口设置、JY61数据接收与处理、主程序的运行。

## 2.1 串口打开

```cpp

int uart_open(int fd,const char *pathname)

{

    fd = open(pathname, O_RDWR|O_NOCTTY);

    if (-1 == fd)

    {

        perror("Can't Open Serial Port");

return(-1);

}

    else

printf("open %s success!\n",pathname);

    if(isatty(STDIN_FILENO)==0)

printf("standard input is not a terminal device\n");

    else

printf("isatty success!\n");

    return fd;

}

```

## 2.2 串口设置

```cpp

int uart_set(int fd,int nSpeed, int nBits, char nEvent, int nStop)

{

    struct termios newtio,oldtio;

    if  ( tcgetattr( fd,&oldtio)  !=  0) { 

      perror("SetupSerial 1");

  printf("tcgetattr( fd,&oldtio) -> %d\n",tcgetattr( fd,&oldtio));

      return -1;

    }

    bzero( &newtio, sizeof( newtio ) );

    newtio.c_cflag  |=  CLOCAL | CREAD; 

    newtio.c_cflag &= ~CSIZE; 

    switch( nBits )

    {

    case 7:

      newtio.c_cflag |= CS7;

      break;

    case 8:

      newtio.c_cflag |= CS8;

      break;

    }

    switch( nEvent )

    {

    case 'o':

    case 'O':

      newtio.c_cflag |= PARENB;

      newtio.c_cflag |= PARODD;

      newtio.c_iflag |= (INPCK | ISTRIP);

      break;

    case 'e':

    case 'E':

      newtio.c_iflag |= (INPCK | ISTRIP);

      newtio.c_cflag |= PARENB;

      newtio.c_cflag &= ~PARODD;

      break;

    case 'n':

    case 'N':

      newtio.c_cflag &= ~PARENB;

      break;

    default:

      break;

    }

    /*设置波特率*/

switch( nSpeed )

    {

    case 2400:

      cfsetispeed(&newtio, B2400);

      cfsetospeed(&newtio, B2400);

      break;

    case 4800:

      cfsetispeed(&newtio, B4800);

      cfsetospeed(&newtio, B4800);

      break;

    case 9600:

      cfsetispeed(&newtio, B9600);

      cfsetospeed(&newtio, B9600);

      break;

    case 115200:

      cfsetispeed(&newtio, B115200);

      cfsetospeed(&newtio, B115200);

      break;

    case 460800:

      cfsetispeed(&newtio, B460800);

      cfsetospeed(&newtio, B460800);

      break;

    default:

      cfsetispeed(&newtio, B9600);

      cfsetospeed(&newtio, B9600);

    break;

    }

    if( nStop == 1 )

      newtio.c_cflag &=  ~CSTOPB;

    else if ( nStop == 2 )

      newtio.c_cflag |=  CSTOPB;

    newtio.c_cc[VTIME]  = 0;

    newtio.c_cc[VMIN] = 0;

    tcflush(fd,TCIFLUSH);

if((tcsetattr(fd,TCSANOW,&newtio))!=0)

    {

      perror("com set error");

      return -1;

    }

    printf("set done!\n");

    return 0;

}

```

## 2.3 JY61串口数据的接受和处理

```cpp

void ParseData(char chr)

{

static char chrBuf[100];

static unsigned char chrCnt=0;

signed short sData[4];

unsigned char i;

time_t now;

chrBuf[chrCnt++]=chr;

if (chrCnt<11) return;

if ((chrBuf[0]!=0x55)||((chrBuf[1]&0x50)!=0x50)) {printf("Error:%x %x\r\n",chrBuf[0],chrBuf[1]);memcpy(&chrBuf[0],&chrBuf[1],10);chrCnt--;return;}

memcpy(&sData[0],&chrBuf[2],8);

switch(chrBuf[1])

{

case 0x51:

for (i=0;i<3;i++) a[i] = (float)sData[i]/32768.0*16.0;

time(&now);

printf("\r\nT:%s a:%6.3f %6.3f %6.3f ",asctime(localtime(&now)),a[0],a[1],a[2]);

break;

case 0x52:

for (i=0;i<3;i++) w[i] = (float)sData[i]/32768.0*2000.0;

printf("w:%7.3f %7.3f %7.3f ",w[0],w[1],w[2]);

break;

case 0x53:

for (i=0;i<3;i++) Angle[i] = (float)sData[i]/32768.0*180.0;

printf("A:%7.3f %7.3f %7.3f ",Angle[0],Angle[1],Angle[2]);

break;

case 0x54:

for (i=0;i<3;i++) h[i] = (float)sData[i];

printf("h:%4.0f %4.0f %4.0f ",h[0],h[1],h[2]);

break;

}

chrCnt=0;

}

```

## 2.4 主函数

```cpp

int main(void)

{

    char r_buf[1024];

    bzero(r_buf,1024);

    fd = uart_open(fd,"/dev/ttyUSB0");/*串口号/dev/ttySn,USB口号/dev/ttyUSBn */

    if(fd == -1)

    {

        fprintf(stderr,"uart_open error\n");

        exit(EXIT_FAILURE);

    }

    if(uart_set(fd,BAUD,8,'N',1) == -1)

    {

        fprintf(stderr,"uart set failed!\n");

        exit(EXIT_FAILURE);

    }

FILE *fp;

fp = fopen("Record.txt","w");

    while(1)

    {

        ret = recv_data(fd,r_buf,44);

        if(ret == -1)

        {

            fprintf(stderr,"uart read failed!\n");

            exit(EXIT_FAILURE);

        }

for (int i=0;i<ret;i++) {fprintf(fp,"%2X ",r_buf[i]);ParseData(r_buf[i]);}

        usleep(1000);

    }

    ret = uart_close(fd);

    if(ret == -1)

    {

        fprintf(stderr,"uart_close error\n");

        exit(EXIT_FAILURE);

    }

    exit(EXIT_SUCCESS);

```

## 3 结果展示


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351