文章目录

  • 一、串口通信的一些概念
  • 二、树莓派串口通信设置
  • 三、树莓派串口通信API
  • 四、树莓派与PC通信
    • 1.接线
    • 2.程序与测试
  • 拓展

一、串口通信的一些概念

串口通信通常用在多机通信中。
串口通信是全双工的,那什么是全双工呢?
打个比方,一男一女在电话争吵,双方都能同时说话,对方也都能听到。

串口通信有两根数据线:Rx Tx
比如树莓派要和51单片机通信,将树莓派的R接到51的T,树莓派的T接到51的R(当然还要供电,就不啰嗦了)。就可以实现树莓派和单片机的交互了,双方都可以收发数据。当然你也可以只接一根,就变成单工了,只允许数据单向流动。

串口通信的双方必须要遵循特定的串口通信协议才能实现双方数据收发,就像两个人对话一样,语言相通,语速一致,才能实现对话。
在串口通信中,语言可以理解为数据格式(数据位、停止位、奇偶校验位),语速可以理解为波特率。

以上在串口通信的面试中已经足够了

二、树莓派串口通信设置

这一步是很重要的,因为树莓派3b的串口默认是被蓝牙占用的,也就会默认是用于蓝牙的。

但在前面的学习中,我们对树莓派的串口进行过一次设置或者说配置,就是解除了串口的蓝牙占用,用于串口登录,通过串口打印一些系统初始化的信息。

现在需要再次修改配置信息,来设置用于串口通信。配置方法如下:
①进入该目录 /boot/,打开cmdline.txt文件

cd /boot/
sudo vi cmdline.txt

进入该文件后,删除红色方框内容

删除后保存退出,删除后为:

②重启

sudo reboot

三、树莓派串口通信API

用到串口通信API需要包含头文件:

#include <wiringSerial.h>

串口常见的API参考文章:树莓派wiringPi库详解

四、树莓派与PC通信

将树莓派与电脑进行连接,测试一下树莓派与电脑的串口通信。

1.接线

TTL与树莓派TX,RX连接后插入电脑端口,注意是交叉接线,最后TTL与树莓派还要共地稳压,保证数据正常沟通。一共三根线,Rx ——Tx、Tx——Rx、GND——GND。最后别忘记给树莓派供电哦!

2.程序与测试

我们要实现的功能是树莓派与电脑的双工通信,也就是树莓派向PC发送数据,看PC是否接收到;PC向树莓派发送数据,看树莓派是否接收到。我们可以通过串口助手来查看树莓派发上来的数据以及模拟发送数据给树莓派。

①树莓派通过串口发送数据给PC
程序如下:

#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>int main()
{int fd;if(wiringPiSetup() == -1){printf("硬件初始化失败\n");}fd = serialOpen("/dev/ttyAMA0",9600); //Linux下一切皆文件while(1){serialPutchar(fd,'c');//serialPuts(fd,"Hello World!\n");delayMicroseconds(1000000);        //延时函数}return 0;
}

我们在PC端打开串口调试助手,注意选对端口,波特率与程序中设置的一致。
结果如下:
每隔一秒钟通过串口向PC段发送一个字符 ‘c’

②PC通过串口发送数据发送给树莓派
程序如下:

#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>int main()
{int fd;int cmd;if(wiringPiSetup() == -1){printf("硬件初始化失败\n");}fd = serialOpen("/dev/ttyAMA0",9600);while(1){while(serialDataAvail(fd) != -1){cmd = serialGetchar(fd); //读串口数据printf("get data is %d\n",cmd);}}return 0;
}

结果如下:
我们通过串口调试助手发送整型数 5

树莓派接收到的数据也是 5

③树莓派与PC交互
程序:

#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>int main()
{int fd;int cmd;if(wiringPiSetup() == -1){printf("硬件初始化失败\n");}fd = serialOpen("/dev/ttyAMA0",9600); //打开串口while(1){while(serialDataAvail(fd) != -1){cmd = serialGetchar(fd);if(cmd == '2'){serialPuts(fd,"Pi receive 2 from you!\n");}if(cmd == '3'){serialPuts(fd,"Pi receive 3 from you!\n");}if(cmd == '4'){serialPuts(fd,"Pi receive 4 from you!\n");}}}return 0;
}

结果如下:

后续我们可以将树莓派与语音模块结合起来,将语音模块获取的指令通过串口发送给树莓派,树莓派根据不同的指令执行不同的操作。

拓展

通过这一节对串口通信的学习,对串口通信有了一定了解。由此可以进行拓展,为后面智能家居项目服务。

树莓派与语音模块的串口通信,实现语音控制各种灯或其它设备:
语音模块接收到指令后通过串口向树莓派发送相关数据,树莓派根据接收到的数据,选择进行不同到的动作,进而实现对不同设备的控制。当前,树莓派也可以通过串口连接51或者32,将接收到的数据(指令)转发给单片机,单片机根据不同的指令去进行不同的动作。

参考文章:
树莓派wiringPi库详解
树莓派串口通信

树莓派外设开发基础—串口通信相关推荐

  1. 树莓派外设开发基础(wiringPi库)

    参考:树莓派外设开发基础篇 作者:丶PURSUING 发布时间:2021-02-05 18:20:53 网址:https://blog.csdn.net/weixin_44742824/article ...

  2. 树莓派——3、树莓派外设开发编程

    树莓派外设开发接口文档参考 wringPi库(特定平台,特定功能的接口)树莓派wiringPi库详解 - lulipro - 博客园 (cnblogs.com) 一.树莓派的接口 IO口:input/ ...

  3. 树莓派外设开发(快速上手)

    树莓派外设开发 wiringPi库的使用 例子---接收指令让继电器工作 HC-SR04超声波测距模块简单应用 跨平台文件传输 FileZilla软件 linux环境自带的scp指令 串口交互 修改c ...

  4. 嵌入式STM32入门之STM32基础串口通信

    STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...

  5. 串口通信协议(基于面试),与及树莓派与电脑之间串口通信

    一.首先来说一下基于面试的串口通信协议 树莓派wiringPi库详解 (1)串口通信是基于多机的通信 主要就是两根线:RXD和TXD 举例,语音识别模块与树莓派之间进行串口通信 语音模块的T连接树莓派 ...

  6. 树莓派外设开发——超声波

    1.综述 树莓派外设开发需要用的wiringPi()库函数 在调用时需要包含#include<wiringPi.h>文件 使用wiringPi()库函数时需要将其初始化,方法为:调用 in ...

  7. 树莓派和电脑之间串口通信编程

    目录 一.串口通信协议 1.先了解下全双工和半双工的区别 2.串口通信关注点 二.树莓派和电脑之间串口通信编程 1.初次使用树莓派串口编程,需要配置 2.串口通信相关的API (1)serialOpe ...

  8. 树莓派和arduino的串口通信

    一. 树莓派环境安装 1. 安装GPIO模块 wget https://sourceforge.net/projects/raspberry-gpio-python/files/RPi.GPIO-0. ...

  9. 嵌入式系统开发09——串口通信

    本文主要涉及到串口协议和RS-232.485标准的简介,RS232.485电平与TTL电平的区别,以及 "USB/TTL转232" 模块(以CH340芯片模块为例)的工作原理. 目 ...

最新文章

  1. PCL显示法线no override found vtkactor
  2. 安永创新中心落子北京,聚焦5G技术赋能企业数字化转型
  3. PHP5.5安装GeoIP扩展
  4. c实现多语言编程,C/C++编程中多国语言处理
  5. Js实现拖拽 --面向对象封装( 超详细中文注释)
  6. jQuery图表插件 JS Charts
  7. DataX离线数据同步工具/平台
  8. python小白应该看什么书_小白学python看什么书
  9. [神经网络]什么叫神经网络
  10. 如何优雅的使用iBatis
  11. 空间可能与时间一样,也是不可逆转的
  12. 1.2 安装 docker 容器并配置镜像加速器
  13. 基于asp.net075丰田汽车4S店销售管理系统
  14. 基于JavaEE电子商务交易系统
  15. 微信电子驾驶证怎么查询
  16. 万能查看电脑连接过的WiFi密码
  17. java 抓取搜狗微信_搜狗微信公众号文章抓取
  18. 2017IDC企业级WLAN榜单将揭晓,新华三继续领跑企业级市场、聚焦“十连冠”
  19. 用山脊图展示后验分布
  20. 单细胞分析可视化工具盘点

热门文章

  1. 为什么现在是做跨境电商亚马逊店群的最佳时期?
  2. jtdhrsgeagrshtd
  3. ​LeetCode刷题实战81:搜索旋转排序数组 II
  4. 2019年天梯真题L1
  5. Surface Shaders with DX11 / OpenGL Core Tessellation 表面着色的曲面细分 - Unity Shader Reference 系列5
  6. jxl导不出来_JXL和POI导出数据
  7. 本周AI热点回顾:王者荣耀AI绝悟完全体开启,英雄随便选;2张图片就能「算出」一段视频;Nature文章明年起可免费下载
  8. ApiPost6 Edge浏览器WEB版发送POST请求问题
  9. 焦(jiao)作(yi)一中培训游记
  10. 批量直播监测,开播自动下载、分割、上传投稿至bilibili