如何使用 PHP 读取串口 [重复]

2024-01-17

如何使用 php 从连接到我的服务器(运行 kali linux 的旧笔记本电脑)上的 COM 端口的 arduino 读取串行数据,以便我可以在网页上显示数据?

我读过有关同一问题的其他问题,所有这些问题要么超级复杂,要么需要 php-serialhttps://github.com/Xowap/PHP-Serial https://github.com/Xowap/PHP-Serial(这仅返回一堆我似乎无法修复的错误)。实际上,我确实设法用 C# 只需几行代码就可以读取串行端口(在 Visual Studio 中,见下文)。 php怎么会这么难呢?

C#

using System;
using System.IO.Ports;

namespace UNOtoDB
{
    class Program
    {
        static SerialPort S;
        static void Main(string[] args)
        {
            S = new SerialPort();
            S.PortName = "COM4";
            S.BaudRate = 9600;
            S.ReadTimeout = 2000;
            S.Open();

            while (true) {
                Console.WriteLine(S.ReadLine());
            }
        }
    }
}

Arduino

int Mapped;
int res;
void setup() {
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  res = analogRead(A0);
  Mapped = map(res, 0, 1023, 0, 47); //using a 47Kohm potentiometer
  Serial.println(Mapped);
  delay(100);
}

解决方案(使用 Node.js)

var serialport = require('serialport');
var Readline = serialport.parsers.Readline;
var parser = new Readline();
var path = '/dev/ttyACM0' ;
var myPort = new serialport(path ,{
    baudRate: 9600,
});
myPort.pipe(parser);
parser.on('data', readSerialData);

function readSerialData(data) {
    console.log(data);
    sleep(1000);
}
function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
}

确保使用 parser.on() 否则记录的数据有时会在字符或数字上分割。例如“31”有时会变成“3”和“1”


我有一个 Raspberry Pi3,我正在使用 python 做类似的事情。我假设您可以使用当前的设置运行 python,但我将与您分享我的脚本。

import serial
import time
import csv
import traceback
import datetime
import requests

port = '/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller_D-if00-port0'
#port = '/dev/ttyUSB0'
baud = 9600

ser = serial.Serial(port, baud, timeout=1)
ser.flushInput()

print(ser.name)

oldline = []
a = 0
while (a == 0):
    try:
        line = ser.readline()                 # read bytes until line-ending
        line = line.decode('UTF-8','ignore')  # convert to string
        #line = line.rstrip('\r\n')            # remove line-ending characters

        split_line = line.splitlines()

        if oldline != split_line:      
            with open("test_data.csv","a") as f:
                for item in split_line:
                    print (item)
                    x = datetime.datetime.now()

                    # You can write to a text/CSV file.
                    #writer = csv.writer(f,delimiter=",")
                    #writer.writerow([x.strftime("%c"), item])

                    # #You can also send the data to a website/database for processing elsewhere
                    payload = {'pager_message': item}
                    r = requests.post("https://yoursever.com/file_to_post_to.php", data=payload)

                    #Show what the server responded with
                    print(r.text)

        oldline = split_line


    except Exception:
        traceback.print_exc()
        print("exiting")
        #print("Keyboard Interrupt")
        break

有了它,您会注意到它实际上会发布到 php 脚本,从那里您将能够捕获所需的数据。您只需要更改此脚本中的“端口”设置,就可以开始了。该脚本还将数据打印到屏幕上。

该脚本当前托管在这里:https://github.com/vrdriver/Serial-PI-thon https://github.com/vrdriver/Serial-PI-thon

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PHP 读取串口 [重复] 的相关文章

随机推荐

  • Prolog 是否有像 Common Lisp 一样的条件和重启系统?

    Common Lisp 允许异常处理条件并重新启动 http www gigamonkeys com book beyond exception handling conditions and restarts html 粗略地说 当函数抛
  • 解析线性方程的系数

    在java中 我试图找到线性方程的系数 以在我的计算器应用程序中找到线性方程的解 例如 3x 2 6x 3 2 4x 我渴望得到的是 x 的系数和形式的常数ax b 0 在这个特定的例子中 coefficient 19 constant 8
  • 将内存中的 HTML 保存到 S3 AWS Python Boto3

    import boto3 from io import StringIO s3 boto3 client s3 display Altair Charting buff StringIO display save str obj html
  • 如何启动 Matlab 分析器

    我切换到 Matlab 2012b 从 2011a 但未能找到如何在新的 matlab gui 中启动分析器 gui GUI 选项仍然存在 在编辑器选项卡中 一旦函数崩溃 您将能够指定输入参数
  • 我们可以向 super() 传递什么参数?

    我创建了一个Vehicle类并且还想有一个Car从它派生的类调用父构造函数来设置name and color 但是我收到这个错误 super takes at least 1 argument 0 given 这是我的代码 class Ve
  • Promise 构造函数的返回值

    考虑下面两个例子 TEST 1 function test1 return new Promise function return 123 test1 then function data console log DATA data ret
  • 如何取消合并单元格 EPPlus?

    我正在尝试根据表列的数量取消合并并重新合并更短或更长的范围 我使用了下面的代码 但它似乎不起作用 tableSheet Cells C1 J1 Merge false 任何帮助将不胜感激 您运行的是 EPP 4 0 1 吗 如果是这样 则这
  • 一个属性可以访问另一个属性吗?

    我刚刚接触Python 这是一个关于类的逻辑和实现的非常普遍的问题 我对这个问题的基本水平表示歉意 但希望它对其他人也有用 这里有一些上下文可以使它更清楚 Context 我想创建一个代表图像的类 该图像包括 3 个波段 R G B 与 3
  • 从udf访问hdfs文件

    我想通过 udf 调用访问文件 这是我的脚本 files LOAD docs in USING PigStorage AS id stopwords id2 file buzz FOREACH files GENERATE pigbuzz
  • 依赖下拉框 CakePHP 3

    我创建了一个国家 城市和客户表 我试图确保当我从下拉列表中添加新客户时 我可以选择一个国家 然后选择与该国家 地区相关的城市 目前我无法从下拉列表中选择任何城市和国家 地区组合 这是我的数据库 CREATE TABLE IF NOT EXI
  • MySql 全天候查询结果

    我需要获取一天中所有时间的数据 即使计数为 0 现在它输出 clicks hour 1 7 2 13 我现在的查询 SELECT count as clicks hour time as hour FROM clicks WHERE DAT
  • DOM 中相邻的文本节点可以用 Javascript 合并吗?

    假设我在网页 DOM 中有一个句子 当我检查它时 它由 3 个文本节点组成 后跟一些元素 例如粗体或斜体 我想将文本节点合并为一个文本节点 因为相邻的文本节点是没有意义的 没有理由拥有它们 有没有办法轻松合并它们 谢谢 看起来Node no
  • JPA OneToOne 关联,其中 2 个实体使用复合主键但使用不同的列名称?

    我们正在尝试将 Hibernate 与数据库一起使用 该数据库使用lot复合键的使用一直让我们很头疼 不幸的是 我们无法更改架构 因此我们必须在字段之间进行大量额外的映射 我们仅限于使用 JPA 1 0 和 Hibernate 3 3 最大
  • WooCommerce 中特定单个产品页面的附加自定义按钮

    在 WooCommerce 中 需要创建另一个按钮 该按钮重定向到特定产品页面当前 添加到购物车 按钮下方的 联系我们 表单 例如 http offers elements com sg product ha power dose faci
  • 具有“加权”边缘的 Ford-Fulkerson 算法

    福特 福尔克森是否有任何变体可以在边缘增加额外的 重量 尺寸 我的意思是 某些边缘比其他边缘更理想 尽管存在所有可能性 但它会优先考虑理想边缘而不是不太理想的边缘 据我所知 增加权重有两种常见的概括 最小成本流 假设您对每条边都有一个权重
  • 将 $or 与 $elemMatch 和数组外部的条件一起使用

    我的基本结构是我有一个 User 对象和一个包含 subjectId 和每小时价格的会话对象 User defaultHourly Number subjects id String hourly Number 我这样使用 elemMatc
  • 如何在 JavaScript 中计算负整数的模?

    我试图通过递增或递减 1 来迭代 jQuery 对象数组 因此 对于递减部分 我使用以下代码 var splitted id currentDiv attr id split var indexOfDivToGo parseInt spli
  • Vagrant 与 apache 同步文件夹权限问题

    我正在运行 Centos6 4 机器 Running vagrant upVagrant 文件中没有同步文件夹配置就可以了 我可以通过以下方式访问我的主机http localhost 8080它显示 Apache 页面 我可以在中创建ind
  • 比较rapidjson::文档

    我有两个 RapidJSON 文档 一个是我在运行时创建的 另一个是从磁盘读取的 我想比较这两个文件是否相似 比较 RapidJSON 文档的最佳方法是什么 我的 JSON 看起来像这样 SimpleCompany Manager read
  • 如何使用 PHP 读取串口 [重复]

    这个问题在这里已经有答案了 如何使用 php 从连接到我的服务器 运行 kali linux 的旧笔记本电脑 上的 COM 端口的 arduino 读取串行数据 以便我可以在网页上显示数据 我读过有关同一问题的其他问题 所有这些问题要么超级