简述

有很多的小伙伴说用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 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 串口打开

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 串口设置

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串口数据的接受和处理

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 主函数

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

usleep(1000);

}

ret = uart_close(fd);

if(ret == -1)

{

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

exit(EXIT_FAILURE);

}

exit(EXIT_SUCCESS);

}

3 结果展示

jy61 树莓派_用Linux树莓派来读取JY61的串口数据相关推荐

  1. 树莓派怎么学linux,树莓派使用入门用树莓派学 Linux

    树莓派使用入门用树莓派学 Linux 我们的<树莓派使用入门>的第四篇文章将进入到 Linux 命令行. 在本系列的 第三篇文章 中开始了我们的树莓派探索之旅,我分享了如何安装 Raspb ...

  2. python和树莓派_用 Linux、Python 和树莓派酿制啤酒

    怎样在家用 Python 和树莓派搭建一个家用便携的自制酿啤酒装置? 大约十年前我开始酿制自制啤酒,和许多自己酿酒的人一样,我开始在厨房制造提纯啤酒.这需要一些设备并且做出来后确实是好的啤酒,最终,我 ...

  3. 树莓派可以移动linux,树莓派学习笔记 篇三:树莓派4B 与移动存储设备的那些事儿...

    树莓派学习笔记 篇三:树莓派4B 与移动存储设备的那些事儿 2019-11-24 23:03:55 39点赞 286收藏 14评论 本文是「树莓派学习笔记」系列的第三篇,将学习下 Linux 系统分区 ...

  4. 32树莓派_你觉得树莓派的32位系统到了2038年会出现故障吗?

    刚刚在做项目,当写到日期方面的代码时偶然想到为什么时间都要以1970年开始,于是查阅了相关资料才了解到其中的细节. 为什么计算机和一些电子产品的时间选择在1970年?​www.zhihu.com 在阅 ...

  5. 树莓派3代linux,树莓派 3B 入门 ARMv8 Arch Linux

    以下树莓派简称 RP.斜体表示要执行的指令,[] 表示指令参数.本文有多个链接,一般是中文 wiki,可以查看使用方法. 版权归本人所有,转载请注明原作者! [0] About Arch Linux ...

  6. 姿态检测 树莓派_怎样在树莓派上轻松实现深度学习目标检测?

    原标题:怎样在树莓派上轻松实现深度学习目标检测? 雷锋网按:本文为 AI 研习社编译的技术博客,原标题 How to easily Detect Objects with Deep Learning ...

  7. linux java串口读写权限_解决linux下java读取串口之权限问题 No permission to create lock file. | 学步园...

    在终端或IDE中运行java读取串口程序时,总是报告如下信息: [lhwtouch@localhost root]$ java Main Experimental: JNI_OnLoad called ...

  8. 树莓派裸板linux,树莓派裸板开发操作系统 一

    本帖最后由 吹口琴的钢铁侠 于 2017-9-21 10:02 编辑 OK01这个教程会从零开始尝试把树莓派的RCA和USB口附近的那个'ACT'LED点亮,并搭建好环境为接下来的教程做好铺垫. 准备 ...

  9. openhd 树莓派_玩转树莓派Raspberry Pi 篇二:XBMC篇

    玩转树莓派Raspberry Pi 篇二:XBMC篇 2014-04-14 11:23:51 543点赞 737收藏 114评论 大家好,又见面了. 知乎上有人问"给 PC 装黑苹果的人是什 ...

最新文章

  1. Python 之父立 Flag:明年要把 Python 速度提高 2 倍!
  2. ImageView 缩放
  3. 限制oracle数据库表的输出记录条数
  4. SystemCenter2012SP1实践(19)集成WSUS更新服务器2012
  5. MySQL 5.7系列之sys schema(2)
  6. leetcode 13 13. 罗马数字转整数 (python)
  7. python读写excel文件(xls格式)
  8. github:配置ssh密钥
  9. 时钟系统(NTP子母钟系统)如何为高铁系统保驾护航
  10. oa处理会签流程图_关于合同会签OA流程使用说明
  11. 解决fidder一直报“The sever(XXX) presented a certificate that did not validate,....”
  12. 砥砺奋进!GitChat 发布 1.9 版本更新公告
  13. 二、CI框架之MCV模型
  14. DELL台式机安装Centos7无法正常展示图形化安装界面
  15. c语言泰勒公式求ln,ln(1-x)的泰勒级数展开是什么?
  16. 为解决iPhone绿屏问题,苹果将和这家中国公司合作
  17. 图解TCP/IP之半双工全双工通信
  18. 【边缘检测】Python实现SUSAN算法及使用非极大值抑制进行改进(含免费可用源代码)
  19. 平稳噪声与白噪声的区别与联系?
  20. Gutenberg 11.7的新增功能

热门文章

  1. python计算求导后的函数式与赋值计算
  2. Linux解压tar.gz、zip、tar.bz2 文件与对应的命令
  3. readmemh函数引用的txt格式_verilog的系统函数$readmemh的使用
  4. 无法删除计算机文件是什么意思,该计算机是Windows10系统,我不知道为什么最近无法删除某些文件...
  5. python 鱼骨图_面向对象编程,鱼骨图分析法
  6. 在Windows上安装MySQL5.7
  7. c++容器之vector
  8. php链接数据库实行增删查改_最方便最简单的php操作mysql的增删改查方法
  9. 不等距双杆模型_搜索中的深度匹配模型(下)
  10. Linux Shell 脚本基础