Извлечение данных из Arduino UNO через USB COM-порт

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

Я использую операционную систему 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, похоже, что он зацикливается без остановки и не открывает соединение. Если я пытаюсь обновить страницу, я получаю
введите описание изображения здесь

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

0

Решение

Для начала я бы добавил:

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]