php - 如何通过usb端口通信从arduino将串行数据写入phpmyadmin
问题描述
我正在与 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 重新发布的问题。任何重要的答案 pliz
解决方案
对于 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;
}
}
?>
修改上述代码以满足您的进一步需求。(您可以使用变量(或者说从服务器数据库表中查询数据)来替换1
while (1) 中的来控制何时停止读取数据,但杀死 php 可以有效地停止它)
推荐阅读
- android - Viewpager2 适配器显示第一页空白
- c# - 我想将多个按钮用于一个具有不同操作的计时器
- html - Odoo13 - 内容垂直居中的自定义网页
- android - 使用 IMEI 为移动设备创建许可证密钥
- typescript - 如何从对数组中制作类型化对象映射?
- bash - 为什么在 bash 中搜索和替换参数扩展比在 zsh 中慢得多?
- python - Python - y 应该是一个一维数组,而不是一个形状数组
- python - 模型结果之间的差异
- javascript - Javascript中的倒数计时器在输入新数据后也会显示旧数据
- python - 按下 ctrl+C 时如何不停止程序?