树梅派学习 21. 串口连接
接线:
其中6、8、10 是串口的引脚。
1. 执行命令
sudo apt-get update
sudo apt-get upgrade
sudo reboot
2. 编辑/boot目录下的config.txt文件
sudo nano /boot/config.txt
添加下面两行:
enable_uart=1
dtoverlay=pi3-disable-bt
3. 编辑/boot目录下的cmdline.txt文件
sudo nano /boot/cmdline.txt
原内容:
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles
参考下面内容修改:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles
保存退出
这里更改掉,串口就不作为终端使用了。如果不设置,通讯会发现数据混乱。
4. 启用串口
sudo raspi-config
选择Interfacing Options–>Serial,回车进入后选择enable
5. 关闭板载蓝牙的方法:
1.SSH登录树莓派3后,输入下面命令关闭hciuart使用uart0.
sudo systemctl disable hciuart
2.编辑/lib/systemd/system/hciuart.server将 “ttyAMA0”修改为“ttyS0”
sudo nano /lib/systemd/system/hciuart.service
将 “ttyAMA0”修改为“ttyS0”
如果没有ttyAMA0,就参照下面修改其内容:
[Unit]
Description=Configure Bluetooth Modems connected by UART
ConditionPathIsDirectory=/proc/device-tree/soc/gpio@7e200000/bt_pins
Requires=dev-serial1.device
After=dev-serial1.device
[Service]
Type=forking
ExecStart=/usr/bin/hciattach /dev/ttyS0 bcm43xx 921600 noflow -
[Install]
WantedBy=multi-user.target
6. 重启
sudo reboot
7. 安装minicom
sudo apt-get install minicom
sudo minicom -D /dev/ttyAMA0 -b 115200
minicom设置方法:
sudo minicom -s
十六进制显示并自动换行:
minicom -b 4800 -o -D /dev/ttyAMA0 -H -w
参考:
https://github.com/RPi-Distro/repo/issues/31
https://hallard.me/enable-serial-port-on-raspberry-pi/
8. python 串口数据读取
sudo easy_install pyserial
代码:
# -*- coding: utf-8 -*
import serial
import time
import binascii
# 打开串口
ser = serial.Serial("/dev/ttyAMA0", 115200)
def main():
while True:
# 获得接收缓冲区字符
count = ser.inWaiting()
if count != 0:
# 读取内容并回显
recv = ser.read(count)
data = str(binascii.b2a_hex(recv))[2:-1] #如果16进制输出
print(data)
ser.write(recv)
# 清空接收缓冲区
ser.flushInput()
# 必要的软件延时
time.sleep(0.1)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
if ser != None:
ser.close()
一些常量:
- bytesize:FIVE BITS、SIXBITS、SEVENBITS、EIGHTBITS
- parity: PARITY_NONE, PARITY_EVEN, PARITY_ODD, PARITY_MARK, PARITY_SPACE
- stopbits: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO
异常:
- ValueError:参数错误
- SerialException:找不到设备或不能配置
9. 使用USB转串口CH430
树霉派已经写入了ch430的串口转Usb口的驱动
查连接的是那个U口,用命令lsusb
可以查看设备已经连接上,看到CH340。
使用命令 dmesg tail
可以看到最后一行为access to ttyUSB0
Python创建串口连接的方法:
ser = serial.Serial("/dev/ttyUSB0", 115200)
10. 安装xgcom
sudo apt-get update
sudo apt-get install automake libglib2.0-dev libvte-dev libgtk2.0-dev
git clone https://github.com/wanzhang/xgcom
cd xgcom
./autogen.sh
sudo apt-get install make automake libglib2.0-dev libvte-dev libgtk2.0-dev -y
make
sudo make install
xgcom
11. java使用rxtx
安装:
sudo apt-get install librxtx-java
启动java程序时加上参数:
java -Djava.library.path=/usr/lib/jni -Dgnu.io.rxtx.SerialPorts=/dev/ttyAMA0 -jar 你的jar
参考:https://angryelectron.com/rxtx-on-raspbian/