飞凌嵌入式
直播中

超人

1年用户 74经验值
擅长:控制/MCU
私信 关注
[技术]

【飞凌OK-MX9596-C开发板试用】④RS485-TTL串口,扩展无限可能

【飞凌OK-MX9596-C开发板试用】③云端AI拍照识别 - 飞凌嵌入式 - 电子技术论坛 - 广受欢迎的专业电子论坛!

https://bbs.elecfans.com/jishu_2504144_1_1.html

书接上回,玩转了基于云端的AI(感谢版主给加精),本篇咱们再回到现实。

回顾开发板的硬件,可谓功能丰富,端口多样。

但回过头一看,没有配置类似树莓派那样的40pin接口。

也就是说没有GPIO,UART,SPI(倒是有一个SPI3),IIC等常用嵌入式底层接口。

CAN、RS485等工业互联接口倒是不少(CAN有 5个; RS485有 2个)

USB常用于高级硬件接口(摄像头等)

如果要驱动较为底层的硬件,如传感器、OLED、电机等,就略有不便。

这里我想到用RS485——UART(TTL)的方式扩展接口:

隔离型TTL转RS485,当然了因为都是双向接口,所以也是支持RS485转TTL的。

image.png

硬件连接方面

开发板的RS485_1的AB端接 TTL转RS485模块的 AB端。

TTL转RS485模块的 Vin TX RX GND 分别接 USB转串口TTL 的 Vin RX TX GND(注意TX和RX是交叉的)

image.png

USB转串口TTL 主要方便调试

在嵌入式系统和物联网开发中,串口通信是一项常见且重要的技术。Python 提供了一个名为 pySerial 的第三方模块,使得串口通信变得简单而灵活。

安装方式

pip install pyserial

下面是简单的串口发送和接收的例子

其中/dev/ttyLP7就对应RS485_1

485.py

import serial
import time

# 打开串口
ser = serial.Serial(
    port='/dev/ttyLP7',  # 串口号,根据实际情况修改
    baudrate=115200,  # 波特率,根据实际情况修改
    bytesize=8,  # 数据位,通常为8位
    parity='N',  # 奇偶校验,通常为None或'N'
    stopbits=1,  # 停止位,通常为1位
    timeout=1  # 超时时间,单位为秒
)

# 发送数据
def send_data(data):
    ser.write(data)

# 接收数据
def receive_data():
    if ser.in_waiting:
        data = ser.read_all()
        return data
    return None

# 主函数
if __name__ == '__main__':
    while True:
        # 发送数据
        send_data(b'Hello, RS485 to TTL!')
        time.sleep(3)

        # 接收数据
        data = receive_data()
        if data:
            print('Received:', data.decode('gbk'))
        else:
            print('No data received')
        time.sleep(1)

        # 关闭串口
        ser.close()
        break

执行结果:

SSH端:收到10个“Hello,TTL to RS485!”

image.png

在PC端串口助手:

image.png

收到了“Hello, RS485 to TTL!”

另外,刚刚在SSH端收到的数据,来自串口助手的配置:

每0.3秒发送一次“Hello,TTL to RS485!”

我们的源程序里,发送完数据后有个 time.sleep(3)

也就是延时3秒,所以在这3秒里一共收到了10个数据。

另外需注意,串口助手发送的文字要设置为GBK编码,这样在源程序里接收数据部分:
print('Received:', data.decode('gbk'))

才能正确解析。

image.png

本次分享就到这里。

最后是一个引子,引入下一帖

如图:

1762699324553.jpg

image.png

更多回帖

发帖
×
20
完善资料,
赚取积分