如何通过usb端口通信从arduino将串行数据写入phpmyadmin

Posted

技术标签:

【中文标题】如何通过usb端口通信从arduino将串行数据写入phpmyadmin【英文标题】:how to write serial data to phpmyadmin from arduino via usb port communication 【发布时间】:2021-09-20 05:25:48 【问题描述】:

我正在与 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 代码中取值的解决方案吗? 免责声明;这是 Deividas 重新发布的问题。请提供任何重要的答案

【问题讨论】:

您为什么要重新发布某人在5 years ago 发布的帖子?并使用显然不起作用的代码? @hcheung。很明显是因为你没有回答deividas 这能回答你的问题吗? Retrieving data from Arduino UNO via USB COM PORT 【参考方案1】:

对于PHP部分,请使用dio_open启动连接,然后使用dio_read

对于com3的情况(假设是9600 8-N-1):

<?php

exec('mode com3: baud=9600 data=8 stop=1 parity=n xon=on');

$fd = dio_open('com3:', O_RDWR);

while (1) 

  $data = dio_read($fd, 256);

  if ($data) 
     echo $data;
  


?>

修改上述代码以满足您的进一步需求。 (您可以使用变量(或者说从服务器数据库表中查询数据)替换 while (1) 中的 1 来控制何时停止读取数据,但杀死 php 有效地停止它)

【讨论】:

以上是关于如何通过usb端口通信从arduino将串行数据写入phpmyadmin的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 通过“USB 虚拟串行端口”与 USB 设备通信?

Microsoft Visual C++ 2010 和 Arduino UNO 之间通过 USB 进行串行通信

Arduino Uno Raspberry Pi 串行通信双读数

将 USB 串行数据解析为可用变量

Arduino和Python之间的串行通信发送/接收数据

Linux 上的串行通信连接