树莓派通过USB读取串口数据

树莓派串口应用

  • 配置信息
  • 配置设置
  • 验证配置
  • 编写代码
    • 待补充部分

配置信息

由于工作关系,需要用树莓派实现一些测试系统的功能。本人的设备配置信息如下:

树莓派版本:Raspberry Pi 3 Model B+
软件版本:Raspbian Buster with desktop 4.19
python版本: 3.7.3 (包版本:serial:3.4,SQLite:3.27.2,time模块, vim(文本编辑模块,可用nano,cat等代替) )

测试设备通过UART串口输出数据,然后由USB转TTL模块插到树莓派上进行接收。UART和USB的输入输出口共用TX, RX。只要将UART的TX接USB模块的RX,UART的RX接模块TX即可。

网上树莓派实现串口通信的教程很多,但有很多干扰的信息,比如修改iniitab,安装一些乱七八糟的软件的什么的。(minicom是linux内核下的类似串口调试助手的东西,可以安装进行调试。博主没有安装因为不是必备品。)

配置设置

Step 1:
菜单–>首选项–>Raspberry Pi Configure 将Serial Port改为Enable,然后重启。
树莓派通过USB读取串口数据_第1张图片
Step 2:
将/boot目录下的cmdline.txt里面的 “console=ttyAMA0, 115200”这句话删掉。(内容可能有差异,将第一个console至第二个console前的内容删除。)
(在删除的时候可能提示没有权限,需要使用命令行)

~$ sudo vim /boot/cmdline.txt

(Vim是文本编辑包,可用其他方式代替。)

Step 3:
将USB插到树莓派上的任意USB接口上,然后在终端输入命令查看。USB0是否正确安装

~$ ls -l /dev/tty*

ttyUSB0显示
*ttyAMA0是通过树莓派GIPO串口进行通信时候使用的端口。
博主使用的是UART转USB所以使用的是ttyUSB0.

验证配置

可以通过在终端命令行输入命令来看安装是否成功。

import serial
import time
import sqlite3

ser = serial.Serial("/dev/ttyUSB0", 57600, timeout=0.5)
ser.isOpen()

在Python3里运行上面的代码,应该没有报错并且返回值为True
树莓派通过USB读取串口数据_第2张图片

编写代码

'''
-*- coding:utf-8 -*-
-*- author:Lin -*-
-*- date:2019-08-29 -*-
'''

import serial
import time
import sqlite3

# 加载串口端口信息
ser = serial.Serial("/dev/ttyUSB0", 57600, timeout=0.5)  	# 57600为了和仪器的波特率匹配
ser.flushInput()											# 将serial上的接收数据全部清除

# 由于串口接收到的数据为二进制数据,需要将数据进行转换才能读取
def returnvalue(count):
    recv = list(ser.read(count))
    recv = str(bytes(recv), encoding='UTF-8')
    return recv
    
# 开始不停接收数据,直到keyboardInterrupt
while (True):
    count = ser.inWaiting()  	# 将缓存内的数据读取到count上。使用print观察接收到的二进制数组的个数
    localtime = time.asctime(time.localtime(time.time()))	#打印当前时间
    if count != 0:	# 如果接收到信息,则解码输出
        print(returnvalue(recv),localtime)
    print('ends')
    time.sleep(5)  	# 程序暂停5秒,等待缓存内存入数据。
    

待补充部分

将读取到的数据存入到SQLite里。将在未来进行开发。
至此,通过树莓派读取串口信息的程序就完成了。

谢谢阅读!

你可能感兴趣的:(树莓派,随笔)