я использовал python на малине, чтобы прочитать ph воду из Arduino - PullRequest
0 голосов
/ 30 июня 2018

Я создаю проект для измерения pH воды, но мой модуль датчика не фиксируется с помощью raspberry pi 3, поэтому я использую Arduino для считывания pH, затем отправляю в raspberry и загружаю данные в firebase.

но у меня есть некоторые проблемы, когда Raspberry считывает данные из Arduino, циклы не работают. сообщение об ошибке: serial.util.serialexception

вот исходный код Raspberry

import os
import serial
import time
from firebase import firebase

arduino = serial.Serial('/dev/ttyACM0',9600)

firebase = firebase.FirebaseApplication('https://raspi-ph.firebaseio.com/', None)


def update_firebase():
    phair = arduino.readline()
    if data is not None:
        time.sleep(1)
        pieces = data.split("sensor= ")
        ph = pieces
        print ph
    else:
        print('Failed to get data. Try Again!')
        time.sleep(10)

    data = {"Sensor pH": phair}
    firebase.post('/sensor/ph', data)


while True:
    update_firebase()

    time.sleep(5)

и вот исходный код на Arduino

const int analogInPin = A0; 
int sensorValue = 0; 
unsigned long int avgValue; 
float b;
int buf[10],temp;
void setup() {
 Serial.begin(9600);
}

void loop() {
 for(int i=0;i<10;i++) 
 { 
  buf[i]=analogRead(analogInPin);
  delay(10);
 }
 for(int i=0;i<9;i++)
 {
  for(int j=i+1;j<10;j++)
  {
   if(buf[i]>buf[j])
   {
    temp=buf[i];
    buf[i]=buf[j];
    buf[j]=temp;
   }
  }
 }
 avgValue=0;
 for(int i=2;i<8;i++)
 avgValue+=buf[i];
 float pHVol=(float)avgValue*5.0/1024/6;
 float phValue = -5.70 * pHVol + 21.34;
 Serial.print("sensor = ");
 Serial.println(phValue);

 delay(20);
}

последнее, сообщение об ошибке на распи

['seor= 0.52\r\n']
Traceback (most recent call last):
  File "ard.py", line 27, in <module>
    update_firebase()
  File "ard.py", line 11, in update_firebase
    phair = arduino.readline()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 490, in read
    'device reports readiness to read but returned no data '
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)

цикл запускается только один раз

1 Ответ

0 голосов
/ 01 июля 2018

Глядя на исходный код , это исключение основано на предположении, что готовность к чтению плюс пустые данные подразумевают отключенное устройство.

Чтобы избежать этого, нужно указать timeout при создании экземпляра Serial.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...