树莓派学习笔记——UART使用

0.前言

    本文将详细介绍树莓派的串口(UART)配置和使用,并结合一个modbus RTU从机的例子说明树莓派串口的应用。
    在开始前说明以下几点
    【1】树莓派UART端口的位置
    TXD位于HEAD-8
    RXD位于HEAD-10
    GND位于HEAD-6(可选其他GND)
    【2】树莓派的TXD应接USB转串口设备的RXD,当然如果测试失败请交换RXD和TXD的顺序
    【3】经过很多次的测试(N>25),当波特率为115200时打开树莓派的UART时,树莓派会莫名其妙的发送一字节0xF8,该问题始终无法解决。不过波特率为9600时并没有此问题,猜测是树莓派硬件或内核驱动问题。
    【4】树莓派的串口默认为SSH调试使用,若要使用串口需要修改两处文件。
   
图1 树莓派 UART位置

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=ext4 elevator=deadline rootwait
    【最终变为】
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
    
【2】/etc/inittab
    【输入以下指令】
    sudo nano /etc/inittab
    【注释最后一行内容】
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

2.使用minicom
    配置完之后便可测试一下树莓派的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功能暂时未知。

    图2 minicon界面
    【3】minicom发送内容
        直接在控制台中输入内容即可,如果minicom打开了回显可在控制台中观察到输出内容,如果回显关闭则控制台中没人任何反应,千万不要以为minicom没有正常工作。
    【4】minicom回显控制
        先Ctrl+A,再E。可翻转回显状态(原来回显打开则此事回显关闭)
    【5】minicom回显关闭
        先Ctrl+A,再Q。

3.使用pyserial
    minicom仅满足调试用途,如果需要编程解决问题那么python的serial扩展库——pyserial则是一个不错的选择。pyserial模块非常好用,后面的文章还会分析如何使用pyserial控制GPRS模块。
    【pyserial安装】
    安装pyserial扩展库有很多种方法,可使用pip或者easy_install安装,也可以直接选择apt-get工具安装。
    若使用apt-get工具安装,可输入以下指令
    sudo apt-get install python-serial

     【串口回显程序】
    非常简单的一个串口程序,树莓派通过串口返回接收的内容。
 # -*- coding: utf-8 -*
import serial
import time
# 打开串口
ser = serial.Serial("/dev/ttyAMA0", 9600)
def main():
    while True:
        # 获得接收缓冲区字符
        count = ser.inWaiting()
        if count != 0:
            # 读取内容并回显
            recv = ser.read(count)
            ser.write(recv)
        # 清空接收缓冲区
        ser.flushInput()
        # 必要的软件延时
        time.sleep(0.1)
   
if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        if ser != None:
            ser.close()

4.总结
    由于可借助python标准库使得树莓派的串口格外好用。是不是可以拿树莓派做一个Modbus RTU从机,的确可以请期待后面的博文吧。

5.参考资料
【1】minicom使用 国外博客
【2】elinux python-serial 安装pyserial及例程等



  • 11
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
树莓派(Raspberry Pi)和ESP32都是流行的微型计算机平台,它们各自有独特的用途,但都支持串行通信,如UART(Universal Asynchronous Receiver/Transmitter),用于设备间的数据传输。 树莓派是一个基于Linux的单板电脑,广泛用于教育、物联网开发和原型设计。它的GPIO(General Purpose Input/Output)接口中就包含UART端口,可以用来连接其他硬件设备,如传感器或简单的控制模块,通过串口进行通信。 ESP32是Espressif Systems开发的一款嵌入式微控制器,它内置了Wi-Fi和蓝牙功能,特别适合物联网项目。ESP32同样具有多个UART端口,如TX/RX接口,用于与其他设备,如Arduino、PC或其他ESP32模块进行串口通信,或者作为微控制器之间的通信媒介。 在使用树莓派和ESP32的UART通信时,通常的步骤包括配置端口参数(波特率、数据位数等)、编写发送和接收代码,以及可能的软件驱动设置。比如,如果你想要让树莓派和ESP32通过UART交换信息,你可能会: 1. 配置树莓派的GPIO UART设置,并启用相应的服务(如python的RPi.GPIO或picotcp)。 2. 使用Python的`serial`库在树莓派上创建串口连接。 3. 在ESP32上,通过SDK(如Micropython)配置串口并编写发送和接收函数。 4. 确保数据格式匹配,例如,是否需要添加校验和或者帧头。 相关问题: 1. ESP32的UART接口如何配置? 2. 如何在树莓派使用Python的`serial`库连接ESP32? 3. 什么是UART通信中的波特率和数据位数?
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值