Ich arbeite an einem kleinen Projekt, Wetterstation zu machen und die Daten mit Python-Programmierung zu sammeln. Ich verwende diese Wetterstation click here.Wie bekomme ich die Datenausgabe von UART Beaglebone mit Python
Das Problem ist, dass Wetterstation nur Beispielcode mit C-Programmierung bietet, ich bin nicht gut damit. Also ich entscheiden Python zu verwenden, aber das Datenausgabeformat ist wie dies
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
ich minicom bin mit der Ausgabe zu sehen. Ich verstehe nicht, wie das Code-Beispiel auf ihrer Website funktioniert. Wenn Sie mir eine Erklärung oder ein Beispiel dafür geben können, wie es funktioniert und es in Python-Programmierung umwandeln, wird das großartig.
Dies wird Code ihre Probe mit C geschrieben Sie
char databuffer[35];
double temp;
void getBuffer() //Get weather status data
{
int index;
for (index = 0;index < 35;index ++)
{
if(Serial.available())
{
databuffer[index] = Serial.read();
if (databuffer[0] != 'c')
{
index = -1;
}
}
else
{
index --;
}
}
}
int transCharToInt(char *_buffer,int _start,int _stop) //char to int)
{
int _index;
int result = 0;
int num = _stop - _start + 1;
int _temp[num];
for (_index = _start;_index <= _stop;_index ++)
{
_temp[_index - _start] = _buffer[_index] - '0';
result = 10*result + _temp[_index - _start];
}
return result;
}
int WindDirection() //Wind Direction
{
return transCharToInt(databuffer,1,3);
}
float WindSpeedAverage() //air Speed (1 minute)
{
temp = 0.44704 * transCharToInt(databuffer,5,7);
return temp;
}
float WindSpeedMax() //Max air speed (5 minutes)
{
temp = 0.44704 * transCharToInt(databuffer,9,11);
return temp;
}
float Temperature() //Temperature ("C")
{
temp = (transCharToInt(databuffer,13,15) - 32.00) * 5.00/9.00;
return temp;
}
float RainfallOneHour() //Rainfall (1 hour)
{
temp = transCharToInt(databuffer,17,19) * 25.40 * 0.01;
return temp;
}
float RainfallOneDay() //Rainfall (24 hours)
{
temp = transCharToInt(databuffer,21,23) * 25.40 * 0.01;
return temp;
}
int Humidity() //Humidity
{
return transCharToInt(databuffer,25,26);
}
float BarPressure() //Barometric Pressure
{
temp = transCharToInt(databuffer,28,32);
return temp/10.00;
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
getBuffer(); //Begin!
Serial.print("Wind Direction: ");
Serial.print(WindDirection());
Serial.println(" ");
Serial.print("Average Wind Speed (One Minute): ");
Serial.print(WindSpeedAverage());
Serial.println("m/s ");
Serial.print("Max Wind Speed (Five Minutes): ");
Serial.print(WindSpeedMax());
Serial.println("m/s");
Serial.print("Rain Fall (One Hour): ");
Serial.print(RainfallOneHour());
Serial.println("mm ");
Serial.print("Rain Fall (24 Hour): ");
Serial.print(RainfallOneDay());
Serial.println("mm");
Serial.print("Temperature: ");
Serial.print(Temperature());
Serial.println("C ");
Serial.print("Humidity: ");
Serial.print(Humidity());
Serial.println("% ");
Serial.print("Barometric Pressure: ");
Serial.print(BarPressure());
Serial.println("hPa");
Serial.println("");
Serial.println("");
}
danken.
Großartig, danke für Ihre Antwort, aber können Sie mehr Beispiel für die Verwendung von Python basierend auf diesem Beispielcode, wenn Sie nichts dagegen .. Ich bin immer noch verwirrt, –
'TypeError: String-Indizes müssen ganze Zahlen sein , nicht Tupel 'das ist, was ich habe. –
Sie müssen Ihren Programmierversuch teilen. Die grundlegende Sache, die Sie verstehen müssen, ist, dass Sie eine Zeichenkette haben und Sie jedes Split-Ergebnis in unterschiedliche Maße teilen müssen. –