树莓派的外部接口中含一路UART串行接口,利用该接口可以实现树莓派与Arduino、GPRS模块、GPS等其他外部系统的对接。
由于这一路串口兼做Linux的控制台输出口,所以在使用前必须先将调试输出功能关闭,方法如下:
1. 去除Kernel的启动信息
在 /boot/cmdline.txt
中,去除 parameterconsole=ttyAMA0,115200
,并保存;
2. 去除Kernel的调试信息
同样在 /boot/cmdline.txt
中,去除 kgdboc=ttyAMA0,115200
,并保存;
3. 关闭登陆提示
在 /etc/inittab
中去除 T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
,保存。
经过以上三步,就可以正常使用串行口了 (对于树莓派3,因为原生串口与蓝牙模块共用一组UART,还需要禁用蓝牙)。
(*)注意,因为树莓派与Arduino的串口电平不一致,必须使用电平转换芯片,或串联电阻限流,否则有可能损坏树莓派IO口!
编程时可以使用C语言以文件形式操作串口,也可以利用python的 python-serial 库进行编程。
这里以C语言为例,贴出示例代码:
#include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <string.h> int main(int argc, char *argv[]) { int fd, len; fd = open("/dev/ttyAMA0", O_RDWR, S_IRUSR | S_IWUSR); char temp; while(1) { len = read(fd, &temp, 1); if (len > 0) { write(fd, &temp, 1); printf("%c", temp); } else { usleep(10); } } close(fd); return 0; }
该代码从串口中接收一个字符,接收成功后将该字符打印在控制台上并通过串口回发。
【修订历史】
v1.2 09/12/2014 调整了文字版式,增加了串口电平不一致的说明。
v1.1 09/11/2014 调整了代码的结构,增加了对代码的说明。
>> 本文章版权归作者所有,如需转载请联系作者授权许可。
>> 原文来自: 云飞机器人实验室
>> 原文地址: RPi树莓派 | 树莓派串口通信介绍
>> 关于我们: 关于云飞实验室
>> 支持我们: 帮助我们可持续发展
你好,write后又read,什么意思?这段代码有什么效果?需要什么引脚、硬件的连接么?
你好!代码我写错了,应该是先read再将读到的数据write回去,代码已更新。需要将树莓派的TxD,RxD和GND引出,和对应系统连接。可以是任意使用串口的设备(GPRS模块,Arduino,PC等),注意树莓派电压为3.3v。