项目实现想法:
- EdfLiveViewer可以实时在线画出edf文件的图形
- 其实可能是此软件不停的解析edf文件里面的新增的数据,然后将新增的数据添加到图形中间
- 这样可以对于所有实时数据进行动态画图的想法。初期想法为:
- 通过树莓派通过(可能多个)传感器的I2C协议采集到他们的数据
- 然后通过动态的通过UART发送出去
- 电脑端通过python拿到树莓派UART传送过来的数据,并且保存为edf文件
- 硬件连接为UART转USB线材
- 然后通过EdfLiveViewer软件打开此edf文件
edfLiveViewer打开的文件需要遵守的格式:
- 文件中如果包含简单的数据头,是不行的
- 但是如果包含了数据头说明,是可以画图的
- 对于时间轴,只有UTC也可以画图
- 可以画图的最简单的注释
# Type=float64 Type=string Type=float Type=float
有多少列数据(包含时间),就需要有多少注释
并且注释不能写成UTC,而是需要写成Epoch_UTC
f.write('Epoch_UTC\tmydata\n')
树莓派的设置
第一步:
查看正在使用的uart
ls /dev/ttyAMA*
注意事项
各 UART 串口与 GPIO 对应关系:
GPIO14 = TXD0 -> ttyAMA0
GPIO0 = TXD2 -> ttyAMA1
GPIO4 = TXD3 -> ttyAMA2
GPIO8 = TXD4 -> ttyAMA3
GPIO12 = TXD5 -> ttyAMA4
GPIO15 = RXD0 -> ttyAMA0
GPIO1 = RXD2 -> ttyAMA1
GPIO5 = RXD3 -> ttyAMA2
GPIO9 = RXD4 -> ttyAMA3
GPIO13 = RXD5 -> ttyAMA4
根据上方对应关系,UART0 对应 TXD0 和 RXD0,对应 GPIO14 和 GPIO15,对应 ttyAMA0
注:UART0 对应的 ttyAMA0,UART1 对应的 ttyS0,UART2 到 UART5 对应的 ttyAMA1 到 ttyAMA4。
第二步:
ls -l /dev
终端输入ls -l /dev,发现只有serial1->ttyAMA0,没有serial0页没有ttyS0
如果没有:
sudo nano /boot/cmdline.txt
删除console=serial0,115200
reboot后,出现ttyS0
第三步:
sudo nano /boot/config.txt
加上
dtoverlay=disable-bt
reboot后,ttys0和ttyAMA0位置调换了
第四步-验证:
- 树莓派端发送数据:
import serial
import random
import time
uart = serial.Serial(port="/dev/ttyAMA0", baudrate=9600)
while True:
time.sleep(1)
timestamp = round(time.time(),1)
data = {'timestamp':timestamp, 'a':random.randint(1, 100)}
print(data)
uart.write(str(data).encode("gbk"))
- 电脑端接受数据:
import serial
import time
UART_logger= serial.Serial("COM15", 9600, timeout=0.1)
while True:
inter = ''
while True:
a = UART_logger.read(1)
if a !=b"\n":
inter = inter + a.decode()
else:
break
if len(inter)>0:
print(inter)