前言:本文主要介绍树莓派串行口通讯的主要方法和配制过程,以及注意事项。
一、树莓派串行通信的方法
树莓派的串行通讯的方式主要有两种:一种是通过树莓派GPIO口、一种是通过USB口。
二、莓派的串口(UART)配置和使用
1、树莓派上UART端口的位置
GND位于HEAD-6(也可选其他GND)
TXD位于HEAD-8
RXD位于HEAD-10
树莓派的第一排的第三,四,五分别,也就是下图的6,8,10三个端口分别是地、TX与RX。注意在接线时,3根线都要接,首先设备必须共地,树莓派的TX要连接从设备的RX,树莓派的RX要连接树莓派的TX。
图. 树莓派 UART位置
2、树莓派的串口电平
树莓派的TX和RX是TTL电平,如果从设备不是TTL电平就需要进行电平转换,转换方式需要根据从设备的信号形式。例如,如果从设备是RS232电平(比TTL电平抗干扰,尤其是距离较长的时候),就需要到网上购买RS232转TTL的转换模块。(下面网址不是广告只是个例子https://detail.tmall.com/item.htm?spm=a230r.1.14.1.JBapZL&id=12425122397&cm_id=140105335569ed55e27b&abbucket=19)
说明:TTL电平与RS232电平的区别
1)TTL电平标准
输出 L:<0.8V ; H:>2.4V。
输入 L:<1.2V ; H:>2.0V
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。
2)RS232标准
逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次。
3、树莓派的串口默认为一个控制台,用于SSH调试使用,若要使用串口需要修改两处文件。 具体的修改方法如下:
1)修改两处文件
【1】/boot/cmdline.txt
【输入以下指令】
sudo nano /boot/cmdline.txt
【删除红色部分】
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4elevator=deadline rootwait
【最终变为】
dwc_otg.lpm_enable=0 console=tty1root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
【2】/etc/inittab
【输入以下指令】
sudo nano /etc/inittab
【注释最后一行内容】
#T0:23:respawn:/sbin/getty -LttyAMA0 115200 vt100
2)重新启动系统
sudo reboot
4、测试
配置完之后便可测试一下树莓派的UART是否正常工作,而minicom便是一个简单好用的工具。minicom是linux平台串口调试工具,相当于windows上的串口调试助手。
【1】minicom安装
sudo apt-get install minicom
【2】minicom启动
minicom -b 9600 -o -D /dev/ttyAMA0
-b代表波特率,-D代表端口,/dev/ttyAMA0 类似于windows中的COM1,-o功能暂时未知。
图. minicon界面
【3】minicom发送内容
直接在控制台中输入内容即可,如果minicom打开了回显可在控制台中观察到输出内容,如果回显关闭则控制台中没人任何反应,千万不要以为minicom没有正常工作。
【4】minicom回显控制
先Ctrl+A,再E。可翻转回显状态(原来回显打开则此事回显关闭)
【5】minicom退出
先Ctrl+A,再Q。
5、利用python程序通信事例(利用pyserial,下载安装方法见后文)
import serial
from time import sleep
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)
def recv(serial):
data
while True:
data =serial.read(30)
if data == '':
continue
else:
break
sleep(0.02)
return data
while True:
data =recv(ser)
ser.write(data)
三、树莓派的串行通信(利用USB)配置和使用
首先用RS232转USB的转接线连接树莓派,即可完成硬件连接。对于串口通信,可以通过pyserial实现。
1、安装pyserial模块和测试
从https://pypi.python.org/pypi/pyserial下载最新版本的安装包,再通过下面的命令完成安装:
tar zxvf pyserial-2.7.tar.gz
cd pyserial-2.7
python setup.py install
通过命令lsusb查看串口是否存在:
通过命令python -m serial.tools.list_ports可以查看大可用的端口:
2、python通讯程序
usb设备:/dev/ttyUSB0
import serial
from time import sleep
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=0.5)
def recv(serial):
data
while True:
data =serial.read(30)
if data == '':
continue
else:
break
sleep(0.02)
return data
while True:
ser.write(data)data =recv(ser)
总结:如果你使用的是usb Hub,那么通讯的设备就不一定是/dev/ttyUSB0,可能是/dev/ttyUSB1,/dev/ttyUSB2,/dev/ttyUSB3等,以此类推。