2017-01-13 10 views
1

им сделать программу Arduino, которая посылает некоторые данные датчиков к Raspberry пи модели 3 по USBсбор данных о Rpi от Arduino с использованием последовательного порта и MySQL

Я также сделал питон скрипт для регистрации этой информации в малин и база SQL

Ардуино отправляет 1, чтобы знать, когда взять первое значение, скрипт rPi изменяет режим от 0 до 1, а затем начинает считывать 4 значения, вот когда проблема возникает, так как rPi dont уведомляет 1 и никогда не переходит в режим 1

Heres код python:

while True: 
    while mode==0: 
     x = ser.readline() 
     if x==1: 
      //never gets here 
      print("b") 
      mode = 1 
      print("Starting data Gathering at rPi from arduino") 

    while mode==1: 
     print("Gathering data") 
     text1 = "CFL" 
     ignore1 = ser.readline() 
     x1 = ser.readline() 
     x1 = double(x1) 
     x2 = ser.readline() 
     x2 = double(x2) 
     y = ser.readline() 
     y = int(y) 
     z = ser.readline() 
     z = int(z) 
     time1 = time.time() 
     date1 = time.strftime('%d-%m-%d') 
     print("Saving sql data") 
     sql = "INSERT INTO tempdat(tdate, ttime, zone, DHTtemp, DHThum, SoilHum, Light) VALUES (%s, %s, %s, %d, %d, %d, %d)" %(date1,time1,text1,x1,x2,y,z) 
     cursor.execute(sql) 
     db.commit() 

И На платформе Arduino один:

void loop() { 

    Serial.println(1); 

    Serial.println(read_temp()); 
    delay(1000); 

    Serial.println(read_humidity_DHT()); 
    delay(1000); 

    Serial.println(read_humidity_soil()); 
    delay(1000); 

    Serial.println(read_light()); 
    delay(10000); 
} 

Также хотел бы спросить, если кто-нибудь знает, что лучший способ помечать информацию я отправить знать о RPI, из которого датчиков приходит. Заранее спасибо

* редактировать некоторый код был плохо скопирован при создании вопроса

ответ

0

Serial.println посылает ASCII-код с последующим \r\n. Вы сравниваете символы ASCII с целым значением. Попробуйте следующее:

x = '' 
    while ser.inWaiting(): 
     c=ser.read() 
     if c not in "\r\n": 
      x += c 
    if x=='1': 
    . . . 
+0

Привет, Майкл, спасибо за ваш ответ, ive попробовал его и не работает нигде, я поставил print() в то время, когда ser.inWaiting() купил непосредственно перед ser.read() и никогда не доходил до него, я также думал htere должен быть каким-то конфликтом типа Variable, но я suposed readLine() возвращает String, но кажется, что это не так, поскольку я также пытался сравнить это как String x = ser.readline() , если x == "1": и не работает ни –

0

Положите оператор break, чтобы вы никогда не покидали первый цикл.