Arduino-Raspberry
« il: Febbraio 11, 2021, 15:36 »
Buongiorno a tutti. Mi chiamo Bruno e da pochissimo ho acquistato un Raspberry con il quale sto imparando piano piano i rudimenti di Python.
Devo acquisire dati da un Arduino (MKR1010) e trasferirli via USB al Raspberry. Ho quindi scritto il codice Arduino che riporto.

void setup() {
  Serial.begin(9600);
}
void loop() {
  int sensorValue = analogRead(A0)
  Serial.println(y);
  delay(1);         
}

A questo punto sul Raspberry ho questo codice (lo ammetto, parzialmente scopiazzato dalla rete, ma se non inizio così...)

import serial
import numpy as np
from matplotlib import pyplot as plt
from time import time
ser = serial.Serial('/dev/ttyACM0', 9600)
tt=0
plt.ion()
start_time = time()
timepoints = []
ydata = []
yrange = [0.1,5.1]
view_time = 50 # seconds of data to view at once
fig1 = plt.figure()
fig1.suptitle('Crane', fontsize='18', fontweight='bold')
plt.xlabel('time, seconds', fontsize='14', fontstyle='italic')
plt.ylabel('LF Signal', fontsize='14', fontstyle='italic')
plt.axes().grid(True)
line1, = plt.plot(ydata,linestyle='-')
plt.ylim(yrange)
plt.xlim([0,view_time])
run = True
while run:
    try:
        data_a = ser.readline()
        data = float(data_a[0:len(data_a)-2])
        print(data)
        ser.flushInput()
    except:
        data=datab
    ydata.append(float(data)*5.0/1024)
    datab=data
    timepoints.append(time()-start_time)
    current_time = timepoints[-1]

    line1.set_xdata(timepoints)
    line1.set_ydata(ydata)

    if current_time > view_time:
         plt.xlim([current_time-view_time,current_time])
 
    fig1.canvas.draw()
ser.close()

Tutto perfetto, il grafico dei dati compare e si aggiorna, ma il sample rate con cui i numeri vengono letti è bassissimo. Ho provato a pilottare una sinusoide generata da Arduino e sopra i 10 Hz inizia a perdersi delle cose.
Tutto ciò non avviene se lancio il plotter seriale di Arduino installato sul Raspberry.
Qualcuno mi può consigliare su come poter graficare dati in real time con almeno 1kHz di banda?

Grazie mille a chi mi vorrà aiutare

Bruno