Я работаю над небольшим проектом, чтобы создать метеостанцию и собирать данные с помощью программирования Python. Я использую эту метеостанцию click here.Как получить данные от UART Beaglebone с помощью Python
Проблема в том, что метеорологическая станция предоставляет только пример кода с использованием программирования на языке С, я не очень хорош в этом. Поэтому я решил с помощью Python, но формат выходных данных, как этого
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
c000s000g000t084r000p000h63b10040
Я использую Миник, чтобы увидеть результат. Я не понимаю, как работает образец кода на их веб-сайте, поэтому, если вы можете дать мне объяснение или какой-то пример того, как он работает и преобразовать его в программирование на Python, это будет здорово.
Это их пример кода, написанного с C
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("");
}
Спасибо.
Отлично, спасибо за ответ, но можете ли вы дать больше примеров использования Python на основе этого образца кода, если вы не возражаете .. Я все еще смущен, –
'TypeError: строковые индексы должны быть целыми числами , а не кортеж "это то, что у меня есть. –
Вам нужно будет поделиться с вами попыткой кодирования. Основная вещь, которую вам нужно понять, это то, что у вас есть строка, и вам нужно разделить ее на каждый результат разделения в разной мере. –