2016-02-14 1 views
0

Я работаю над проектом с Arduino UNO. Моя задача - получить данные от Arduino и сохранить их в базе данных с помощью PHP (во-первых, я пытаюсь получить данные в php-коде, сохранение в базу данных довольно просто).Извлечение данных из Arduino UNO через USB COM PORT

Я использую операционную систему Windows. Использование WAMP, версия php: 5.5.12

Проблема заключается в следующем: я не могу понять, как правильно читать данные через COM-порт.

Arduino Пример кода:

float temp; 
int tempPin = 0; 

void setup() 
{ 
Serial.begin(9600); 
temp = analogRead(tempPin); 
temp = temp * 0.48828125; 
Serial.print(temp); 
} 

void loop() 
{ 

} 

PHP код позади (Arduino использует COM3):

<?php 

    exec("MODE COM3: BAUD=9600 PARITY=N DATA=8 STOP=1"); 

    $portAddress = 'COM3:'; 

    // Open connection on port 
    $port = fopen($portAddress, 'rb+'); 

    stream_set_timeout($port, 0, 100); 
    stream_set_blocking($port,0); 

    // Necessary when the Arduino reset after the connection 
    sleep(2); 


    $msg = fread($port, 1); 

    // Close connection 
    fclose($port); 

    echo $msg; 
?> 

проблема заключается в том, что когда я первый запустить код PHP, похоже, что он зациклился не останавливаться и не открывать соединение. Если я попытаюсь обновить страницу, я получу enter image description here

Я попытался найти другие вопросы на форуме, но я не смог найти подобную ситуацию. Может ли кто-нибудь привести меня к решению о принятии значения в php-коде?

ответ

1

Для начала, я хотел бы добавить:

delay(1000); 
Serial.write(temp); 

Для основного цикла программы в эскизе Arduino, почему? - Без этого ваша программа просто напишет переменную temp один раз, а затем ничего не сделает навсегда, поэтому добавьте это, чтобы упростить тестирование.

Далее, ваш код PHP. Кажется, что-то простое, вы используете WAMP-сервер с повышенными разрешениями? PHP пытается получить доступ к COM в окнах на аппаратном уровне, вам понадобятся повышенные разрешения. Вы используете rb+, поэтому обработка передачи отключена, она может работать с различными типами действий, поскольку между PHP и машиной существуют слои, такие как WAMP-сервер, который может искажать данные. Ваше время не будет работать, система не является синхронной, передача Arduino не может быть ожидаемой без рукопожатия, вам нужно зацикливаться и ждать, пока передача не будет получена до ее обработки, что может привести к хаосу с помощью WAMP сервер.

+0

Я попробую сегодня вечером и дам вам мои результаты. – Deividas

+0

Написал код в цикл. Althou not Serial.write, но Serial.println. Ран, как администратор, но не повезло. Еще одна проблема – Deividas