1. 6818串口初始函数
6818右上角,有4个串口,分别是COM2 COM3 COM4 COM 5
VCC TX RX GND
GY39
模块
VCC TX RX GND
TX --- RX RX---TX
注意电源千万别接反了!
LINUX下一切皆文件。串口在LINUX中也是以文件的形式存在的。串口发送给数据就是往文件中写数据,串口接收就是从文件读取数据。
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <stdlib.h>
#include <netdb.h>
#include <string.h>
#include <errno.h>
//6818串口所对应的文件名
#define COM2 "/dev/ttySAC1"
#define COM3 "/dev/ttySAC2"
#define COM4 "/dev/ttySAC3"
/* 设置串口参数(初始化串口) */
void init_tty(int fd)
{
//声明设置串口的结构体
struct termios termios_new;
//先清空该结构体
bzero( &termios_new, sizeof(termios_new));
// cfmakeraw()设置终端属性,就是设置termios结构中的各个参数。
cfmakeraw(&termios_new);
//设置波特率
//termios_new.c_cflag=(B9600);
cfsetispeed(&termios_new, B9600);
cfsetospeed(&termios_new, B9600);
//CLOCAL和CREAD分别用于本地连接和接受使能,因此,首先要通过位掩码的方式激活这两个选项。
termios_new.c_cflag |= CLOCAL | CREAD;
//通过掩码设置数据位为8位
termios_new.c_cflag &= ~CSIZE;
termios_new.c_cflag |= CS8;
//设置无奇偶校验
termios_new.c_cflag &= ~PARENB;
//一位停止位
termios_new.c_cflag &= ~CSTOPB;
tcflush(fd,TCIFLUSH);
// 可设置接收字符和等待时间,无特殊要求可以将其设置为0
termios_new.c_cc[VTIME] = 10;
termios_new.c_cc[VMIN] = 1;
// 用于清空输入/输出缓冲区
tcflush (fd, TCIFLUSH);
//完成配置后,可以使用以下函数激活串口设置
if(tcsetattr(fd,TCSANOW,&termios_new) )
printf("Setting the serial1 failed!\n");
}
2.GY39传感器模块
GY-39 可以测量:气压,温湿度,光强度传感器模块。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tnNV0NTo-1654176757146)(…/BLOGS_img/image-20220528202432066.png)]
引脚以及功能:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WpI2hcaP-1654176757148)(…/BLOGS_img/image-20220528202533714.png)]
在串口协议下,每个帧包含了8-13个字节的内容。
其中前两个字节都为5A,为帧头标志,第三个字节表示数据类型。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wG062Am9-1654176757149)(…/BLOGS_img/image-20220528202838871.png)]
其他为数据位,最后一个是校验和。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1pl612RD-1654176757150)(…/BLOGS_img/image-20220528202936000.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTKf7Urc-1654176757151)(…/BLOGS_img/image-20220528202949160.png)]
例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8URgfZg-1654176757152)(…/BLOGS_img/image-20220528203012654.png)]