樹莓派3B使用GPIO實現串口通信

介紹

  前面已經寫過一篇關於樹莓派3B+的GPIO測試相關的博客,詳情請移步《樹莓派3B+使用GPIO實現串口通信》。本篇繼續講關於GPIO串口的相關操作。

硬件

樹莓派3B

系統

Ubuntu mate 16.04


配置步驟

安裝raspi-config

  在使用《樹莓派3B+使用GPIO實現串口通信》中同樣的方法配置GPIO時發現,純淨的Ubuntu mate 16.04系統是沒有sudo raspi-config命令的,因此需要先安裝raspi-config。

1、下載raspi-config.deb文件

wget http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20170926_all.deb

2、解決依賴問題

sudo apt install whiptail parted lua5.1 alsa-utils psmisc

3、安裝軟件

dpkg -i raspi-config_20170926_all.deb

4、運行raspi-config,需要sudo或以上權限

sudo raspi-config

5、raspi-config能夠運行的還有一個重要前提,boot分區已被正常掛載
先查看一下boot分區所在設備號

fdisk -l

再把它掛載到/boot上(以下是示例,不一定是mmcblk0p6,需根據實際情況決定)mount /dev/mmcblk0p6 /boot

首先大家可以使用命令看一下樹莓派3b+支持的GPIO串口

ls -la /dev/

配置GPIO串口

1、啓用串口ttyS0

打開串口/dev/ttyS0

sudo rasp-config

打開系統配置界面如下圖,選擇Inerfacing Options

然後選擇 serial

選擇No

然後Yes

最後選擇保存,退出即可。

這個時候在輸入下面的命令就可以看到串口ttyS0,但是還是不能用,繼續配置。

ls -la /dev/

2、關閉Console

在終端中輸入:

sudo systemctl stop serial-getty@ttyS0.service
sudo systemctl disable serial-getty@ttyS0.service

然後,重啓

重啓之後輸入,就可以啦

sudo systemctl mask serial-getty@ttyS0.service

修改樹莓派CPU頻率

這樣理論上完成了,但是我在實際測試中發現,

  1. 串口發送時偶爾可以發送一條正常字符串,大部分情況下是亂碼
  2. 串口接收數據時,出現**\xe8 \xe9**之類的數據。

各方查找資料後,發現有網友說可能是因爲樹莓派工作頻率不對造成的,連接在此
Raspberry Pi 3 login via UART on GPIO Baud Rates broken
,有興趣的朋友可以自己去看看。下面介紹修改方法:

sudo vim /boot/config.txt

查找下這句話 core_freq=250 是否啓用,如果沒有的話就將這句話前面的 # 號去掉,也可以在最下面添加上 core_freq=250 ,搞定。


測試

連線

樹莓派串口接線如下圖所示:
記得TX接RX,RX接TX

對應引腳參照表如下:

編輯文件

vim test.py

輸入下面的代碼(注意這裏配置的串口波特率是9600):

import serial

serialport = serial.Serial("/dev/ttyS0", baudrate=9600, timeout=3.0)

while True:
    serialport.write("rnSay something:")
    rcv = serialport.read(10)
    serialport.write("rnYou sent:" + repr(rcv))

運行代碼

運行代碼之前,需要先提升串口/dev/ttyS0的讀寫權限

sudo chmod 666 /dev/ttyS0

然後在運行代碼

pythoin test.py

ttyS0串口權限

前面雖然已經把串口配置好,但是每次使用串口時需要運行sudo chmod 666 /dev/ttyS0給串口權限,爲了方便,下面介紹如何把串口/dev/ttyS0自動獲取權限

編寫.rulrs規則

sudo vim /etc/udev/rules.d/90-local.rules

然後在裏面加上:

KERNEL=="ttyS0*", OWNER="root", GROUP="tty", MODE="0666" 

這裏簡單解釋下,其中KERNEL是串口的名字,OWNER是擁有者,對應下圖中紅色框,GROUP是所屬的羣,對應下圖中的藍色框

然後,重啓,完事兒~

如果想修改藍牙和串口之間的映射,請參考下面的連接

參考文獻

How to setup the UART on Raspberry Pi 3
樹莓派——安裝raspi-config
Raspberry Pi 3 login via UART on GPIO Baud Rates broken

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章