日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Raspberry 4B 串口通信

發布時間:2025/5/22 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Raspberry 4B 串口通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

串口通信

    • 組件
    • 操作步驟
        • 查看樹莓派4B的硬件串口與mini串口默認映射關系
        • 修改串口映射關系
        • 禁用串口的控制臺功能
        • 測試串口通信
          • 使用python實現串口的發送和接收
          • 使用C++實現串口的發送和接收

組件

  • Raspberry Pi 4 B+主板*1
  • 樹莓派電源*1
  • USB TO TTL模塊*1
  • 樹莓派管腳圖

第1步: 連接電路,使用USB TO TTL模塊連接好樹莓派的串口和PC電腦的USB接口。

樹莓派USB TO TTL模塊
TXDRXD
RXDTXD
GNDGND

注意:

  • 樹莓派TXD引腳接 USB TO TTL模塊 RXD 引腳
  • 樹莓派RXD 引腳接 USB TO TTL模塊 TXD 引腳
  • 樹莓派GND引腳一定要和USB TO TTL模塊GND引腳接好,否則在發送數據的過程中會出現亂碼。

樹莓派默認的映射關系:

pi@raspberrypi:~ $ ls -l /dev
lrwxrwxrwx 1 root root 7 8月 13 07:34 serial0 -> ttyS0
lrwxrwxrwx 1 root root 5 8月 13 07:34 serial1 -> ttyAMA0

由以上映射關系可以看到

  • serial0是GPIO引腳對應的串口,默認使用的是ttyS0 (mini串口)
  • serial1是藍牙對應的串口,默認使用的是ttyAMA0(硬件串口)

操作步驟

Raspberry 4B 串口通信 實現流程大致如下:

  • 查看Raspberry 4B 的硬件串口與mini串口默認映射關系
  • 修改串口映射關系
  • 禁用串口的控制臺功能
  • 測試串口通信

查看樹莓派4B的硬件串口與mini串口默認映射關系

在/boot/overlays文件內有兩個文件,README和 miniuart-bt.dtbo,首先查看有沒有相關文件。

cd /boot/overlays/ ls REA* mini*


README文件中說明了此文件的功能是將樹莓派3B,3B+, 3A+, 4B, Zero的藍牙切換到mini串口(ttyS0),并且恢復硬件串口(ttyAMA0)到GPIO14&15引腳中。

修改串口映射關系

執行命令

sudo gedit /boot/config.txt

在文件的末尾加上一行代碼

dtoverlay=miniuart-bt


然后"ctrl+s"保存文件, 執行sudo reboot重啟樹莓派,使修改生效。

再查看映射關系已經改變:

pi@raspberrypi:~ $ ls -l /dev
lrwxrwxrwx 1 root root 7 8月 13 07:34 serial0 -> ttyAMA0
lrwxrwxrwx 1 root root 5 8月 13 07:34 serial1 -> ttyS0

對比修改前的關系,可以看出 serial0serial1ttyAMA0ttyS0 的映射關系對換完成了,也就是ttyAMA0映射到了引出的GPIO Tx(14) Rx(15) 引腳上。

禁用串口的控制臺功能

在樹莓派命令窗口中分別通過如下兩個命令停止和禁用串口的控制臺功能。
由于我們前面已經交換了串口的映射關系,因此這里注意是ttyAMA0。

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

再執行命令:

sudo gedit /boot/cmdline.txt

在文檔中刪除語句 console=serial0,115200

然后保存文件,重新啟動樹莓派,使修改生效。

測試串口通信

完成以上操作,樹莓派 4B的串口配置就可以直接用了,下面用python-serial模塊做一個樹莓派串口與電腦USB TO TTL串口通信的測試。

1、首先將樹莓派的串口和 USB TO TTL 串口連接好,并將 USB TO TTL 串口插到電腦端上。
2、安裝python-serial模塊,一般都是樹莓派系統默認已經安裝好,可以直接跳過該步驟。

sudo apt-get install python-serial

3、輸入phthon3啟動python IDE。
4、創建serial實例ser,端口為 ‘/dev/ttyAMA0’,波特率設置為115200bps,第三個為校驗位,可以不寫。

>>> import serial
>>> ser = serial.Serial(’/dev/ttyAMA0’,115200)

5、檢驗串口是否打開,若未打開則輸入 ser.open() 打開

>>> ser.isOpen()
True

7、電腦上打開串口調試助手,選擇 USB TO TTL插入電腦上顯示的串口號,波特率選擇115200。
測試用的串口助手是STC-ISP里面的串口助手

8、然后我們在樹莓派的python里向電腦的串口助手發消息,檢測發送是否正常:

>>> ser.write(b’hello’)
5

可以看到在接收緩沖區接收到了樹莓派通過串口發送的 hello 消息。

使用python實現串口的發送和接收
# -*- coding: utf-8 -* #! /usr/bin/env python import serial import timeser = serial.Serial('/dev/ttyAMA0', 115200) # 設置端口和波特率 if ser.isOpen == False: # 檢查串口是否打開ser.open() # 打開串口 ser.write(b"Raspberry pi is ready") try:while True:size = ser.inWaiting() # 獲得緩沖區字符if size != 0:response = ser.read(size) # 讀取內容并顯示print(response) ser.flushInput() # 清空接收緩存區time.sleep(0.5) # 軟件延時 except KeyboardInterrupt:ser.close()

將以上代碼保存為“uart_communication.py”,然后執行Python文件

python uart_communication.py

運行樹莓派端的python程序,通信過程如下:


使用C++實現串口的發送和接收

以下為C++實現數據的發送

#include <stdio.h> #include <wiringPi.h> #include <wiringSerial.h>int main(){int fd;if(wiringPiSetup()<0)return 1;if((fd=serialOpen("/dev/ttyAMA0", 115200))<0)return 1;printf("Raspberry pi is ready ...\n");serialPrintf(fd,"hello C++!!\n");serialClose(fd);return 0; }

將以上代碼保存為“uart_communication.cpp”,然后執行C++文件

g++ uart_communication.cpp -o uart_communication -lwiringPi

sudo ./uart_communication



打開并初始串口:
int serialOpen (char *device, int baud)

  • device:串口的地址,在Linux中就是設備所在的目錄。
    • 默認一般是"/dev/ttyAMA0"
  • baud:波特率
  • 返回:正常返回文件描述符,否則返回-1失敗。

像使用C語言中的printf一樣發送數據到串口:
void serialPrintf (int fd, char *message, …)

  • fd:文件描述符

  • message:格式化的字符串


當使用這個函數初始化樹莓派引腳時,程序使用的是wiringPi 引腳編號表。引腳的編號為 0~16

需要root權限
int wiringPiSetup (void)

  • 返回:執行狀態,-1表示失敗

發送一個字符串到串口
void serialPuts (int fd, char *s)

  • fd:文件描述符
  • s:發送的字符串,字符串要以’\0’結尾

獲取串口緩存中可用的字節數。
int serialDataAvail (int fd)

  • fd:文件描述符
  • 返回:串口緩存中已經接收的,可讀取的字節數,-1代表錯誤

從串口讀取一個字節數據返回。

如果串口緩存中沒有可用的數據,則會等待10秒,如果10后還有沒,返回-1

int serialGetchar (int fd)

  • fd:文件描述符

  • 返回:讀取到的字符


以下為C++實現數據的接收

#include<stdio.h> #include<wiringPi.h> #include<wiringSerial.h> #include<string.h> int main(){int fd;int message;wiringPiSetup(); fd = serialOpen("/dev/ttyAMA0", 115200);serialPuts(fd, "Raspberry pi is ready\r\n");while(1){while(serialDataAvail(fd) != -1){message = serialGetchar(fd); if(message == '1' ){serialPuts(fd,"hello\r\n"); } else if (message == '2') {serialPuts(fd,"C++\r\n");} else if (message == '3'){serialPuts(fd,"!!!\r\n");}} } return 0; }

參考博客:https://www.cnblogs.com/lulipro/p/5992172.html

總結

以上是生活随笔為你收集整理的Raspberry 4B 串口通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产专区视频 | 免费看国产曰批40分钟粉红裤头 | 波多野结衣一区二区三区 | 日韩三级av在线 | 国产精品毛片一区二区在线看 | av在线激情| 亚洲一区视频在线播放 | 国产区在线观看视频 | 男人日女人b视频 | 97在线观看免费视频 | 成人羞羞网站 | 久久久久久免费视频 | 成人做爰69片免费 | 91av久久久 | 中文字幕在线观看高清 | 日本xxxx高潮少妇 | 一区二区精彩视频 | 天堂中文在线资源 | 色网站视频| 综合久久激情 | 亚洲精品字幕在线观看 | 九色精品在线 | 成人免费看片&#39; | 4444亚洲人成无码网在线观看 | 日本激情视频一区二区三区 | 视频在线观看免费大片 | 日本少妇xxxxxx | 丰满熟女人妻一区二区三区 | 亚洲激情婷婷 | 精品一区二区人妻 | 涩涩涩在线视频 | 91视频在线免费看 | 黄视频免费在线看 | 在线观看污污网站 | 青青青草国产 | 久久久久久麻豆 | 在线看的网站 | 男人操女人免费 | 公交上高潮的丁芷晴 | 高清乱码免费看污 | 日韩欧美精品一区二区三区 | 黄色av网站免费看 | 成人做受视频试看60秒 | 91视频 - 88av | 日韩一级在线观看视频 | 免费av网站观看 | 国外精品视频 | 蜜臀久久99精品久久久久宅男 | 欧美日韩高清免费 | 黄色三级视屏 | 激情导航 | 亚洲欧美日韩在线一区 | 日本视频在线播放 | 免费观看成人在线视频 | 四月婷婷 | 四虎影视免费在线观看 | 日韩毛片一区二区三区 | 91免费污视频 | 夜夜操网站 | 中文字幕 视频一区 | 欧美一区二区网站 | 免费观看成人毛片 | 久久aⅴ乱码一区二区三区 亚洲成人18 | 欧美日韩网站 | 91色九色| 日韩中文字幕在线免费观看 | 久久久精品视频免费 | 毛片无码一区二区三区a片视频 | 午夜特级毛片 | av在线天堂 | 天天爽天天做 | 在线一二区 | 欧美日韩一区二区三区不卡视频 | 久久久欧美精品 | 亚洲精品视频在线观看免费视频 | 奇米影视大全 | jizz一区二区三区 | 成人免费视频网 | 亚洲中午字幕 | 日本高清视频一区二区三区 | 免费看成人av | 玩偶姐姐在线观看免费 | 男女在线观看 | 香蕉视频网页版 | 欧美影院一区 | 中文字幕一区二区av | 日本a级在线 | 国产在线a | 亚洲欧美色图视频 | 国产网站入口 | 色乱码一区二区三区熟女 | 激情开心网站 | 99精品欧美一区二区三区 | 亚洲国产成人va在线观看天堂 | 国产91免费看 | 四虎影视成人 | 黄色一级片一级片 | av在线导航| 色爱色|