内容纲要
树莓派串口驱动详细
串口驱动现状
本来在树莓派上插入了一个sim800c的设备,但是这个产品带着一颗ch3401的芯片,在设备上用ls /dev/ttyUSB*竟然没有找到串口设备,内心想可能是没有驱动,于是到官方站点上下载了一下。
看更新时间是2018年3月,然后打开压缩包。
然后发现Readme里面已经告诉我们支持的内核只能是:
太老了。后来查资料发现好像这几款常见芯片已经被加入到Linux内核,早已经支持。抱着怀疑的态度查看了一下。
果然都支持了。
包括ch341, cp210x系列,pl2303, ftdi, 好吧,这下方便多了,以后在linux下做串口设备的调试就不要担心串口芯片不兼容了!
然后再通过lsusb和lsmod还有dmesg检查后发现,已经识别了。。
检查看看串口是否连上来出现一个/dev/ttyUSB0的设备:
这样才对么。我下面就可以用串口来获取一下sim800C的sim卡联网的状态信息了。
测试代码:
#!/usr/bin/env python3
import serial
import time
import operator
import os
time.sleep(2)
ser = serial.Serial('/dev/ttyUSB0', 115200)
print("串口初始化完成...")
if ser.isOpen == False:
ser.open()
try:
print('-'*60)
print("初始化SIM800C")
print("尝试测试SIM800C联网获取CCID信息...")
time.sleep(2)
i = 0
while True:
ser.write(str.encode("AT+CCID\r"))
size = ser.inWaiting()
if size != 0:
response = ser.read(size)
ccid = str(response,encoding="utf8")
print(ccid)
ser.write(str.encode("AT+CGMR\r"))
size = ser.inWaiting()
if size != 0:
connection = ser.read(size)
creg = str(connection, encoding="utf8")
print(creg)
time.sleep(1)
ser.write(str.encode("AT+CSQ\r"))
size = ser.inWaiting()
if size != 0:
csq = ser.read(size)
csqstatus = str(csq, encoding="utf8")
print(csqstatus)
time.sleep(1)
ser.write(str.encode("AT+CGACT=1\r"))
size = ser.inWaiting()
if size != 0:
cgact = ser.read(size)
cgactstatus = str(cgact, encoding="utf8")
print(cgactstatus)
else:
ser.flushInput()
time.sleep(1)
except KeyboardInterrupt:
ser.close()